2016-07-08 13 views
1

Ich habe HTML-Seite mit kyrillischen Buchstaben und ich verwende iText Bibliothek für die Konvertierung von HTML nach PDF. Ich benutze keine iText direkt und verwenden XMLWorkerHelper für die Konvertierung zu tun:Kyrillische Buchstaben zeigen während der PDF-Erstellung über iText

OutputStream file = new FileOutputStream(outputFile); 
Document document = new Document(); 
PdfWriter writer = PdfWriter.getInstance(document, file); 
document.open(); 
InputStream is = new ByteArrayInputStream(htmlContentString.getBytes()); 
XMLWorkerHelper.getInstance().parseXHtml(writer, document, is); 
document.close(); 
writer.close(); 
file.close(); 

Leider habe ich nicht alle kyrillischen Buchstaben in PDF-Ausgabedatei sehen.

Wie kann ich mich vorbereiten Quelle HTML-Datei (einige font-Tags, CSS-Attribute etc.) für richtig PDF-Ausgabe zu bekommen?

+0

@AndyTurner Hier und wie soll ich es spezifizieren? –

+0

Mögliche Duplikate von [HTML in PDF konvertieren, kyrillische Zeichen nicht richtig angezeigt] (http://stackoverflow.com/questions/30889217/html-to-pdf-convert-cyrillic-characters-not-displayed-properly) –

+0

Sie sollten Spezifizieren Sie eine 'XMLWorkerFontProvider'-Instanz –

Antwort

2

Der Grund des Problems ist iText intern verwendet eine Schriftart ohne kyrillische Buchstaben für PDF-Rendering.

So wird die Lösung, die eine Schrift mit kyrillischen Buchstaben für alle PDF-Elemente (zum Beispiel Standard-Windows-Arial Schriftart). Es ist möglich, über die Angabe CSS-Datei in parseXHtml Aufruf als Parameter zu tun:

... 
XMLWorkerHelper.getInstance().parseXHtml(writer, document, is, getStylesStream()); 
... 
private InputStream getStylesStream() { 
    return PdfReport.class.getResourceAsStream("/reports/styles.css"); 
} 

und in styles.css

sein sollte
* { 
    /* Enforces to use font with Cyrillic letters */ 
    font-family: Arial; 
} 

Doch dieser Ansatz verliert jeden Standard iText Styling. Also kopierte ich in meinem styles.css alle Inhalte von default.css Datei von xmlworker.jar.

Leider ist die Fähigkeit, den Inhalt der default.css nach dem Laden im Speicher zu ändern (via XMLWorkerHelper.getInstance(). GetDefaultCSS()) ist verboten.

Verwandte Themen