Как выполнить импорт и экспорт аннотаций в pdf.js?

Для выполнения импорта и экспорта аннотаций в библиотеке 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().