无法理解如何使用PDFBox

问题描述 投票:9回答:2

我正试图创建一个PDF文件,文件中有很多文本框和另一个类的文本框。我正在使用PDFBox。

好的,创建一个新文件很容易,写一行文字也很容易。现在,当我试图插入下一行文本或文本字段时,它覆盖了内容。

    PDDocument doc = null;
    PDPage page = null;

       try{
           doc = new PDDocument();
           page = new PDPage();

           doc.addPage(page);
           PDFont font = PDType1Font.HELVETICA_BOLD;

           PDPageContentStream title = new PDPageContentStream(doc, page);
           title.beginText();
           title.setFont( font, 14 );
           title.moveTextPositionByAmount( 230, 720 );
           title.drawString("DISPATCH SUMMARY");
           title.endText();
           title.close();

           PDPageContentStream title1 = new PDPageContentStream(doc, page);
           title1.beginText();
           title1.setFont( font, 11 );
           title1.moveTextPositionByAmount( 30, 620 );
           title1.drawString("DEPARTURE");
           title1.endText();
           title1.close();


           doc.save("PDFWithText.pdf");
           doc.close();
    } catch (Exception e){
        System.out.println(e);
    }

它确实给我一个错误。"你正在覆盖一个现有的内容,你应该使用追加模式"。

所以我尝试 title1.appendRawCommands(String)但它不工作。

我如何添加新的文本框和文本字段(来自其他类)?我在互联网上阅读了几十篇教程,但它们只显示创建一行。

java pdfbox
2个回答
15
投票
PDPageContentStream title1 = new PDPageContentStream(doc, page, true, true);

OP将此作为答案发布,所以这将标志着系统有一个答案。

此外,如果第一个内容流包含了实质性地改变图形状态的操作,例如改变当前的变换矩阵,并且希望新的内容流在开始时就还原这些变化,那么应该使用带有三个布尔参数的构造函数。

PDPageContentStream title1 = new PDPageContentStream(doc, page, true, true, true);

0
投票

这个实现是 弃用.

PDPageContentStream title1 = new PDPageContentStream(doc, page, true, true);

新的执行方式将是:

PDPageContentStream title1 = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.OVERWRITE, true);
© www.soinside.com 2019 - 2024. All rights reserved.