如何使用 itext pdfXfa 将 xfa pdf 文件与俄文拼合

how to flatten xfa pdf file with russian text, using itext pdfXfa

我正在尝试使用 itext 7 pdfxfa 试用版拼合动态 xfa 文件。 文件包含一些数字、俄文和英文文本。

LicenseKey.LoadLicenseFile("itextkey.xml");
XFAFlattener xfaf = new XFAFlattener();
xfaf.Flatten(new FileStream("xfaform.pdf", FileMode.Open, FileAccess.Read), new FileStream("flat.pdf", FileMode.Create, FileAccess.Write));

有效,但在flat.pdf中我只看到一些数字、英文文本和标点符号。 Adobe reader 允许复制源文件的所有文本。 不幸的是,我无法显示原始 pdf。 有没有一种方法可以正确地用俄语文本拼合 xfa 表单?

fonts from original xfa file:

fonts from flattened file:

如果您的 XFA 表单引用了可以访问但不包含某些字形的字体(例如 Helvetica 在您的情况下不包含俄语字形),您需要通过指定其他字体来修复原始 XFA 表单并将它们嵌入到带有 XFA 格式的原始 PDF 中,或者您可以告诉 XFAFlattener 哪些字体用于缺少的字形。这是一个例子:

XFAFontSettings fontSettings = new XFAFontSettings()
       .setFontsPath("C:/Windows/Fonts"); // Set path to the folder containing your font files
HashMap<String, String> mp = new HashMap<String, String>();
// Tell pdfXFA to use Arial instead of Helvetica for the missing glyphs
mp.put("Helvetica", "Arial");
fontSettings.setFontSubstitutionMap(mp);

// Passing your font settings to pdfXFA
XFAFlattener xfaf = new XFAFlattener()
        .setFontSettings(fontSettings);