PDF-библиотека слияния PDF-файлов на веб-интерфейсе - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь объединить два pdf-файла во внешнем интерфейсе, используя javascript и библиотеку pdf-lib. Я нашел этот фрагмент pdf-lib в репозитории github:

async function mergePdfs(pdfsToMerge: string[]) {
  const mergedPdf = await PDFDocument.create();
  for (const pdfCopyDoc of pdfsToMerge) {
    const pdfBytes = fs.readFileSync(pdfCopyDoc);
    const pdf = await PDFDocument.load(pdfBytes);
    const copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());
    copiedPages.forEach((page) => {
      mergedPdf.addPage(page);
    });
  }
  const mergedPdfFile = await mergedPdf.save();
  return mergedPdfFile;
}

Но, как я вижу, этот фрагмент предназначен для nodejs (в браузере javascript нет fs.readfilesync). Итак, у меня есть 2 вопроса:

  1. что я должен вставить в pdfsToMerge(string: [])? У меня есть переменные, содержащие URL-адреса в pdf1 и pdf
  2. Также у меня есть две переменные, содержащие base64 код этих PDF-файлов. Как я могу использовать этот фрагмент, не используя fs.readfilesync, как в nodejs, но на внешнем интерфейсе?

Большое спасибо заранее!

1 Ответ

0 голосов
/ 12 марта 2020

Метод PDFDocument.load() будет принимать строки base64 в качестве параметра, поэтому вам вообще не нужно их преобразовывать.

Что касается переменных, хранящих пути URL к документам pdf, вы можете использовать вместо них fetch файловой системы узла. Как описано в документации pdf-lib, вы можете сохранить ArrayBuffer и передать его в PDFDocument.load() следующим образом:

const url = 'https://pdf-lib.js.org/assets/with_update_sections.pdf'
const arrayBuffer = await fetch(url).then(res => res.arrayBuffer())
const pdfDoc = await PDFDocument.load(arrayBuffer)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...