与docx4j> PDF - 如何转换DOCX当改变字体编码?(How to change

2019-09-22 05:39发布

当我是一个转换DOCX文档PDF我的国家的字符转换为“#”标记。
有什么办法来设置对PDF文档的字体编码?

我在过去使用xdocreport,它可以搞定,但是我已经和图片,页眉和页脚的问题。

Docx4j管理要做到这一点,但不是字体。 转换后,字体有ANSI编码,而我想有Windows-1250。 有没有设置这个选项?

Answer 1:

我的问题是 - 缺少Linux服务器上适当的True Type字体。 在那里,而不是插入(没有我的代码页)的默认字体。

我解决了这个问题,通过安装在默认的Windows字体女士TTF-mscorefonts的安装程序

在Debian:

apt-get install ttf-mscorefonts-installer


Answer 2:

我有同样的问题,结果发现,随着你自己,一个字体问题提到。 在系统上的字体需要支持您的编码。

如:使用“宋体”字体文件,德国元音字符显示为“?”。

我发现了一个其它的解决方案,以覆盖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);

尝试(“ISO-8859-15”在我的情况)设置在pdfOptions.fontEndcoding属性您的需求。

将其设置为“UTF-8”,其接缝是默认的,导致了与特殊字符同样的问题。

另一件事,我发现:

使用“宋体”字体,这是默认的Word 2007/2010,并没有出现问题,使用UTF-8编码时也是如此。 也许嵌入类型-1 Arial字型在iText的,这是用于产生PDF文件,不支持UTF-8编码。



文章来源: How to change font encoding when converting docx -> pdf with docx4j?