2017-10-31 3 views
1

Ich habe einen Algorithmus implementiert, um Text auf Seiten mit PDFBox-Bibliothek für Android zu zeichnen. Das Problem ist, wenn ich eine neue Seite hinzufüge, ist der Text wie auf dem Bild unten überlappt. Ich bin sicher, dass ich die PDPageContentStream.newLine() Methode verwende, aber das Ergebnis ist nicht wie erwartet. Fehle ich etwas anderes? enter image description herePDFBox Überlappte Text

Hier ist mein Code-Schnipsel

PDPage page1 = new PDPage(); 
getInstance().getAnnexe().addPage(page1); 
PDPageContentStream contentStream1 = new 
PDPageContentStream(getInstance().getAnnexe(), page1, true, true); 
contentStream1.beginText(); 
contentStream1.newLineAtOffset(100F, 650F); 
contentStream1.setFont(font, fontSize); 
printMultipleLines(subSet, contentStream1); 
contentStream1.endText(); 
contentStream1.close(); 

und das ist die Methode printMultipleLines()

private void printMultipleLines(ArrayList<String> lines, PDPageContentStream contentStream) { 
    try { 
     for (String line : 
       lines) { 
      if (line.length() > 110) { 
       // Print line as 2 lines 
       contentStream.showText(line.substring(0, 90)); 
       contentStream.newLine(); 
       contentStream.showText(line.substring(90, line.length())); 
      } else 
       // Print line as a whole 
       contentStream.showText(line); 
      // Print Carriage Return 
      contentStream.newLine(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+2

Wenn Sie newLine verwenden, müssen Sie den Text leading (TL operator) einstellen. Ich weiß nicht, ob es in PDFBox für Android verfügbar ist. Alternative: rufe 'newLineAtOffset' mit einem relativen y-Wert auf, z. (0, -20). –

+0

@TilmanHaushrer Ich benutze diese Zeile 'contentStream1.newLineAtOffset (100F, 650F);' –

+1

Ja, aber für Folgezeilen versuchen (0, -20). Die Parameter sind ** relativ ** innerhalb eines Textblocks. –

Antwort

1

Vielen Dank, das Problem war mit dem TL Betreiber @TilmanHausherr. Jede neu erstellte Seite hatte TL gleich Null der Benutzerstandardeinheiten. Ich musste nur den Zeilenabstand für den Text einstellen. Hier ist der aktualisierte Code:

PDPage page1 = new PDPage(); 
getInstance().getAnnexe().addPage(page1); 
PDPageContentStream contentStream1 = new 
PDPageContentStream(getInstance().getAnnexe(), page1, true, true); 
// Set the Text Leading (TL operator) here!!!! 
contentStream1.setLeading(12); 
contentStream1.beginText(); 
contentStream1.newLineAtOffset(100F, 650F); 
contentStream1.setFont(font, fontSize); 
printMultipleLines(subSet, contentStream1); 
contentStream1.endText(); 
contentStream1.close(); 

Alle Danksagungen geht an @ TilmanHausherr für seine schnelle und präzise Antwort.

Verwandte Themen