복잡한뇌구조마냥

[JavaScript] PDF 병합 본문

FE/JavaScript

[JavaScript] PDF 병합

지금해냥 2024. 3. 4. 10:22

PDF 파일 생성을 하다가, 특정 페이지만 바꿔서 사용해야하는 경우가 생겼다.

파일로 생성된 2개의 파일을 어떻게 코드를 통해서 합치지라는 생각에 여러 시도를 해보았다.

 

PDF파일을 Array Buffer로 변환하여, 각 파일의 페이지를 불러와서 필요한 페이지를 기존 PDF파일에 추가하는 방식으로 구현했는데 아래의 코드를 참고하면 좋을 것 같다.

/**
   * PDF Merge
   * 원본 PDF에 추가 PDF를 뒷페이지로 추가하는 로직
   * @param pdfArrayBuffer1 원본 PDF
   * @param pdfArrayBuffer2 추가할 PDF
   */
  async mergePDFs(pdfArrayBuffer1: ArrayBuffer, pdfArrayBuffer2: ArrayBuffer): Promise<ArrayBuffer> {
    return new Promise(async (resolve, reject) => {
      try {
        // PDF 문서 로드
        const pdf1 = await PDFDocument.load(pdfArrayBuffer1);
        const pdf2 = await PDFDocument.load(pdfArrayBuffer2);

        // 빈 PDF 문서 생성
        const mergedPdf = await PDFDocument.create();
        const pages1 = await mergedPdf.copyPages(
          pdf1,
          Array.from({ length: pdf1.getPageCount() }, (v, i) => i),
        );
        const pages2 = await mergedPdf.copyPages(
          pdf2,
          Array.from({ length: pdf2.getPageCount() }, (v, i) => i),
        );

        // 첫 번째 PDF의 페이지 추가
        pages1.forEach(page => {
          mergedPdf.addPage(page);
        });

        // 두 번째 PDF의 페이지 추가
        pages2.forEach(page => {
          mergedPdf.addPage(page);
        });

        // 합쳐진 PDF 문서 저장
        const mergedPdfBytes = await mergedPdf.save();

        resolve(mergedPdfBytes.buffer);
      } catch (error) {
        reject(error);
      }
    });
  }
LIST