当我使用ITextRenderer将html转换为PDF时。这是我的代码
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结果:
预期PDF结果:
如何制作阿拉伯结扎?
答案 0 :(得分:1)
如果你想正确地做到这一点(我假设使用iText,因为你的帖子被标记为这样),你应该使用
例如,请参阅HTML to PDF tutorial,更具体地说,请参阅以下常见问题项:How to convert HTML containing Arabic/Hebrew characters to PDF?
您需要包含所需字形的字体,例如:
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"
};
你需要FontProvider
知道如何在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);
}
请注意,如果您没有pdfCalligraph add-on,则文字会出错。创建Flying Saucer时,该附加组件并不存在,因此您无法使用Flying Saucer转换带有阿拉伯语,印地语,泰卢固语文本的文档...阅读pdFCalligraph white paper如果你想了解更多关于连字的信息。
答案 1 :(得分:0)
似乎省略了希腊字符;他们没有出现在文件中。
在飞碟中,生成的PDF使用某种默认值 (可能是Helvetica)字体,包含非常有限的字符集, 这显然不包含希腊语代码页。 link
答案 2 :(得分:0)
我通过使用wkhtmltopdf更改了转换pdf的方式。