Secondo this answer Non è possibile inserire interruzioni di riga in un testo e avere visualizzare PDF in modo corretto (se l'utilizzo PDFBox o altro), quindi credo che auto-wrapping del testo per adattarsi in qualche larghezza può anche essere qualcosa che non può fare automaticamente (Inoltre, ci sono molti modi per avvolgere un testo - solo parole intere, spezzarle in parti più piccole, ecc.)
This answer a un'altra domanda (sul centraggio di una stringa) fornisce alcuni suggerimenti su come farlo da soli. Supponendo che hai scritto una funzione possibleWrapPoints(String):int[]
per elencare tutti i punti nel testo un involucro parola può accadere (esclusi "zero", tra cui "lunghezza del testo"), una possibile soluzione potrebbe essere:
PDFont font = PDType1Font.HELVETICA_BOLD; // Or whatever font you want.
int fontSize = 16; // Or whatever font size you want.
int paragraphWidth = 200;
String text = "test text";
int start = 0;
int end = 0;
int height = 10;
for (int i : possibleWrapPoints(text)) {
float width = font.getStringWidth(text.substring(start,i))/1000 * fontSize;
if (start < end && width > paragraphWidth) {
// Draw partial text and increase height
content.moveTextPositionByAmount(10 , height);
content.drawString(text.substring(start,end));
height += font.getFontDescriptor().getFontBoundingBox().getHeight()/1000 * fontSize;
start = end;
}
end = i;
}
// Last piece of text
content.moveTextPositionByAmount(10 , height);
content.drawString(text.substring(start));
Un esempio di possibleWrapPoints
, che consentire il confezionamento in qualsiasi punto che non è parte di una parola (reference), potrebbe essere:
int[] possibleWrapPoints(String text) {
String[] split = text.split("(?<=\\W)");
int[] ret = new int[split.length];
ret[0] = split[0].length();
for (int i = 1 ; i < split.length ; i++)
ret[i] = ret[i-1] + split[i].length();
return ret;
}
Aggiornamento: alcune informazioni aggiuntive:
Il formato file PDF è stato progettato per apparire uguale in situazioni diverse, funzionalità come quella richiesta ha senso in un editor/creatore PDF, ma non nel file PDF di per sé. Per questo motivo, la maggior parte degli strumenti "di basso livello" tendono a concentrarsi sull'affrontare il formato di file stesso e lasciare cose del genere.
Strumenti di livello superiore OTOH di solito ha i mezzi per effettuare questa conversione. Un esempio è Platypus (per Python, però), che do ha un modo semplice per creare paragrafi e fa affidamento sulle funzioni di livello inferiore ReportLab per eseguire il rendering PDF effettivo. Non sono a conoscenza di strumenti simili per PDFBox, ma lo this post fornisce alcuni suggerimenti su come convertire il contenuto HTML in PDF in un ambiente Java, utilizzando strumenti disponibili gratuitamente. Non li ho provati da solo, ma sto postando qui poiché potrebbe essere utile (nel caso in cui il mio tentativo fatto a mano sopra non sia abbastanza).
In PDF è possibile effettuare un'interruzione di riga. (vedi [la mia risposta] (http://stackoverflow.com/a/15205956/1016477)) – Lukas