Для выполнения импорта и экспорта аннотаций в библиотеке pdf.js, вам потребуется использовать методы и функции из самой библиотеки.
1. Импорт аннотаций:
Для импорта аннотаций вам потребуется сначала открыть PDF-файл с использованием pdf.js. Это может быть сделано с помощью следующего кода:
const pdfURL = 'path_to_your_pdf_file.pdf'; // указываете путь до вашего PDF-файла const loadingTask = pdfjsLib.getDocument(pdfURL); loadingTask.promise.then(function (pdf) { const pagePromises = []; for (let i = 1; i <= pdf.numPages; i++) { pagePromises.push(pdf.getPage(i)); } Promise.all(pagePromises).then(function (pages) { for (let i = 0; i < pages.length; i++) { const annotationsPromise = pages[i].getAnnotations(); annotationsPromise.then(function (annotationsData) { if (annotationsData.length > 0) { // Далее вы можете обработать аннотации, например, сохранить их в базе данных или сделать что-то еще console.log("Аннотации на странице " + (i + 1) + ":", annotationsData); } }); } }); });
В этом коде мы сначала открываем PDF-файл с помощью pdfjsLib.getDocument()
. Затем мы проходимся по всем страницам PDF-файла и получаем аннотации каждой страницы с помощью getPage().getAnnotations()
. Обратите внимание, что этот код асинхронный, поэтому мы используем промисы и Promise.all()
для обработки результатов загрузки страниц и получения аннотаций.
2. Экспорт аннотаций:
Экспорт аннотаций требует более сложных операций, поскольку pdf.js не предоставляет непосредственно функцию экспорта аннотаций. Однако вы можете использовать тот же подход, чтобы получить аннотации на странице и затем создать объект PDF-документа с помощью другой библиотеки, такой как pdf-lib.
Ниже приведен пример, показывающий, как получить аннотации на каждой странице и создать новый PDF-документ с помощью pdf-lib:
const fs = require('fs'); const { PDFDocument } = require('pdf-lib'); const sourcePDFBytes = fs.readFileSync('path_to_your_pdf_file.pdf'); //загружаем байты pdf-файла PDFDocument.load(sourcePDFBytes).then((doc) => { // Создаем новый документ для сохранения аннотаций const newDoc = await PDFDocument.create(); for (let i = 0; i < doc.getPageCount(); i++) { const page = await newDoc.copyPages(doc, [i]); // копируем страницу из исходного документа const annotations = await doc.getAnnotations(i); // получаем аннотации на текущей странице if (annotations.length > 0) { page.setAnnotations(annotations); // устанавливаем аннотации на скопированную страницу } newDoc.addPage(page); // добавляем страницу с аннотациями к новому документу } const pdfBytes = await newDoc.save(); // сохраняем новый документ в байты fs.writeFileSync('path_to_save_pdf_with_annotations.pdf', pdfBytes); // сохраняем новый документ в файл });
В этом примере мы загружаем исходный PDF-файл с помощью fs.readFileSync()
. Затем мы создаем новый PDF-документ с помощью PDFDocument.create()
из pdf-lib. Затем мы копируем каждую страницу из исходного документа в новый документ с аннотациями внутри цикла. Мы используем doc.getAnnotations()
для получения аннотаций на каждой странице и page.setAnnotations()
для установки аннотаций на скопированные страницы. После завершения цикла мы сохраняем новый документ с помощью newDoc.save()
и записываем результаты в новый PDF-файл с помощью fs.writeFileSync()
.