Я пытаюсь определить, можно ли использовать iText7 для решения проблемы с документами Dynamic XFA перед покупкой лицензии.Поработав с этим некоторое время, пришло время обратиться за помощью.Без лицензии у меня нет доступа к форумам поддержки iText или некоторым ресурсам разработчиков, которые могут содержать ответ.
Оригинальный документ XFA
Сводный документ iText
В приведенном ниже коде используется один из примеров предоставлено iText для выравнивания документов.Он успешно выравнивает документ, но не встраивает шрифты, что приводит к появлению заголовков полей.Оригинальный исходный документ использует шрифт Courier, тогда как программа просмотра в Ubuntu отображает его в Helvetica.
Мы будем преобразовывать эти документы в текст, используя XPDF pdftotext, после чего мы будем анализировать поля для данных.В настоящее время упакованные заголовки нарушают нашу процедуру извлечения.Решение состоит в том, чтобы либо внедрить правильный шрифт, либо просто изменить его размер, чтобы заголовки не переносились.
package jumpstart;
import com.itextpdf.licensekey.LicenseKey;
import com.itextpdf.tool.xml.xtra.xfa.MetaData;
import com.itextpdf.tool.xml.xtra.xfa.XFAFlattener;
import com.itextpdf.tool.xml.xtra.xfa.XFAFlattenerProperties;
import com.itextpdf.tool.xml.xtra.xfa.font.XFAFontSettings;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import org.apache.log4j.PropertyConfigurator;
public class FlattenXfaDocument2 {
public static final String XFA = "/home/test1/SPE7L117D0013SPE7L119F9216.PDF";
public static final String DEST = "/home/test1/SPE7L117D0013SPE7L119F9216_flat_test.PDF";
public static void main(String args[]) throws Exception {
String log4jConfPath = "/huge/eclipseworkspace/slf4j-1.7.25/slf4j-ext/src/test/resources/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
FlattenXfaDocument flatty = new FlattenXfaDocument();
flatty.beforeManipulatePdf();
flatty.manipulatePdf(DEST);
new FlattenXfaDocument().manipulatePdf(DEST);
}
private List<String> javascriptEvents;
//@Override
protected void beforeManipulatePdf() {
LicenseKey.loadLicenseFile("/home/bootzero/itextkey1544036601345_0.xml");
//new FontProgramFactory().registerSystemFontDirectories();
this.javascriptEvents = new ArrayList<>();
this.javascriptEvents.add("click");
}
//@Override
protected void manipulatePdf(String dest) throws Exception {
Map<String, String> fontMapping = new HashMap<String, String>();
fontMapping.put("Helvetica", "Courier");
XFAFlattenerProperties flattenerProperties = new XFAFlattenerProperties()
.setPdfVersion(XFAFlattenerProperties.PDF_1_7)
.createXmpMetaData()
.setTagged()
.setMetaData(
new MetaData()
.setAuthor("iText Samples")
.setLanguage("EN")
.setSubject("Showing off our flattening skills")
.setTitle("Flattened XFA"));
//flattenerProperties.setXFAFontSettings(new XFAFontSettings(fontMapping));
XFAFlattener xfaf = new XFAFlattener()
.setFontSettings(new XFAFontSettings().setFontSubstitutionMap(fontMapping).setEmbedExternalFonts(true).setFontsPath("/usr/share/fonts/"))
.setExtraEventList(this.javascriptEvents)
.setFlattenerProperties(flattenerProperties)
.setViewMode(XFAFlattener.ViewMode.SCREEN);
xfaf.flatten(new FileInputStream(XFA), new FileOutputStream(dest));
}
Похоже, что setEmbedExternalFonts () должен справиться с задачей, но я могу только найти ссылку на метод, но не подробно о том, что он делает или как он работает.Может кто-нибудь сказать мне, что мне здесь не хватает?