Apache PDFBox:如何指定要输出的文本的位置

2024-02-05

所以基本上我已经实现了在特定位置生成 pdf 时创建文本。

但现在我的问题是,如何处理位于不同位置的文本

预期生成的 PDF:

      contentStream.setLeading(15);     
      contentStream.newLineAtOffset(175, 670);

      String text = "Text 1";
      String text1 = "Text 2";
      String text2 = "Text 3";
      String text3 = "Text 4";
      String text4 = "Text 5";

      contentStream.showText(text);  
      contentStream.newLine();
      contentStream.showText(text1);      
      contentStream.newLine();
      contentStream.showText(text2);      
      contentStream.newLine();
      contentStream.showText(text3);      
      contentStream.newLine();
      contentStream.showText(text4);  
      contentStream.newLine();
      contentStream.showText(text5);      

在您的代码中,您已经选择了第一行开始的位置,如下所示:

contentStream.newLineAtOffset(175, 670);

关于你的问题

如何处理位于不同位置的文本

因此:你只需使用newLineAtOffset again!

但你必须意识到,newLineAtOffset(x, y) does not将新行开始设置为absolute坐标x, y但反而adds这些值to的坐标上一行开始,因此AtOffset在方法名称中。

As the 上一行开始坐标重置为0, 0在文本对象的开头(contentStream.beginText()),你的第一个newLineAtOffset在文本对象中appears使用绝对坐标。

因此,如果您更喜欢使用绝对坐标,则每次需要以不同方式移动行起点时,都可以启动一个新的文本对象contentStream.newLine() does.

但是,如果您可以使用相对坐标,则不需要经常启动新的文本对象,而是使用从行开始到行开始的偏移量newLineAtOffset, e.g.:

try (PDDocument document = new PDDocument()) {
    PDPage page = new PDPage();
    document.addPage(page);

    PDFont font = PDType1Font.HELVETICA;

    String text = "Text 1";
    String text1 = "Text 2";
    String text2 = "Text 3";
    String text3 = "Text 4";
    String text4 = "Text 5";
    String text5 = "Text 6";

    try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
        contentStream.beginText();

        contentStream.newLineAtOffset(175, 670);
        contentStream.setFont(font, 12);
        contentStream.setLeading(15);
        contentStream.showText(text);
        contentStream.newLine();
        contentStream.showText(text1);      

        contentStream.newLineAtOffset(225, 10);
        contentStream.setFont(font, 15);
        contentStream.showText(text2);      

        contentStream.newLineAtOffset(-390, -175);
        contentStream.setFont(font, 13.5f);
        contentStream.setLeading(17);
        contentStream.showText(text3);
        contentStream.newLine();
        contentStream.showText(text5);      

        contentStream.newLineAtOffset(300, 13.5f);
        contentStream.showText(text4);      

        contentStream.endText();

        contentStream.moveTo(0, 520);
        contentStream.lineTo(612, 520);
        contentStream.stroke();
    }

    document.save(TARGET_FILE);
}

(排列文本 https://github.com/mkl-public/testarea-pdfbox2/blob/master/src/test/java/mkl/testarea/pdfbox2/content/ArrangeText.java#L36 test testArrangeTextForTeamotea)

这导致

这反过来又近似你的图像。 (我没有计算图像中的像素,所以这只是一个近似值。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache PDFBox:如何指定要输出的文本的位置 的相关文章

随机推荐