#pdf #puppeteer
#PDF #кукловод
Вопрос:
Я создаю PDF-файлы с помощью Puppeteer, результирующий PDF выглядит красиво, но в нем отсутствуют отчеты о доступности PDF. Основными проблемами были заголовок PDF и язык PDF. Я попытался установить оба через значения EXIF ( Title
, Language
), в некоторых случаях заголовок отображается, но по-прежнему не удается выполнить отчет о проверке доступности Acrobat Pro. Я использовал другой отчет о проверке доступности ( http://checkers.eiii.eu/en/pdfcheck / ) и там заголовок задан успешно, но не язык.
Я использовал --export-tagged-pdf
в качестве параметра запуска, который исправил многие другие проблемы.
У кого-нибудь есть идея, как я мог бы передать отчет о доступности, пожалуйста? В основном языковой параметр. Я использую Node.js чтобы сгенерировать PDF-файлы, даже если есть другая библиотека для редактирования PDF-файла после того, как это было бы действительно полезно, я не смог этого понять.
Комментарии:
1. Смогли ли вы решить эту проблему?
2. Я смог удовлетворить требования к названию и языку, используя дополнительный
pdf-lib
пакет для изменения существующего pdf.pdfDoc.setLanguage("en-us");pdfDoc.setTitle("Some title");
К сожалению, я не могу удовлетворить требование «закладок».
Ответ №1:
Столкнувшись с той же проблемой, мне удалось получить все необходимые метаданные и данные XMP, кроме идентификатора PDF-UA. Я использовал библиотеку JS «pdf-lib» (https://pdf-lib.js.org/docs/api/classes/pdfdocument ) для установки метаданных и exiftool-vendored для ввода данных XMP shema.
const pdfLib = require('pdf-lib');
const exiftool = require("exiftool-vendored").exiftool
const fs = require('fs');
const distexiftool = require('dist-exiftool');
const pdfData = await fs.readFile('your-pdf-document.pdf');
const pdfDoc = await pdfLib.PDFDocument.load(pdfData);
const nowDate = new Date();
const meta_creator = "The author";
const meta_author = "The author";
const meta_producer = "The producer";
const meta_title = "Your PDF title";
const meta_subject = "Your PDF subject";
const meta_creadate = `${nowDate.getFullYear()}-${nowDate.getMonth() 1}-${nowDate.getDate()}`;
const meta_keywords = ["keyword1", "keyword2", "keyword3", "keyword4"];
// Implement PDF Title
pdfDoc.setSubject(meta_subject);
// Implement required "DisplayDocTitle" pdf var
pdfDoc.setTitle(meta_title, {
showInWindowTitleBar: true,
updateMetadata: true
});
// Implement PDF language
pdfDoc.setLanguage("en-EN");
// Save file in order exiftool can load it
const pdfBytes = await pdfDoc.save();
await fs.promises.writeFile("your-pdf-document.pdf", pdfBytes);
// We use "distexiftool" to get the TAGS from PDF/UA well formed XMP file "pdfUA-ID.xmp" and assign data to "your-pdf-document.pdf"
execFile(distexiftool, ["-j","-xmp<=pdfUA-ID.xmp", "your-pdf-document.pdf"], (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
afterTagsOperation()
});
async function afterTagsOperation(){
// Open the file and write XMP tags with exiftool
await exiftool.write("your-pdf-document.pdf", { 'xmp:Author': meta_author });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Creator': meta_creator });
await exiftool.write("your-pdf-document.pdf", { 'xmp:CreateDate': meta_creadate });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Producer': meta_producer });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Title': meta_title });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Subject': meta_subject });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Keywords': meta_keywords });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Trapped': 'false' });
await exiftool.write("your-pdf-document.pdf", { 'xmp:DocumentID': `uuid:${nowDate.getTime()}` });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Title': meta_title });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Subject': meta_subject });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Keywords': meta_keywords });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Trapped': 'false' });
await exiftool.write("your-pdf-document.pdf", { 'xmp:Identifier': nowDate.getTime() });
await exiftool.write("your-pdf-document.pdf", { 'xmp:PDFVersion': `v${nowDate.getTime()}` });
await exiftool.write("your-pdf-document.pdf", { 'xmp-xmpMM:DocumentID': `uuid:${nowDate.getTime()}` });
await exiftool.write("your-pdf-document.pdf", { 'xmp-dc:format': `application/pdf` });
await exiftool.write("your-pdf-document.pdf", { 'xmp-dc:title': meta_title });
// We save the file
const pdfBytes = await pdfDoc.save();
await fs.promises.writeFile("your-pdf-document.pdf", pdfBytes);
}
Комментарии:
1. Привет, Андрей, я только что отредактировал свой ответ, потому что я только что нашел способ получить отсутствующий идентификатор PDF / UA, назначив ТЕГИ из файла соответствия XMP файлу PDF, а затем изменив некоторые теги, чтобы настроить данные.