提问者:小点点

用docx4j转换docx -> pdf时如何改变字体编码?


当我将docx文档转换为pdf时,我的国家字符会转换为“#”符号。< br >有什么方法可以为pdf文档设置字体编码?

我过去使用xdocreport,它可以处理这个问题,但我在图像、页眉和页脚方面有问题。

Docx4j可以做到这一点,但字体不行。转换后,字体使用ANSI编码,而我希望使用windows-1250。有选项可以设置吗?


共2个答案

匿名用户

我的问题是-在linux服务器上缺少正确的True Type字体。插入的默认字体(没有我的代码页)。

我解决了通过 ttf-mscore 字体安装程序安装默认的 Ms Windows 字体的问题

在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.font中的属性编码(在我的情况下是“iso-8859-15”)。

将其设置为“UTF-8”(接缝为默认值)会导致特殊字符出现同样的问题。

我发现的另一件事:

使用 Word 2007/2010 的默认“Calibri”字体时,即使使用 UTF-8 编码,也不会出现问题。也许 iText 中嵌入的 1 类 Arial 字体(用于生成 PDF)不支持 UTF-8 编码。