Результат объединения двух PDF/A также должен быть действительным PDF/A pdfboxJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Результат объединения двух PDF/A также должен быть действительным PDF/A pdfbox

Сообщение Anonymous »

Я использую pdfbox для объединения двух PDF/A
Сейчас мой код выглядит так:
PDFMergerUtility mergerUtility = new PDFMergerUtility();

File file = new File("example/c.pdf");

mergerUtility.addSource(new File("example/a.pdf"));
mergerUtility.addSource(new File("example/b.pdf"));

mergerUtility.setDestinationFileName(file.getAbsolutePath());

try {
mergerUtility.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
} catch (IOException ex) {
throw new RuntimeException("Unable to merge", ex);
}

File inputFile = new File("example/c.pdf");
PDDocument doc = PDDocument.load(inputFile);

File orig = new File("example/a.pdf");
PDDocument origDoc = PDDocument.load(orig);
File orig2 = new File("example/b.pdf");
PDDocument orig2Doc = PDDocument.load(orig2);
PDStructureTreeRoot treeRoot = origDoc.getDocumentCatalog().getStructureTreeRoot();
PDStructureTreeRoot treeRoot2 = orig2Doc.getDocumentCatalog().getStructureTreeRoot();
treeRoot.setKids(treeRoot2.getKids());
doc.getDocumentCatalog().setStructureTreeRoot(treeRoot);

List
outputIntents=new ArrayList();
outputIntents.add(doc.getDocumentCatalog().getOutputIntents().get(0));
doc.getDocumentCatalog().setOutputIntents(outputIntents);
doc.save("example/d.pdf");
doc.close();

установив OutputIntent так же, как и на первой странице (чтобы d.pdf получил только одну) я уже решил много проблем... последняя проблема, которая у меня возникла (только на этой валидатор https://avepdf.com/pdfa-validation) был равен 4:
"Нестандартный тип структуры не сопоставлен ни с одним функционально эквивалентным стандартным типом."
Мне удалось их идентифицировать, и они связаны с использованием «THead» и «TBody» в моем результате (сгенерированном pdfbox).
Мне удалось сократите эту ошибку вдвое (теперь я получил только 2 «Нестандартный тип структуры не сопоставлен ни с одним функционально эквивалентным стандартным типом»), используя тот же StructureTreeRoot, что и один из исходного файла (это «окончательный» код, который вы можете видите, до сих пор не могу получить действительный PDF/A из слияния двух PDF/A)... но я не знаю, как объединить эти два StructureTreeRoot и является ли это вообще реальным решением (возможно, есть способ сообщите pdfbox, чтобы вместо этого не использовать THead и TBody).
Результат уже хорош, поскольку он передает большинство pdf/валидаторов, мне просто нужно, чтобы он передал и этот валидатор (поскольку это тот, который используется компанией, в которой я работаю)... Также я не думаю, что виноват валидатор, поскольку оба входных файла проходят как действительный файл PDF/A.
Получил есть идеи?
PS. Я нашел способ объединить два PDStructureTreeRoot, которые все еще не работают... но я обновил код. добавление
PDStructureTreeRoot treeRoot2 = orig2Doc.getDocumentCatalog().getStructureTreeRoot();
treeRoot.setKids(treeRoot2.getKids());


Подробнее здесь: https://stackoverflow.com/questions/767 ... too-pdfbox
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»