Dictionary 为距离注释创建度量词典
创建测量距离注释不会显示正确的测量单位,也不会给出正确的计算。知道我做错了什么吗?或者如果缺少一些数据 我当前正在创建“测量距离”注释。使用像素,效果很好。但由于现在我考虑了实际的度量和单位,我不确定代码的哪一部分有问题,或者我是否缺少一些东西 请看图片。这是我用来创建距离注释的一些应用程序,我校准它,使距离为14.5cm,所以通过将其除以像素,每个像素的校准值将为0.0519548 现在,当我将它应用于iText代码时,我很困惑为什么显示总是以英寸为单位?即使我将代码设置为英寸而不是厘米,计算也不正确 我不完全确定问题出在哪里Dictionary 为距离注释创建度量词典,dictionary,annotations,itext,measure,Dictionary,Annotations,Itext,Measure,创建测量距离注释不会显示正确的测量单位,也不会给出正确的计算。知道我做错了什么吗?或者如果缺少一些数据 我当前正在创建“测量距离”注释。使用像素,效果很好。但由于现在我考虑了实际的度量和单位,我不确定代码的哪一部分有问题,或者我是否缺少一些东西 请看图片。这是我用来创建距离注释的一些应用程序,我校准它,使距离为14.5cm,所以通过将其除以像素,每个像素的校准值将为0.0519548 现在,当我将它应用于iText代码时,我很困惑为什么显示总是以英寸为单位?即使我将代码设置为英寸而不是厘米,计
public class Test {
public static void main(String[] args) throws Exception {
PdfReader reader = new PdfReader("src.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("result.pdf"));
Rectangle location = new Rectangle(55.78125f, 493.875f, 253.59375f, 562.3125f);
PdfDictionary dict = new PdfDictionary();
PdfArray lineEndings = new PdfArray();
lineEndings.add(new PdfName("OpenArrow"));
lineEndings.add(new PdfName("OpenArrow"));
PdfAnnotation stamp = PdfAnnotation.createLine(stamper.getWriter(), location, "test measurement", 55.78125f, 562.3125f, 253.59375f, 493.875f);
stamp.put(new PdfName("LE"), lineEndings);
stamp.put(PdfName.ROTATE, new PdfNumber(0));
stamp.put(PdfName.MEASURE, createMeasureDictionary());
stamp.put(new PdfName("IT"), new PdfName("LineDimension"));
stamp.put(new PdfName("Cap"), new PdfBoolean(true));
stamp.put(PdfName.F, new PdfNumber(516));
stamp.setColor(PdfGraphics2D.prepareColor(Color.RED));
stamper.addAnnotation(stamp, 1);
stamper.close();
reader.close();
}
private static PdfDictionary createMeasureDictionary() {
PdfDictionary measureDictionary = new PdfDictionary(PdfName.MEASURE);
measureDictionary.put(PdfName.R, new PdfString("1 cm = 1 cm"));
PdfDictionary xDictionary = new PdfDictionary(PdfName.NUMBERFORMAT);
xDictionary.put(PdfName.U, new PdfString("cm"));
xDictionary.put(PdfName.C, new PdfNumber(0.0519548f));
measureDictionary.put(PdfName.X, new PdfArray(xDictionary));
PdfDictionary dDictionary = new PdfDictionary(PdfName.NUMBERFORMAT);
dDictionary.put(PdfName.U, new PdfString("cm"));
dDictionary.put(PdfName.C, new PdfNumber(1.0f));
measureDictionary.put(PdfName.D, new PdfArray(dDictionary));
PdfDictionary aDictionary = new PdfDictionary(PdfName.NUMBERFORMAT);
aDictionary.put(PdfName.U, new PdfString("cm"));
aDictionary.put(PdfName.C, new PdfNumber(1.0f));
measureDictionary.put(PdfName.A, new PdfArray(aDictionary));
return measureDictionary;
}
}
@mkl即时标记您,以防您有空闲时间检查和指导。谢谢。我没有完全理解你的数学 您的线路长度约为209.3个用户空间单位。如果你想让那条线代表14.5厘米,那么转换系数应该是0.069273,而不是0.0519548 背景
xDictionary.put(PdfName.C, new PdfNumber(0.069273f));
我得到了一个PDF文件,在开幕式上
稍微移动一下(之后Adobe Reader会重建外观)
所以没有英寸…你是对的。老实说,我不知道我是怎么得到这个值的。一定是混淆了一些东西,因为我使用了相同的公式,现在得到了0.069273。谢谢,所以我的代码是正确的。以像素为单位的点坐标和校准值正确。但当我将这些像素坐标转换为pdf坐标时,我仍然使用相同的校准值,这导致了错误的测量。所以我必须得到正确的校准值。