11

我正在尝试创建一个 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),但它不起作用。

我将如何添加新的文本框和文本字段(来自另一个类)?我在 Internet 上阅读了数十篇教程,但它们只显示创建一行。

4

2 回答 2

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

OP将此作为答案发布,因此这将向系统标记有答案

此外,如果第一个内容流包含显着改变图形状态的操作,例如通过更改当前转换矩阵,并且希望新内容流从这些更改恢复开始,则应该使用具有三个布尔参数的构造函数:

PDPageContentStream title1 = new PDPageContentStream(doc, page, true, true, true);
于 2014-03-14T20:10:50.100 回答
2

此实现已弃用

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

新的实施将是

PDPageContentStream title1 = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.OVERWRITE, true);
于 2020-05-13T16:26:29.807 回答