2

我的目标是根据预定义的模板生成 PDF。我从 https://github.com/ralfstuckert/pdfbox-layout/开始,此时我正在评估https://github.com/LibrePDF/OpenPDF/(iText 2.1.7 fork)。

这是我想要的模板:

在此处输入图像描述

有两张图片并排。右图下方有文字与图片边界对齐,如果比图片本身长,可以换行。

然后会有几个段落。它们的垂直位置可以根据段落大小进行调整。

理想的 API 应该有一种方法,我可以在其中设置文本、对齐方式、光标位置和宽度,并将其呈现在框中。

我当前的代码:

    Document document = new Document(PageSize.A4, 0, 0, 0, 0);
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf"));
    document.open();
    PdfContentByte cb = writer.getDirectContent ();
    addBorder(document, cb);
    addPicture(document);
    addPhoto(document, "This is some text –\ncontinued.\nLast line", cb);
    document.close();
}

private static void addPicture(Document document) throws DocumentException, IOException {
    Image image = Image.getInstance("picture.png");
    image.scalePercent (40.0f);
    image.setAbsolutePosition(90, 650);
    document.add(image);
}

private static void addPhoto(Document document, String verse, PdfContentByte cb) throws DocumentException, IOException {
    Image image = Image.getInstance("another_picture.png");
    image.scalePercent (30.0f);
    image.setAbsolutePosition(380, 650);
    document.add(image);

    Paragraph paragraph = new Paragraph(verse);
    document.add(paragraph);

    BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
    cb.setFontAndSize(bf, 10);
    cb.beginText();
    cb.showTextAligned(PdfContentByte.ALIGN_LEFT, verse, 380, 650, 0);
    cb.endText ();
}

private static void addBorder(Document doc, PdfContentByte cb) throws IOException, DocumentException {
    cb.rectangle (doc.left(), doc.bottom(), doc.right() - doc.left (), doc.top() - doc.bottom ());
    cb.stroke();
}

由于方法,我能够将两张图片放在我想要的位置setAbsolutePosition()。但是没有类似的方法Paragraph。我找到PdfContentByte了可以根据需要定位文本的类,但它缺少Paragraph文本换行或翻译换行符等基本功能。

PDF如何实现精准定位?我想重用现有代码,而不是计算每个句子的宽度并自己拆分。

4

0 回答 0