2017-03-28 4 views
0

Lorsque j'utilise ITextRenderer convertir html à PDF.this est mon codeproblèmes arabes avec la conversion HTML au format PDF à l'aide ITextRenderer

ByteArrayOutputStream out = new ByteArrayOutputStream(); 

ITextRenderer renderer = new ITextRenderer(); 
String inputFile = "C://Users//Administrator//Desktop//aaa2.html"; 
String url = new File(inputFile).toURI().toURL().toString(); 
renderer.setDocument(url); 
renderer.getSharedContext().setReplacedElementFactory(
     new B64ImgReplacedElementFactory()); 
    // 解决阿拉伯语问题 
ITextFontResolver fontResolver = renderer.getFontResolver(); 
try { 
    fontResolver.addFont("C://Users//Administrator//Desktop//arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
} catch (DocumentException e) { 
    e.printStackTrace(); 
} 

renderer.layout(); 
OutputStream outputStream = new FileOutputStream("C://Users//Administrator//Desktop//HTMLasPDF.pdf"); 
renderer.createPDF(outputStream, true); 
/*PdfWriter writer = renderer.getWriter(); 

writer.open(); 
writer.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 
OutputStream outputStream2 = new FileOutputStream( "C://Users//Administrator//Desktop//HTMLasPDFcopy.txt"); 
renderer.createPDF(outputStream2);*/ 
renderer.finishPDF(); 
out.flush(); 
out.close(); 

PDF Actual Résultat: enter image description here

PDF Résultat attendu: enter image description here

Comment faire une ligature arabe?

Répondre

0

caractères grecs semblaient être omis; ils ne sont pas apparus dans le document.

En soucoupe volante PDF généré utilise une sorte de défaut de police (probablement Helvetica), qui contient un jeu de caractères très limité, qui ne contient évidemment pas la page de code grec. link

1

Si vous voulez le faire correctement (je suppose en utilisant iText, depuis votre poste est marqué en tant que tel), vous devez utiliser

  • iText7
  • pdfHTML (pour convertir le HTML en PDF)
  • pdfCalligraph (pour gérer correctement ligatures arabes)
  • une police qui prend en charge ces fonctionnalités (comme indiqué par une autre réponse)

Pour un exemple, s'il vous plaît consulter le HTML to PDF tutorial, plus précisément l'élément de FAQ suivant: How to convert HTML containing Arabic/Hebrew characters to PDF?

Vous avez besoin de polices qui contiennent les glyphes dont vous avez besoin, par exemple:

public static final String[] FONTS = { 
    "src/main/resources/fonts/noto/NotoSans-Regular.ttf", 
    "src/main/resources/fonts/noto/NotoNaskhArabic-Regular.ttf", 
    "src/main/resources/fonts/noto/NotoSansHebrew-Regular.ttf" 
}; 

Et vous avez besoin d'un FontProvider qui sait comment trouver ces polices dans le ConverterProperties:

public void createPdf(String src, String[] fonts, String dest) throws IOException { 
    ConverterProperties properties = new ConverterProperties(); 
    FontProvider fontProvider = new DefaultFontProvider(false, false, false); 
    for (String font : fonts) { 
     FontProgram fontProgram = FontProgramFactory.createFont(font); 
     fontProvider.addFont(fontProgram); 
    } 
    properties.setFontProvider(fontProvider); 
    HtmlConverter.convertToPdf(new File(src), new File(dest), properties); 
} 

Notez que le texte sera tout faux si vous n'avez pas le pdfCalligraph add-on. Ce module n'existait au moment de soucoupe volante a été créé, par conséquent, vous ne pouvez pas utiliser une soucoupe volante pour convertir les documents avec le texte en arabe, hindi, telugu, ... Lire la pdFCalligraph white paper si vous voulez en savoir plus sur ligatures .

+0

En effet, l'OP utilise un outil tiers appelé « soucoupe volante. » Flying Saucer utilise une ancienne version iText qui ne supporte pas les ligatures. Voir [Comment convertir du HTML contenant des caractères arabes/hébraïques en PDF?] (Https://developers.itextpdf.com/content/itext-7-converting-html-pdf-pdfhtml/chapter-7-frequently-asked-questions- A propos de-pdfhtml/comment-convert-html contenant-arabichebrew-caractères-pdf) dans la section FAQ du HTML officiel tutoriel PDF. –