Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转换docx时如何更改字体编码->;带docx4j的pdf?_Java_Pdf_Docx_Docx4j_Xdocreport - Fatal编程技术网

Java 转换docx时如何更改字体编码->;带docx4j的pdf?

Java 转换docx时如何更改字体编码->;带docx4j的pdf?,java,pdf,docx,docx4j,xdocreport,Java,Pdf,Docx,Docx4j,Xdocreport,当我将docx文档转换为pdf时,我的国家字符将转换为“#”标记。 有没有办法为pdf文档设置字体编码 我以前使用过xdocreport,它可以处理这个问题,但是我在图像、页眉和页脚方面遇到了问题 Docx4j可以做到这一点,但不能使用字体。转换后,字体采用ANSI编码,而我希望使用windows-1250。有没有设置此选项?我的问题是-linux服务器上缺少正确的True Type字体。插入的默认字体(不包括我的代码页) 我通过安装默认Ms Windows字体解决了问题 ttf mscoref

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

我以前使用过xdocreport,它可以处理这个问题,但是我在图像、页眉和页脚方面遇到了问题


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

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

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

关于debian:

apt-get install ttf-mscorefonts-installer

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

e、 g:对于使用“Arial”字体的文档,德语umlaut字符显示为“?”

我找到了另一个解决方案,覆盖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”(默认设置为“UTF-8”),会导致特殊字符出现同样的问题

我发现的另一件事是:

使用Word 2007/2010的默认字体“Calibri”,即使使用UTF-8编码,问题也没有发生。
可能iText中用于生成PDF的嵌入式Type-1 Arial字体不支持UTF-8编码。

对于无法进行UTF-8编码的情况,docx4j有一个字体映射器的概念,允许您将文档字体映射到可用的物理字体。安装完所有字体后,然后,word文档的字体样式在转换为PDF后也会更改为默认字体样式“Arial”。请注意XDocReport 1.0.3(未发布),因为正如我在问题中所写,我们已经对字体进行了大量重构(可能会随Calibri而更改)@minni,我决定放弃使用xdocreport转换docx->pdf,因为还有其他问题,而不是编码问题。Xdocreport在这方面做得很好。问题出在docx4j上,但我找到了上述解决方案。无论如何,谢谢你给我的提示。他的问题与