Playwright 및 pdf2json을 사용하여 PDF 내용 확인

이 자습서에서는 Playwright과 함께 pdf2json을 사용하여 pdf 파일의 내용을 확인합니다. 이는 종단 간 자동 테스트를 만들 때 일반적으로 접하게 되는 매우 일반적인 작업입니다.

이 예제에서 사용할 pdf 파일은 6페이지가 포함된 평범한 오래된 텍스트 기반 pdf입니다. 간단히 하기 위해 이 파일pdf_sample.pdf을 프로젝트의 루트 폴더에 저장했습니다.



우리의 목표는 다음과 같습니다.


  • 파일
  • 에 포함된 메타 정보(키워드:"Standard Fees and Charges, 003-750, 3-750")를 확인합니다.
  • pdf 파일에 실제로 6페이지가 있는지 확인합니다
  • .
  • PDF 파일에 "요금을 청구할 수 있는 경우"라는 올바른 텍스트가 포함되어 있는지 확인

  • 먼저 원사(또는 npm)를 사용하여 프로젝트에 pdf2json를 추가해야 합니다.
    yarn add pdf2json -Dpdf2json를 사양 파일로 가져오고 테스트를 위한 초기 스캐폴딩을 만듭니다.

    import PDFParser from 'pdf2json';
    import { test, expect } from '@playwright/test';
    
    test.describe('assert PDF contents using Playwright', () => {
      test.beforeAll(async () => {
      })
    
      test('pdf file should have 6 pages', async () => {
      });
    
      test('contains the correct subheading text', async () => {
      });
    
      test('shows the correct meta information (keywords)', async () => {
      });
    });
    

    pdf 콘텐츠를 변수로 구문 분석하고 로드하는 어려운 작업을 수행하는 간단한 도우미 함수를 만듭니다.

    async function getPDFContents(pdfFilePath: string): Promise<any> {
      let pdfParser = new PDFParser();
      return new Promise((resolve, reject) => {
        pdfParser.on('pdfParser_dataError', (errData: {parserError: any}) =>
          reject(errData.parserError)
        );
        pdfParser.on('pdfParser_dataReady', (pdfData) => {
          resolve(pdfData);
        });
    
        pdfParser.loadPDF(pdfFilePath);
      });
    }
    

    describe 블록 내에서 범위가 지정된 pdfContents라는 변수를 만듭니다.
    let pdfContents: anybeforeAll를 업데이트하여 pdf의 내용을 변수로 읽습니다.

      test.beforeAll(async ({}) => {
        pdfContents = await getPDFContents('./pdf_sample.pdf')
      })
    
    pdfContents의 모양을 디버깅하고 검사하는 경우 처음 2개의 테스트가 어설션하기 매우 쉽다는 것을 알 수 있습니다.



      test('pdf file should have 6 pages', async () => {
        expect(pdfContents.Pages.length, 'The pdf should have 6 pages').toEqual(6);
      });
    
      test('shows the correct meta informaion (keywords)', async () => {
        expect(pdfContents.Meta.Keywords, 'PDF keyword was incorrect').toEqual('Standard Fees and Charges, 003-750, 3-750');
      });
    

    그러나 마지막 테스트(파일에 "수수료를 청구할 수 있는 경우"가 포함되어 있는지 확인)는 조금 더 복잡합니다. Pages 배열을 확장하고 텍스트가 있을 것으로 예상되는 페이지를 찾아야 합니다. 그런 다음 Texts 배열을 검사하여 찾고 있는 텍스트를 찾아야 합니다. 이 예에서는 네 번째 줄의 첫 번째 페이지에서 발견되었습니다. 이는 pdfContents.Pages[0].Texts[3].R[0].T에 해당합니다.



    마지막 복잡한 문제가 남아 있습니다. "When%20we%20may%20charge%20fees"가 필요한 원시 텍스트가 인코딩된 것 같습니다. decodeURI 함수를 사용하여 인코딩을 쉽게 제거할 수 있습니다.

      test('contains the correct subheading text', async () => {
        const rawText = pdfContents.Pages[0].Texts[3].R[0].T
        expect(decodeURI(rawText), 'The subheading text was incorrect').toEqual('When we may charge fees');    
      });
    

    최종 테스트




    결론



    Playwright 및 pdf2json을 사용하여 pdf의 내용을 쉽게 확인할 수 있는 방법을 시연했습니다. 우리는 텍스트 정보가 포함된 매우 기본적인 PDF로 작업했습니다. 안타깝게도 pdf2json은 더 복잡한 PDF 파일을 처리하지 못할 수 있습니다. YMMV 🥳🚀

    좋은 웹페이지 즐겨찾기