使用iText5,迪拜字体中的阿拉伯字符从html内容转换为pdf

时间:2019-03-31 06:46:26

标签: java itext arabic html-to-pdf

我正在尝试从一个HTML文档创建一个PDF文件,该文件的阿拉伯字体为Dubai字体。转换后,PDF中不再显示一些阿拉伯字符。在html文件中,迪拜字体可以正常工作,但在转换了几个阿拉伯字符后无法在PDF中显示。

我尝试了ParseHtml9 example中提到的this stackoverflow question

使用的itext jar是itextpdf-5.5.8.jar。

请注意:-使用Noto Naskh阿拉伯字体时,此代码完全可以按预期工作。该问题仅在使用Dubai Font时发生。

ParseHtml9.java:-

Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));

// step 3
document.open();

// step 4
// Styles
CSSResolver cssResolver = new StyleAttrCSSResolver();

XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontProvider.register("resources/Dubai-Regular.ttf");

CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);

HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());

// Pipelines
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);

// XML Worker
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
p.parse(new FileInputStream(HTML), Charset.forName("UTF-8"));

// step 5
document.close();

HTML文件:-

<body>
<table>
  <tr>
    <td>Lawrence of Arabia</td>
    <td dir="rtl" style="font-family: Dubai">لورانس العرب</td>
  </tr>
</table>
</body>
</html>

HTML输出为:-

阿拉伯的劳伦斯لورانسالعرب

PDF输出为:- 阿拉伯劳伦斯(Lawrence of Arabia)لونسلعر

在PDF中没有呈现ر,ا和ب之类的字符。

请帮助我解决此问题。预先感谢。

0 个答案:

没有答案