2017-10-24 3 views
0

Also im Grunde habe ich schon beim Erstellen eines PDFs an einer bestimmten Stelle einen Text erzeugt.Apache PDFBox: Wie kann ich die Position der von mir ausgegebenen Texte angeben?

Aber jetzt mein Problem ist, wie kann ich es für Text zu tun, die auf verschiedenen Positionen

Erwartete generiert PDF zu finden: Sie schon wählen die

Expected Generated PDF

 contentStream.setLeading(15);  
     contentStream.newLineAtOffset(175, 670); 

     String text = "Text 1"; 
     String text1 = "Text 2"; 
     String text2 = "Text 3"; 
     String text3 = "Text 4"; 
     String text4 = "Text 5"; 

     contentStream.showText(text); 
     contentStream.newLine(); 
     contentStream.showText(text1);  
     contentStream.newLine(); 
     contentStream.showText(text2);  
     contentStream.newLine(); 
     contentStream.showText(text3);  
     contentStream.newLine(); 
     contentStream.showText(text4); 
     contentStream.newLine(); 
     contentStream.showText(text5);  
+1

* "Wie mache ich es für Text, die an anderer Position befinden" * - verwenden Sie zusätzliche 'newLineAtOffset' Anrufe. – mkl

+0

Wie soll das gemacht werden? Ich habe versucht, die newLineAtOffset nach contentStream.showText (text4); und es gibt immer noch nicht aus, was ich erwarte – teamotea

+0

Ich habe es aussortiert, ich muss den beginText und endText noch einmal aufrufen.Danke – teamotea

Antwort

2

In Ihrem Code Position für die erste Zeile starten wie folgt:

contentStream.newLineAtOffset(175, 670); 

In Bezug auf Ihre Frage

wie mache ich es für Text, der auf unterschiedlichen Positionen angeordnet sind,

daher: Sie einfach newLineAtOffset wieder verwenden!

Sie müssen sich bewusst sein, obwohl, dass newLineAtOffset(x, y) tut nicht die neue Linie Start in den absolute gesetzt Koordinaten x, y sondern fügt diese Werte - die Koordinaten der vorherigen Zeile beginnen, daher die AtOffset im Methodennamen.

Als vorherigen Zeilen beginnen Koordinaten 0, 0 am Anfang eines Textobjekts zurückgesetzt (contentStream.beginText()), die ersten newLineAtOffset in einem Textobjekt erscheint absolute Koordinaten zu verwenden.

Wenn Sie also absolute Koordinaten bevorzugen, können Sie jedes Mal ein neues Textobjekt starten, wenn Sie den Zeilenanfang anders als contentStream.newLine() verschieben müssen.

Wenn Sie mit relativen Koordinaten sind in Ordnung, aber Sie brauchen nicht zu neuen Textobjekte zu starten, die oft aber stattdessen Offsets von Zeile zu Zeile in newLineAtOffset starten starten verwenden, zB:

try (PDDocument document = new PDDocument()) { 
    PDPage page = new PDPage(); 
    document.addPage(page); 

    PDFont font = PDType1Font.HELVETICA; 

    String text = "Text 1"; 
    String text1 = "Text 2"; 
    String text2 = "Text 3"; 
    String text3 = "Text 4"; 
    String text4 = "Text 5"; 
    String text5 = "Text 6"; 

    try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) { 
     contentStream.beginText(); 

     contentStream.newLineAtOffset(175, 670); 
     contentStream.setFont(font, 12); 
     contentStream.setLeading(15); 
     contentStream.showText(text); 
     contentStream.newLine(); 
     contentStream.showText(text1);  

     contentStream.newLineAtOffset(225, 10); 
     contentStream.setFont(font, 15); 
     contentStream.showText(text2);  

     contentStream.newLineAtOffset(-390, -175); 
     contentStream.setFont(font, 13.5f); 
     contentStream.setLeading(17); 
     contentStream.showText(text3); 
     contentStream.newLine(); 
     contentStream.showText(text5);  

     contentStream.newLineAtOffset(300, 13.5f); 
     contentStream.showText(text4);  

     contentStream.endText(); 

     contentStream.moveTo(0, 520); 
     contentStream.lineTo(612, 520); 
     contentStream.stroke(); 
    } 

    document.save(TARGET_FILE); 
} 

(ArrangeText Test testArrangeTextForTeamotea)

die

Screenshot

in

ergibt

, die wiederum Ihr Bild annähert. (Ich habe keine Pixel in Ihrem Bild gezählt, also ist dies nur eine Annäherung.)

Verwandte Themen