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

时间:2012-09-08 04:17:28

标签: java pdf docx docx4j xdocreport

当我将docx文档转换为pdf时,我的国家字符转换为“#”标记 有没有办法为pdf文档设置字体编码?

我过去使用过xdocreport,它可以解决这个问题,但是我遇到了图像,页眉和页脚的问题。

Docx4j设法做到这一点,但不是字体。转换后,字体有ANSI编码,而我想有windows-1250。有没有设置它的选项?

2 个答案:

答案 0 :(得分:2)

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

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

关于debian:

apt-get install ttf-mscorefonts-installer

答案 1 :(得分:2)

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

例如:对于使用“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”,其接缝为默认值,导致特殊字符存在同样的问题。

我发现了另一件事:

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