以毫米为单位的 itext 矩形
Itext rectangle from milimeters
我尝试使用矩形 class 和 Utilities.milimetersToPoints 方法在带有 Itext 的 PDF 中绘制 A5 矩形,但是当我打印 PDF 并测量矩形时,测量值不是 A5 尺寸。
public static boolean createPDF(String pathPDF) {
Document document = new Document(PageSize.A4);
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pathPDF));
writer.addViewerPreference(PdfName.PRINTSCALING, PdfName.NONE);
document.open();
createRectangle(writer, 30.75f, 11, 148.5f, 210, Color.RED);
document.close();
} catch (Exception e) {
logger.error("Error , e);
return false;
}
return true;
}
private static void createRectangle(PdfWriter writer, float x, float y, float width, float height, Color color) {
float posX = Utilities.millimetersToPoints(x);
float posY = Utilities.millimetersToPoints(y);
float widthX = Utilities.millimetersToPoints(width+x);
float heightY = Utilities.millimetersToPoints(height+y);
Rectangle rect = new Rectangle(posX, posY, widthX, heightY);
PdfContentByte canvas = writer.getDirectContent();
rectangle.setBorder(Rectangle.BOX);
rectangle.setBorderWidth(1);
rectangle.setBorderColor(color);
canvas.rectangle(rectangle);
}
我做错了什么?
我用的是itext 2.1.7
非常感谢
我只是 运行 你的 SSCCE(简短、自包含、正确(可编译)、示例),并从 Adobe Reader 打印了生成的 PDF。我使用 Adobe Reader 测量工具在屏幕上和纸上测量了红色矩形。
屏幕上的结果:
与您的参数匹配
createRectangle(writer, 30.75f, 11, 148.5f, 210, Color.RED);
------------------------------------^^^^^^--^^^
完全正确,纸上的测量结果与用尺子测量的结果完全吻合。
您这边出现问题的可能原因:
我使用的是当前的 iText 版本。但是,虽然自 2.1.7 以来已经有很多改进和修复,但我怀疑这里是否应用了任何修复。
不同的打印机;一些打印机在打印时会缩放。
打印时使用的不同查看器;一些观众可能总是规模。
打印机对话框中的不同缩放设置。
我尝试使用矩形 class 和 Utilities.milimetersToPoints 方法在带有 Itext 的 PDF 中绘制 A5 矩形,但是当我打印 PDF 并测量矩形时,测量值不是 A5 尺寸。
public static boolean createPDF(String pathPDF) {
Document document = new Document(PageSize.A4);
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pathPDF));
writer.addViewerPreference(PdfName.PRINTSCALING, PdfName.NONE);
document.open();
createRectangle(writer, 30.75f, 11, 148.5f, 210, Color.RED);
document.close();
} catch (Exception e) {
logger.error("Error , e);
return false;
}
return true;
}
private static void createRectangle(PdfWriter writer, float x, float y, float width, float height, Color color) {
float posX = Utilities.millimetersToPoints(x);
float posY = Utilities.millimetersToPoints(y);
float widthX = Utilities.millimetersToPoints(width+x);
float heightY = Utilities.millimetersToPoints(height+y);
Rectangle rect = new Rectangle(posX, posY, widthX, heightY);
PdfContentByte canvas = writer.getDirectContent();
rectangle.setBorder(Rectangle.BOX);
rectangle.setBorderWidth(1);
rectangle.setBorderColor(color);
canvas.rectangle(rectangle);
}
我做错了什么?
我用的是itext 2.1.7 非常感谢
我只是 运行 你的 SSCCE(简短、自包含、正确(可编译)、示例),并从 Adobe Reader 打印了生成的 PDF。我使用 Adobe Reader 测量工具在屏幕上和纸上测量了红色矩形。
屏幕上的结果:
与您的参数匹配
createRectangle(writer, 30.75f, 11, 148.5f, 210, Color.RED);
------------------------------------^^^^^^--^^^
完全正确,纸上的测量结果与用尺子测量的结果完全吻合。
您这边出现问题的可能原因:
我使用的是当前的 iText 版本。但是,虽然自 2.1.7 以来已经有很多改进和修复,但我怀疑这里是否应用了任何修复。
不同的打印机;一些打印机在打印时会缩放。
打印时使用的不同查看器;一些观众可能总是规模。
打印机对话框中的不同缩放设置。