Я использую 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
Результат объединения двух PDF/A также должен быть действительным PDF/A pdfbox ⇐ JAVA
Программисты JAVA общаются здесь
1730210128
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());
Подробнее здесь: [url]https://stackoverflow.com/questions/76776970/merge-two-pdf-a-result-should-be-a-valid-pdf-a-too-pdfbox[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия