В настоящее время я борюсь с формой PDF, созданной из документа LibreOffice.
Я создал его, как это предлагается в книге "iText in Action", и теперь я пытаюсь предварительно заполнить встроенную форму несколькими значениями, которые могут содержать символы Unicode.
Это включает символ, который состоит из базы char с добавлением, объединяющим char (e.G.M).
Я пробовал несколько разных подсказок, которые я нашел в qaru.site/info/459304/... и книге, но у меня никогда не было документа PDF с формой, которая работает на всех платформах: Linux (Okular, Evince, Acrobat DC, macOS Previewer и т.д.)
Я знаю, что мне нужно иметь шрифт, который покрывает символы и полностью помещает шрифт. Ниже приведен код, который я использовал для записи документа PDF и файла PDF.
Мои вопросы:
- Является ли различное поведение спецификации спецификации чтения PDF-документов спецификацией PDF, и мне нужно жить с ней?
- Специально читатели Linux PDF и Acrobat ведут себя плохо. Известны ли ошибки?
- Я не очень хорошо знаком с внутренними документами PDF, поэтому любые предложения? Являются ли содержимое моих файлов PDF нормально?
- Любые предложения по улучшению кода для получения лучших результатов?
Код для заполнения формы:
BaseFont uniFont = BaseFont.createFont("./src/main/resources/UnicodeDoc.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, false, null, null, false);
uniFont.setSubset(false);
// Debugging code...
for (String codepage : uniFont.getCodePagesSupported()) {
System.out.println("Codepage = " + codepage);
}
FileInputStream fis = new FileInputStream(src);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfReader reader = new PdfReader(fis);
PdfStamper stamper = new PdfStamper(reader, baos);
// Fill all fields in PDF form
String text = "aM\u0302a"; // Same as "aM̂a"
com.itextpdf.text.pdf.AcroFields form = stamper.getAcroFields();
for (String fname : form.getFields().keySet()) {
System.out.println("form." + fname);
form.setField(fname, text);
form.setFieldProperty(fname, "textfont", uniFont, null);
}
form.setGenerateAppearances(true);
form.addSubstitutionFont(uniFont);
stamper.setFormFlattening(false);
stamper.close();
reader.close();
Заранее спасибо, Mik86