Il formato PDF consente interruzioni di riga, ma PDFBox non ha funzionalità incorporate per interruzioni di riga.
Per utilizzare le interruzioni di riga in PDF, è necessario definire l'interlinea che si desidera utilizzare con il TL
-operator. Il T*
-operator effettua un'interruzione di riga. Il '
-operator scrive il testo specificato nella riga successiva. (Vedi le specifiche PDF per ulteriori dettagli, capitolo "Testo". Non è molto.)
Ecco alcuni frammenti di codice. Entrambi fanno lo stesso, ma il primo frammento utilizza '
e il secondo frammento utilizza T*
.
private void printMultipleLines(
PDPageContentStream contentStream,
List<String> lines,
float x,
float y) throws IOException {
if (lines.size() == 0) {
return;
}
final int numberOfLines = lines.size();
final float fontHeight = getFontHeight();
contentStream.beginText();
contentStream.appendRawCommands(fontHeight + " TL\n");
contentStream.moveTextPositionByAmount(x, y);
contentStream.drawString(lines.get(0));
for (int i = 1; i < numberOfLines; i++) {
contentStream.appendRawCommands(escapeString(lines.get(i)));
contentStream.appendRawCommands(" \'\n");
}
contentStream.endText();
}
private String escapeString(String text) throws IOException {
try {
COSString string = new COSString(text);
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
string.writePDF(buffer);
return new String(buffer.toByteArray(), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
// every JVM must know ISO-8859-1
throw new RuntimeException(e);
}
}
Usa T*
per interruzione di linea:
private void printMultipleLines(
PDPageContentStream contentStream,
List<String> lines,
float x,
float y) throws IOException {
if (lines.size() == 0) {
return;
}
final int numberOfLines = lines.size();
final float fontHeight = getFontHeight();
contentStream.beginText();
contentStream.appendRawCommands(fontHeight + " TL\n");
contentStream.moveTextPositionByAmount(x, y);
for (int i = 0; i < numberOfLines; i++) {
contentStream.drawString(lines.get(i));
if (i < numberOfLines - 1) {
contentStream.appendRawCommands("T*\n");
}
}
contentStream.endText();
}
per ottenere l'altezza del carattere è possibile utilizzare questo comando:
fontHeight = font.getFontDescriptor().getFontBoundingBox().getHeight()/1000 * fontSize;
Si potrebbe desiderare di moltiplicarlo briciolo qualche passo della linea fattore.
@Erik: Ma che cosa è con 'T *' - e '' '-operator? specifica PDF dice a T *: "Sposta all'inizio della riga successiva". E a ': "Passa alla riga successiva e mostra una stringa di testo". Ma non sono riuscito a trovare un modo per usare T * o 'in pdfBox. (E non sono sicuro di aver capito le specifiche corrette o meno). – Lukas