분류 Nodejs

노드를 사용하여 PDF 생성

컨텐츠 정보

  • 조회 534 (작성일 )

본문

PDF없이 무엇을 할까요? 

시각적 정보를 저장하는 가장 안전하고 안전한 방법이며 전 세계 모든 주요 플랫폼에서 액세스 할 수 있습니다. 

프린터 친화적 인 웹 페이지 버전, 사용자의 송장 또는 이벤트 티켓을 동적으로 만들려면 사용자가 다운로드, 전자 메일 또는 인쇄 할 수 있는 안전한 정보를 만들어야 합니다. 

이러한 실용적인 기능을 통해 예측 가능한 미래에 PDFS를 사용할 가능성은 최종 사용자와 웹 응용 프로그램 개발자 모두에게 여전히 높습니다.


https://buttercms.com/blog/generating-pdfs-with-node 


PDF 생성기를 기술적으로 구현하는 것은 놀랍게도 어렵습니다. 

표준화 된 도구가 없으며 작업이 생각보다 복잡합니다. 

PDF 생성을 위한 결정적인 방법을 알려 드리고자 하는 것은 아닙니다.


시간과 인내심이 부족한 경우 유료 옵션이 있습니다. 여기에는 다음이 포함됩니다.


번거롭지 않은 PDF Crowd는 무료 옵션이 없는 유일한 제품이며 PDF Generator에는 무료와 월 $59 사이의 유료 옵션이 없습니다.


반면에 직접 솔루션을 구현하려는 경우 가장 좋은 방법은 Node JS를 사용하여 헤드리스 브라우저를 만드는 것입니다. 

헤드리스 브라우저는 웹 페이지 백그라운드에서 실행될 수 있고 브라우저가 일반적으로 하는 솔루션을 계속 구현할 수 있는 GUI가 없는 브라우저입니다. 

PDF를 생성하는 헤드리스 노드 브라우저가 몇 가지 있습니다.


generating PDFs 


PhantomJS 


한동안 사용되어 온 헤드리스 브라우저는 PhantomJS입니다. 

2011 년부터 사용 된 오픈 소스 JavaScript API입니다. 안타깝게도 2018 년 현재 더 이상 개발 중이 아니므로 더 이상 실행 가능한 옵션이 아닐 수 있습니다. 

그러나 초보자도 쉽게 배울 수 있는 구문이므로 지금은 헤드리스 브라우저의 기본 요소로 남아 있습니다.


PhantomJS를 사용하여 PDF를 작성하는 가장 쉬운 방법은 렌더링 방법입니다. 

이 기능을 사용하면 헤드리스 브라우저가 모든 웹 페이지에서 파일을 만들 수 있습니다. 

PDF뿐만 아니라 JPEG, PNG 등이 있습니다. 이를 수행하는 방법은 매우 간단합니다.


var webPage = require('webpage'); var page = webPage.create(); page.viewportSize = { width: 1920, height: 1080 }; page.open("http://www.google.com", function start(status) {   page.render('google_home.pdf, {format: 'pdf', quality: '100'});   phantom.exit(); }); 


이 예에서 PhantomJS는 일반 브라우저의 배경에서 Google 홈페이지를 비동기 적으로 연 다음 완료되면 전체 페이지를 PDF로 렌더링합니다. 

사용자에게 프린터 친화적 인 페이지 PDF를 제공해야 하는 경우 최소한의 변경으로 이 코드를 복사하여 붙여 넣을 수 있습니다. 

송장 또는 영수증과 같은 다른 것을 렌더링 해야 하는 경우 문자열 템플릿을 사용하여 동일한 방식으로 PhantomJS를 사용하여 웹 페이지로 로드 할 수 있습니다.


const puppeteer = require("puppeteer"); (async () { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.setViewport({ width: 1440, height: 900, deviceScaleFactor: 2 }); await page.goto("file:///practice/resumeapp/resume.html", { waitUntil: "networkidle2" }); await page.pdf({ path: "resume.pdf", pageRanges: "1", format: "A4", printBackground: true }); await browser.close(); })();  


Puppeteer 


아마도 가장 일반적인 노드리스 브라우저는 Chrome에서 실행하는 API 인 Puppeteer입니다. 

Google 지원 덕분에 Puppeteer는 매우 강력하며 이론적으로 Chrome이 할 수 있는 모든 작업을 수행 할 수 있습니다. Puppeteer가 Phantom보다 장점은 문서화, 지원 및 유연성이 더 우수하다는 것입니다. 

새로 온 사람이 PDF를 작성하는 것은 좀 더 어렵지만, GitHub 페이지에서 PDF를 사용하는 방법에 대한 많은 정보가 있습니다.


웹 페이지에서 PDF를 만드는 Puppeteer의 방법은 Phantom과 동일합니다. 브라우저의 백그라운드에서 일련의 비동기 호출을 수행합니다. 다음은 Puppeteer로 수행 한 위와 동일한 코드의 예입니다.


const puppeteer = require('puppeteer'); (async () => {   const browser = await puppeteer.launch();   const page = await browser.newPage();   await page.goto('https://google.com', {waitUntil: 'networkidle2'});   await page.pdf({path: 'hn.pdf', format: 'A4'});   await browser.close(); })(); 


보시다시피 PhantomJS 코드와 거의 동일하지만 조금 더 복잡합니다. 그러나 Puppeteer의 장점은 다양성입니다. Puppeteer API에는 여기에서 찾을 수 있는 PDF 생성과 관련된 다양한 옵션이 있습니다. 위의 코드는 원본 페이지와 비교하여 이 결과를 생성합니다.


undefined 


Html-pdf-chrome 


노드의 HTML에서 PDF를 생성하는 세 번째 옵션은 html-pdf-chrome이라는 라이브러리를 사용하는 것입니다. 

별도의 헤드리스 브라우저가 아니라 PDF를 생성하기 위한 목적으로 Chrome의 내장 헤드리스 브라우징 기능을 사용하는 라이브러리입니다. 변환 방법 중 가장 간단한 방법입니다. 

유일한 제한 사항은 사용하기 위해 최신 버전의 Chrome 또는 Chromium이 컴퓨터에 설치되어 있어야 한다는 것입니다. Puppeteer 및 Phantom과 마찬가지로 외부 페이지를 PDF로 변환하거나 템플릿에서 페이지를 로드 하여 보다 사용자 정의 할 수 있습니다. 

다음은 html-pdf-chrome을 사용하여 외부 페이지를 PDF로 변환하는 방법의 예입니다.


import * as htmlPdf from 'html-pdf-chrome'; const options: htmlPdf.CreateOptions = {   port: 9222, // po }; const url = 'https://github.com/westy92/html-pdf-chrome'; const pdf = await htmlPdf.create(url, options); 


보다시피 사용이 매우 간단합니다. 불행히도 Puppeteer만큼 잘 문서화 되어 있지 않으며 Puppeteer 또는 Phantom만큼 많은 옵션이 없는 것 같습니다. HTML-pdf-chrome은 단순한 작업에 가장 적합하지만 Puppeteer는 송장 생성과 같은 보다 복잡한 작업에 더 적합한 옵션 일 수 있습니다.


이들은 현재 사용 가능한 몇 가지 가능한 솔루션입니다. 사람들이 웹에서 PDF를 필요로 하는 한, 현장은 계속 발전하고 새로운 도구가 만들어 질 것입니다. 아마도 하나는 업계 표준이 될 것입니다. 그 동안 이러한 옵션 중 하나가 시작하기에 좋은 장소를 제공 할 수 있습니다. Node를 사용하여 PDF를 생성하기 위한 다른 옵션을 찾았다면 알려주십시오! 우리는 항상 새로운 솔루션을 찾고 있습니다.