以毫米为单位的 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(简短、自包含、正确(可编译)、示例),并从 Adob​​e Reader 打印了生成的 PDF。我使用 Adob​​e Reader 测量工具在屏幕上和纸上测量了红色矩形。

屏幕上的结果:

与您的参数匹配

createRectangle(writer, 30.75f, 11, 148.5f, 210, Color.RED);
------------------------------------^^^^^^--^^^

完全正确,纸上的测量结果与用尺子测量的结果完全吻合。


您这边出现问题的可能原因:

  1. 我使用的是当前的 iText 版本。但是,虽然自 2.1.7 以来已经有很多改进和修复,但我怀疑这里是否应用了任何修复。

  2. 不同的打印机;一些打印机在打印时会缩放。

  3. 打印时使用的不同查看器;一些观众可能总是规模。

  4. 打印机对话框中的不同缩放设置。