Cannot figure out how to use PDFBox

Igor Tupitsyn picture Igor Tupitsyn · Feb 2, 2013 · Viewed 8.4k times · Source

I am trying to create a PDF file with a lot of text boxes in the document and textfields from another class. I am using PDFBox.

OK, creating a new file is easy and writing one line of text is easy. Now, when I am trying to insert the next text line or textfield, it overwrites the content.

    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);
    }

It does give me an error: "You are overwriting an existing content, you should use the append mode".

So I am trying title1.appendRawCommands(String), but it is not working.

How would I add new text boxes and textfields (from another class)? I have read tens of tutorials on Internet, but they only show creating one line.

Answer

Kevin Panko picture Kevin Panko · Mar 14, 2014
PDPageContentStream title1 = new PDPageContentStream(doc, page, true, true);

OP posted this as the answer, so this will flag to the system that there was an answer

Furthermore, if the first content stream contains operations substantially changing the graphics state, e.g. by changing the current transformation matrix, and one wants the new content stream to start with these changes reverted, one should use the constructor with three boolean parameters:

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