当我将docx文档转换为pdf时,我的国家字符将转换为"#"标记
有没有办法为pdf文档设置字体编码?
我过去使用过xdocreport,它可以处理这个问题,但我在图像、页眉和页脚方面遇到了问题。
Docx4j可以做到这一点,但字体不行。转换后,字体有ANSI编码,而我希望有windows-1250。有设置这个选项吗?
我的问题是在linux服务器上缺少正确的True Type字体。插入的默认字体(没有我的代码页)。
我通过ttf mscorefont安装程序
关于debian:
apt-get install ttf-mscorefonts-installer
我也有同样的问题,正如你自己提到的,我发现了一个字体问题。系统上的字体需要支持您的编码。
例如:对于使用"Arial"字体的文档,德语变音字符显示为"?"。
我找到了另一个解决方案,覆盖PDF字体编码如下:
//
// read template
//
File docxFile = new File(System.getProperty("user.dir") + "/" + "Test.docx");
InputStream in = new FileInputStream(docxFile);
//
// prepare document context
//
IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, TemplateEngineKind.Velocity);
IContext context = report.createContext();
context.put("name", "Michael Küfner");
//
// generate PDF output
//
Options options = Options.getTo(ConverterTypeTo.PDF).via(ConverterTypeVia.XWPF);
PdfOptions pdfOptions = PdfOptions.create();
pdfOptions.fontEncoding("iso-8859-15");
options.subOptions(pdfOptions);
OutputStream out = new FileOutputStream(new File(docxFile.getPath() + ".pdf"));
report.convert(context, options, out);
尝试根据您的需要设置pdfOptions.fontEndcoding中的属性(在我的例子中是"iso-8859-15")。
将其设置为"UTF-8"(默认接缝)会导致特殊字符出现同样的问题。
我发现的另一件事:
使用Word 2007/2010的默认字体"Calibri",即使使用UTF-8编码,也没有出现问题。也许iText中用于生成PDF的嵌入式Type-1 Arial字体不支持UTF-8编码。