2017-10-31 5 views
0

Ich verwende die Apache PDFBox Java-Bibliothek, um PDFs zu erstellen. Aber ich bin vor Problem in Rendering mehrzeiligen Text (Zeilenumbruch):Apache PDFBox Java-Bibliothek - Text wird nicht gerendert

//Creating PDF document object 
PDDocument doc = new PDDocument(); 

//Adding the blank page to the document 
doc.addPage(new PDPage()); 

PDPage page = doc.getPage(0); 
PDImageXObject pdImage = PDImageXObject.createFromFile("C:\\Users\\abc\\Desktop\\abc.png", doc); 

PDPageContentStream contentStream = new PDPageContentStream(doc, page); 
contentStream.drawImage(pdImage, 10, 720); 

//Begin the Content stream 
contentStream.beginText(); 
contentStream.newLineAtOffset(50, 735); 

//Setting the font to the Content stream 
contentStream.setFont(PDType1Font.TIMES_ROMAN, 16); 
contentStream. showText("ABC Management System"); 

//Setting the leading 
//contentStream.setLeading(14.5f); 

//Setting the position for the line 
contentStream.newLineAtOffset(25, 600); 

String text1 = "This is an example of adding text to a page in the pdf document we can add as many lines"; 
String text2 = "as we want like this using the ShowText() method of the ContentStream class"; 

//Adding text in the form of string 
contentStream. showText(text1); 
contentStream.newLine(); 
contentStream. showText(text2); 

//Ending the content stream 
contentStream.endText(); 

System.out.println("Content added"); 

//Closing the content stream 
contentStream.close(); 

//Saving the document 
doc.save("my_doc.pdf"); 

System.out.println("PDF created"); 

//Closing the document 
doc.close(); 

Die Frage, die ich bin faciing die letzte Hälfte des Textes ist (Text1, Text2) nicht in der PDF-Datei gerendert zu werden. Nur das Bild und die erste Zeile ABC Management System wird in der PDF angezeigt.

Um mehrzeilige Texte zu generieren, habe ich verwiesen: PDFBox - Adding Multiple Lines.

Ich verstehe nicht, was setLeading tut und daher auskommentiert und versuchte es erneut, aber der Text wurde immer noch nicht gerendert.

+0

@ TilmanHausdrücker Es hat funktioniert. Vielen Dank! – HBK

+0

@TilmanHausdrücker Gibt es eine Möglichkeit, die Hintergrundfarbe zu ändern? – HBK

+0

Sie müssen ein Rechteck in der entsprechenden nicht streichenden Farbe zeichnen. –

Antwort

1

newLineAtOffset() ist relativ zur aktuellen Textposition. Um von 0 aus neu zu starten, ist es am einfachsten, die aktuelle zu beenden und einen neuen Textblock zu starten. Ihr aktueller Code platziert Sie bei y 1335 (oder etwas niedriger, abhängig von der führenden).

+0

Gibt es eine Abkürzung, um Zeilenumbruch zu machen? Im Moment müssen wir eine Linie in zwei Strings aufteilen, um das zu erreichen. – HBK

+0

Nr. PDFBox ist Low-Level, im Gegensatz zu ITEXT. Sie müssen Zeilenumbruch/Seitenumbruch selbst durchführen. –