2

docx ドキュメントを pdf に変換すると、国別文字が「#」マークに変換されます。
PDFドキュメントのフォントエンコーディングを設定する方法はありますか?

私は過去に xdocreport を使用しており、それを処理できますが、画像、ヘッダー、およびフッターに問題がありました。

Docx4j はこれを行うことができますが、フォントはできません。変換後、Windows-1250 を使用したいのですが、フォントは ANSI エンコーディングになります。これを設定するオプションはありますか?

4

2 に答える 2

4

私の問題は、Linux サーバーに適切な True Type フォントがないことでした。代わりにデフォルトのフォントが挿入されました(コードページなし)。

ttf-mscorefonts-installer を介してデフォルトの Ms Windows フォントをインストールする問題を解決しました

デビアンの場合:

apt-get install ttf-mscorefonts-installer
于 2012-09-10T08:19:18.783 に答える
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」に設定すると、継ぎ目がデフォルトになり、特殊文字で同じ問題が発生しました。

私が見つけた別のこと:

Word 2007/2010 のデフォルトである "Calibri" フォントを使用すると、UTF-8 エンコーディングを使用しても問題は発生しませんでした。おそらく、PDF の生成に使用される iText に埋め込まれた Type-1 Arial フォントは、UTF-8 エンコーディングをサポートしていません。

于 2013-08-29T07:30:12.607 に答える