Встроенные шрифты с iText7 PDFXFA - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь определить, можно ли использовать 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 () должен справиться с задачей, но я могу только найти ссылку на метод, но не подробно о том, что он делает или как он работает.Может кто-нибудь сказать мне, что мне здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...