본문 바로가기
  • _^**_
무근본 IT 지식 공유

pdfjs 오픈 소스에서 blob 방식을 안쓰고 base64 방식을 쓰는방법

by 크리드로얄워터 2024. 7. 9.
반응형

PDF.js는 PDF 파일을 웹 브라우저에서 직접 렌더링할 수 있게 해주는 오픈 소스 JavaScript 라이브러리입니다.

 

기본적으로 PDF.js는 blob: URL을 사용하여 PDF 파일을 처리합니다.

 

이를 base64 인코딩 방식을 사용하도록 변경하려면 몇 가지 수정이 필요합니다.

PDF.js에서 Blob 대신 Base64 사용하기

  1. Base64로 인코딩된 PDF 데이터 준비: 먼저 PDF 파일을 base64 형식으로 인코딩해야 합니다. 이는 서버 측에서 수행할 수 있으며, 클라이언트 측에서는 이미 인코딩된 데이터를 사용하게 됩니다.
  2. PDF.js 설정 변경: PDF.js는 기본적으로 URL이나 Blob을 통해 PDF 파일을 로드합니다. 이를 base64로 변경하려면, PDFJS.getDocument 메서드에 base64 데이터를 전달해야 합니다.
  3. Base64 데이터를 ArrayBuffer로 변환: PDF.js는 ArrayBuffer 형식을 필요로 하므로, base64 데이터를 ArrayBuffer로 변환하는 함수가 필요합니다.

다음은 이러한 단계를 구현한 예제입니다:

<!DOCTYPE html>
<html>
<head>
  <title>PDF.js Base64 Example</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.6.347/pdf.min.js"></script>
</head>
<body>
  <canvas id="pdf-canvas"></canvas>
  <script>
    const base64pdf = 'JVBERi0xLjcKCjEgMCBvYmoKPDwv...';  // 여기에 base64 인코딩된 PDF 데이터를 입력하세요

    // Base64 문자열을 Uint8Array로 변환하는 함수
    function base64ToUint8Array(base64) {
      const raw = atob(base64);
      const uint8Array = new Uint8Array(raw.length);
      for (let i = 0; i < raw.length; i++) {
        uint8Array[i] = raw.charCodeAt(i);
      }
      return uint8Array;
    }

    const pdfData = base64ToUint8Array(base64pdf);

    // PDF.js를 사용하여 PDF 문서 로드 및 렌더링
    const loadingTask = pdfjsLib.getDocument({ data: pdfData });
    loadingTask.promise.then(function(pdf) {
      console.log('PDF loaded');

      // 첫 번째 페이지 렌더링
      pdf.getPage(1).then(function(page) {
        console.log('Page loaded');

        const scale = 1.5;
        const viewport = page.getViewport({ scale: scale });

        const canvas = document.getElementById('pdf-canvas');
        const context = canvas.getContext('2d');
        canvas.height = viewport.height;
        canvas.width = viewport.width;

        const renderContext = {
          canvasContext: context,
          viewport: viewport
        };
        const renderTask = page.render(renderContext);
        renderTask.promise.then(function() {
          console.log('Page rendered');
        });
      });
    });
  </script>
</body>
</html>

주요 단계 설명

  1. Base64 데이터를 Uint8Array로 변환: base64ToUint8Array 함수는 base64 문자열을 Uint8Array로 변환합니다. PDF.js는 ArrayBuffer 또는 Uint8Array 형식을 요구하므로 이 변환이 필요합니다.
  2. PDF.js로 PDF 로드: pdfjsLib.getDocument 메서드에 { data: pdfData } 형식으로 데이터를 전달하여 PDF 문서를 로드합니다.
  3. 페이지 렌더링: PDF의 첫 번째 페이지를 가져와서 canvas 요소에 렌더링합니다.

이러한 방법으로 PDF.js에서 Blob 대신 Base64 데이터를 사용할 수 있습니다. Base64로 인코딩된 PDF 데이터는 서버에서 전송되거나 클라이언트 측에서 로컬 저장소에 저장될 수 있습니다.

 

* 이외 생각해볼만한 사항들

 

Q1: PDF.js에서 여러 페이지를 렌더링하려면 어떻게 해야 하나요?

Q2: Base64 인코딩된 대용량 PDF 파일을 효율적으로 처리하는 방법은 무엇인가요?

Q3: PDF.js를 사용할 때의 보안 고려 사항은 무엇인가요?

반응형

댓글