Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法了解如何使用PDFBox_Java_Pdfbox - Fatal编程技术网

Java 无法了解如何使用PDFBox

Java 无法了解如何使用PDFBox,java,pdfbox,Java,Pdfbox,我正在尝试创建一个PDF文件,在文档和其他类的文本字段中包含许多文本框。我正在使用PDFBox 好的,创建一个新文件很容易,写一行文本也很容易。现在,当我尝试插入下一个文本行或文本字段时,它会覆盖内容 PDDocument doc = null; PDPage page = null; try{ doc = new PDDocument(); page = new PDPage(); doc.ad

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

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

PDPageContentStream title1 = new PDPageContentStream(doc, page, true, true);
OP将此作为答案发布,因此这将向系统标记有答案

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

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

此实现已弃用

PDPageContentStream title1 = new PDPageContentStream(doc, page, true, true);
新的实施将是

PDPageContentStream title1 = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.OVERWRITE, true);

您本可以回答自己的问题并接受它。@请参阅我的编辑,您可能想尝试另一个在新流开始时重置图形状态的构造函数。现在不推荐使用此构造函数。使用
PDPageContentStream title1=新的PDPageContentStream(doc,page,PDPageContentStream.AppendMode.APPEND,false)取而代之。