我尝试使用Rectangle类和Utilities.milimetersToPoints方法在Itext中使用Itext绘制A5 rentangle但是当我打印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 非常感谢
答案 0 :(得分:1)
我刚刚运行了你的SSCCE(简短,自包含,正确(可编译),例子),并从Adobe Reader打印出生成的PDF。我使用Adobe Reader测量工具和纸上测量了屏幕上的红色矩形。
屏幕上的结果:
匹配您的参数
createRectangle(writer, 30.75f, 11, 148.5f, 210, Color.RED);
------------------------------------^^^^^^--^^^
确切地说,纸上的测量与标尺的测量完全匹配。
您身边可能出现问题的原因:
我使用的是当前的iText版本。虽然自2.1.7以来已有相当多的改进和修复,但我怀疑在这里已经应用了任何修复。
不同的打印机;一些打印机在打印时可以缩放。
您打印的不同观看者;一些观众可能会一直缩放。
打印机对话框中的不同缩放设置。