2013-02-02 25 views
7

Próbuję utworzyć plik PDF z dużą ilością pól tekstowych w dokumencie i polach tekstowych z innej klasy. Używam PDFBox.Nie mogę wymyślić, jak używać PDFBox

OK, tworzenie nowego pliku jest łatwe, a napisanie jednego wiersza tekstu jest łatwe. Teraz, gdy próbuję wstawić następną linię tekstu lub pole tekstowe, nadpisuje ona treść.

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

Daje mi błąd: "Nadpisujesz istniejącą treść, powinieneś użyć trybu dołączania".

Próbuję więc title1.appendRawCommands(String), ale to nie działa.

Jak dodać nowe pola tekstowe i pola tekstowe (z innej klasy)? Przeczytałem dziesiątki samouczków w Internecie, ale pokazują one tylko tworzenie jednej linii.

+1

Mogłeś odpowiedział na swoje pytanie i przyjął go. – Math

Odpowiedz

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

OP pisał to jako odpowiedź, więc będzie flaga z systemem, że istnieje odpowiedź

Ponadto, jeśli pierwszy strumień treść zawiera operacje zasadniczo zmienia stan grafiki, np poprzez zmianę bieżącej macierzy transformacji i chce nowy strumień treść zacząć zmiany te powróciły, należy użyć konstruktora z trzech logicznych parametrów:

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

@Rupesh zobacz moją edycję, możesz spróbować jeszcze jednego konstruktora, który resetuje stan grafiki na początku nowego strumienia. – mkl

+4

To jest przestarzałe. Użyj 'PDPageContentStream title1 = new PDPageContentStream (doc, page, PDPageContentStream.AppendMode.APPEND, false);' zamiast tego. – Defozo

Powiązane problemy