2013-02-02 123 views
7

我想创建一个PDF文件,其中有很多文本框和另一个类的文本框。我正在使用PDFBox。无法弄清楚如何使用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),但它不工作。

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

+1

你可能已经回答了你自己的问题,接受了它。 – Math

回答

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

OP张贴这作为答案,所以这将标志提供给系统,该系统有一个答案

此外,如果第一内容数据流中包含操作基本上改变图形状态,例如通过改变电流转换矩阵,一个希望新的内容流开始与这些变化恢复,应该使用构造有三个布尔参数:

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

@Rupesh看到我的编辑,你可能想尝试另一个构造函数,它在新流开始时重置图形状态。 – mkl

+4

现在已弃用。使用'PDPageContentStream title1 = new PDPageContentStream(doc,page,PDPageContentStream.AppendMode.APPEND,false);'而不是。 – Defozo