sto cercando di modificare un PDF usando questo metodo (primo blocco di codice - utilizzando PDFStreamParser e iterazione attraverso PDFOperator, quindi l'aggiornamento COSString quando necessario):Java PDFBox - Lettura e modifica di un pdf con caratteri speciali (segni diacritici)
Ho un problema con alcuni caratteri UTF-8 (segni diacritici): quando stampo il testo che voglio aggiornare mostra come "Societ?? Ii Na? Ionale" (dove '?' È un codice come 0002 o 0004).
Le cose divertenti sono:
- quando scrivo il file pdf aggiornato, i personaggi sono spettacolo correttamente (anche se mi could't individuati e sostituirli)
- se provo a spogliare il testo usando getText di PDFTextStripper (...), il testo viene estratto perfettamente.
- ho provato 2 versioni pdfbox: 1.5.0 (che si comporta come descritto sopra) e 1.8.1 (dove il file PDF finale, scritto, non visualizza caratteri speciali correttamente e le stringhe "null" appaiono nel documento)
Cosa posso fare (configurare) per le classi utilizzate per aggiornare il pdf (o almeno provare ...) in modo che tutti i caratteri UTF-8 siano visualizzati correttamente?
EDIT:
Screenshot:
EDIT 2:
ho cercato attraverso il codice sorgente PDFBox in PDFTextStripper e la sua superclasse, e ho scoperto come il testo è stato estratto:
All'inizio del metodo processStream abbiamo
graphicsState = new PDGraphicsState(aPage.findCropBox());
quando strippaggio il testo in processEncodedText, un'istanza di classe PDFont è usato così:
final PDFont font = graphicsState.getTextState().getFont();
e il testo viene estratto da un byte [] con:
String c = font.encode(string, i, codeLength);
Il nuovo problema è che quando istanzio una classe PDFont con le stesse 2 righe di codice, ottengo una classe di font "null", e quindi non posso usare il metodo .encode (...). Il codice sorgente per le classi sono qui: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.pdfbox/pdfbox/1.5.0/org/apache/pdfbox/util/PDFStreamEngine.java e http://grepcode.com/file/repo1.maven.org/maven2/org.apache.pdfbox/pdfbox/1.5.0/org/apache/pdfbox/util/PDFTextStripper.java
Sto scavando ormai da più ...
prendiamo ciascuno alla volta. Quindi quando stampi il tuo testo che contiene alcuni segni diacritici viene visualizzato con ??? o qualche cifra invece? Potete fornire un esempio delle vostre dichiarazioni di stampa e anche un po 'di output? – Eugene
Il codice di sostituzione della stringa che hai trovato [qui su coderanch] (http: //www.coderanch.com/t/556009/open-source/PdfBox-Replace-String-double-pdf) difficilmente funziona: 1. La codifica delle stringhe nel contenuto delle pagine PDF è completamente al carattere in questione; il tuo codice presuppone una codifica standard. 2. Le lettere di una singola parola (o segnaposto nel caso in questione) possono essere distribuite su più stringhe nel flusso di contenuti; il tuo codice non troverà segnaposti separati. 3. I caratteri possono essere incorporati nel PDF solo parzialmente; se la tua stringa di sostituzione utilizza caratteri non altrimenti utilizzati, non verranno visualizzati. ... – mkl
@Eugene: il testo viene visualizzato correttamente, ad eccezione dei segni diacritici visualizzati come quadrati a 4 cifre (due in alto - per esempio 00, due in basso, ex 02). Non riesco a tagliare/incollare l'output nel browser (perché verranno visualizzati come spazi bianchi), ma aggiungerò uno screenshot con l'output nella console di Eclipse. –