한글 PHP로 HTML+CSS를 PDF로 변환 하시겠습니까?




php pdf 편집 (24)

Firefox 3 및 IE 7에서 잘 렌더링되는 HTML (XHTML 아님) 문서를 가지고 있습니다.이 템플릿은 상당히 기본적인 CSS를 사용하여 스타일을 지정하고 HTML로 잘 렌더링합니다.

나는 이제 그것을 PDF로 변환하는 방법을 따른다. 나는 시도했다 :

  • DOMPDF : 테이블에 큰 문제가있었습니다. 필자는 커다란 중첩 테이블을 분해하여 (최대 128M의 메모리를 소비하기 전에는 php.ini의 메모리에 제한을 두었습니다.)하지만 테이블을 완전히 망쳐 놓은 것 같지 않습니다. 이미지. 테이블은 여러 가지 포인트에서 몇 줄을 추가하기위한 테두리 스타일이있는 기본적인 것들이었습니다.
  • HTML2PDF 및 HTML2PS : 실제로이 문제에 더 많은 행운이있었습니다. 일부 이미지 (모든 이미지는 Google 차트 URL 임)를 렌더링했으며 테이블 형식이 훨씬 좋았지 만 아직 파악하지 못한 복잡한 문제가있는 것처럼 보였고 알 수없는 node_type () 오류로 인해 계속 죽어 가고있었습니다. 여기에서 어디로 가야할지 모르겠습니다. 과
  • Htmldoc : 기본 HTML에서는 정상적으로 작동하지만 CSS는 거의 지원하지 않으므로 HTML로 모든 것을해야합니다 (Htmldoc에서 2001 년은 아직 실현되지 않았습니다 ...) 그래서 나에게는 쓸모가 없습니다.

Html2Pdf Pilot이라는 Windows 응용 프로그램을 실제로 사용해 보았습니다. 그러나 최소한 Linux에서 실행되고 이상적으로 웹 서버에서 PHP를 통해 주문형으로 실행되는 무언가가 필요합니다.

무엇이 누락 되었습니까? 또는 어떻게이 문제를 해결할 수 있습니까?


필자는 DocRaptor ( PrinceXML 을 "엔진"으로 사용함)을 제안합니다.


Checkout TCPDF . 그것은 당신이 필요로하는 것만으로도 충분할 수있는 몇 가지 HTML to PDF 기능을 가지고 있습니다. 그것은 또한 무료입니다!


웹 API

항상 이런 종류의 물건을 찾는 사람들이 있다면, HTML 코드와 페이지를 pdf로 변환 할 수있는 무료 웹 사이트가 있습니다. URL에서 pdf 파일을 얻을 수있는 (아주 작은) API도 있습니다.

그것을 여기에서 확인해라.


mPDF 버전 2.0 을 사용해 보지 않으 시겠습니까? 나는 그것을 PDF 문서를 만들 때 사용했다. 그것은 잘 작동합니다.

한편 mPDF는 버전 5.7이며 HTML2PS / HTML2PDF와는 달리 적극적으로 유지 관리됩니다.

그러나 문서는 실제로 처리하기가 어려울 수 있음을 명심하십시오. 예를 들어, https://mpdf.github.io/ 에서이 페이지를보십시오.

html에서 pdf에 이르는 매우 기본적인 작업은이 라이브러리로 수행 할 수 있지만보다 복잡한 작업은 문서를 읽고 이해하는 데 다소 시간이 걸립니다.


TCPDF는 잘 작동하고, 종속성이없고, 자유롭고 끊임없이 버그 수정을합니다. 제공된 HTML / CSS 내용이 잘 형성되면 합리적인 속도입니다. 나는 보통 50 - 300 kB의 HTML 입력 (CSS 포함)을 생성하고 10-15 PDF 페이지로 1-3 초 내에 PDF 출력을 얻습니다.

TCPDF에 무엇인가 보내기 전에 깔끔한 라이브러리를 HTML 예쁜 포맷터로 사용할 것을 강력히 권장한다.


아마도 파일을 변환기로 넘기기 전에 Tidy를 시도해 볼 수도 있습니다. 일부 HTML 문제 (예 : 닫히지 않은 태그)에서 렌더러 중 하나가 질식하면 도움이 될 수 있습니다.


몇 가지 조사와 일반적인 헤어 풀링 후 솔루션은 HTML2PDF 것으로 보입니다. DOMPDF 는 테이블, 테두리, 중간 크기의 복잡한 레이아웃으로도 끔찍한 일을했다. htmldoc 은 상당히 견고하지만 거의 CSS를 모르는 사람이다. CSS를 사용하지 않고 HTML 레이아웃을 만들고 싶지 않다.

HTML2PDF가 가장 유망 해 보였지만 node_type에 대한 null 참조 인수에 대해이 이상한 오류가 계속 발생했습니다. 나는 이것에 대한 해결책을 마침내 발견했다. 기본적으로 PHP 5.1.x는 어떤 크기의 문자열에서도 정규 표현식 (preg_replace_ *)을 대체하여 잘 작동합니다. PHP 5.2.1은 pcre.backtrack_limit 이라는 php.ini 설정 지시자를 도입했습니다. 이 구성 매개 변수는 일치가 수행 된 문자열 길이를 제한합니다. 이것이 왜 소개되었는지 나는 모른다. 기본값은 100,000으로 선택되었습니다. 왜 그렇게 낮은 가치입니까? 다시 말하지만, 아무 생각이 없습니다.

때문에 PHP 5.2.1에 대한 버그가 제기되었는데 , 약 2 년 후에 아직 열리고 있습니다.

이 점에 대해 소름 끼치는 점은 제한을 초과하면 교체가 자동으로 실패 한다는 것입니다. 적어도 오류가 제기되고 기록 된 경우 어떤 일이 일어 났는지, 왜 고쳐야 할 지, 그리고 무엇을 변경해야하는지에 대해 알 수 있습니다. 하지만.

그래서 저는 PDF로 변환하기 위해 70k HTML 파일을 가지고 있습니다. 다음 php.ini 설정이 필요합니다.

  • pcre.backtrack_limit = 2000000; # 아마도 내가 필요로하는 것 이상은 괜찮아.
  • memory_limit = 1024M; # 예, 1 기가 바이트 . 과
  • max_execution_time = 600; # 예, 10 분 .

이제는 기민한 독자가 내 HTML 파일이 100k보다 작다는 사실을 눈치 챘을 것입니다. 왜 내가이 문제에 부딪혔는가를 짐작할 수있는 유일한 이유는 html2pdf가 프로세스의 일부로 xhtml 로의 변환을한다는 것입니다. 아마 그것은 나를 데려 갔다. (비록 거의 50 %가 부풀어 오른다.) 어쨌든, 위의 일을했습니다.

자, html2pdf는 리소스 돼지입니다. 내 70k 파일은 35 페이지의 PDF 파일을 만들기 위해 약 5 분, 최소 500-600M의 RAM이 필요합니다. 불행히도 실시간 다운로드를 위해 충분히 빠르지는 않으며 메모리 사용량은 메모리 사용 비율을 1000 대 1 (70k 파일의 경우 600M RAM)의 순서로 지정합니다. 이는 완전히 우스 꽝입니다.

불행히도, 그게 내가 생각해 낸 것 중 최고야.


PHP 는 아니지만, Java 라이브러리 를 사용합니다.

Flying Saucer는 XML 또는 XHTML을 사용하고 CSS 2.1 호환 스타일 시트를 적용하여 PDF로 렌더링합니다.

PHP 에서 system() 또는 유사한 호출을 통해 사용할 수 있습니다. 그것은 inputXML 정형성 을 필요로하지만.


1) MPDF 사용 MPDF !

a) yourfolder 에서 추출

b) yourfolder file.php 를 만들고 다음 코드를 삽입하십시오 :

<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>');
$mpdf->Output();   exit;
 ?>

c) 브라우저에서 file.php 를 엽니 다.




2) pdfToHtml 사용하십시오!

1) 루트 폴더에 pdftohtml.exe 압축을 풉니 다.

2) 그 폴더 안의 anyfile.php 파일에이 코드를 넣으십시오 (가정에서는 example.pdf 소스도 있음).

<?php
$source="example.pdf";
$output_fold="FinalFolder";

    if (!file_exists($output_fold)) { mkdir($output_fold, 0777, true);}
$result= passthru("pdftohtml $source $output_fold/new_filename",$log);
//var_dump($result); var_dump($log);
?>

3) FinalFolder를 입력하면 변환 된 파일이 생성됩니다 (원본 PDF와 같은 수의 페이지).


HTML을 PDF로 변환하는 작업은 PHP를 사용하여 서버 측에서 실제로 수행 해야 합니까?

방금 HTML5 / JavaScript를 사용하는 클라이언트 측 솔루션 인 jsPDF 를 발견했습니다. MIT 라이선스 코드는 GitHub 에서도 제공됩니다.


이 질문은 이미 꽤 오래되었지만 CutyCapt 대해 언급 한 사람은 본 적이 없습니다. :)

CutyCapt

CutyCapt 는 웹 페이지를 SVG, PDF, PS, PNG, JPEG, TIFF, GIF 및 BMP를 비롯한 다양한 벡터 및 비트 맵 형식으로 렌더링하는 작은 교차 플랫폼 명령 줄 유틸리티입니다


좋은 렌더링은 아무 의미도 없습니다. 그것을 확인합니까?

입력이 얼마나 나쁜지에 상관없이 모든 브라우저가 화면에 무엇인가를 보여줄 수있는 최대의 기능을합니다. 물론 그들은 같은 일을하지 않습니다. FireFox와 동일한 렌더링을 원한다면 렌더링 엔진을 사용할 수 있습니다. 거기에 대한 PDF 생성기가 있습니다. 그것은 끔찍한 일입니다.


이미 언급되었지만, mpdf가 가장 쉽고, 강력하며, 무료로 제공되는 html to pdf 변환기라는 것을 확인하고 싶습니다. 하늘은 정말로 한계입니다. 동적 사용자 생성 데이터의 pdfs를 생성 할 수도 있습니다.

예를 들어, 고객이 CMS 시스템을 원했기 때문에 클럽에서 연주 한 음악의 트랙 목록을 업데이트 할 수있었습니다. 문제가 없었지만 사용자가 재생 목록의 .pdf를 다운로드 할 수 있기를 원했기 때문에 다운로드 가능한 pdf도 CMS에서 업데이트해야했습니다. mpdf 덕분에, 몇 가지 간단한 루프와 산재 된 변수로 나는 그 일을 할 수있었습니다. 문자 그대로 몇 주일이 걸릴 것이라고 생각한 무언가가 나를 분 걸렸다.

내가 시작하는 데 도움이되는 위대한 article .


당신이 PDF 변환기 도서관에 완벽한 XHTML + CSS를 찾아 내고 싶은 경우에, 그것을 잊으십시오. 그것은 가능하지 않습니다. 이는 완벽한 브라우저 (XHTML + CSS 렌더링 엔진)를 찾는 것과 같습니다. 우리가 가지고 있습니까? IE 또는 FF?

나는 DOMPDF를 성공 시켰습니다. 문제는 라이브러리가 작동하는 방식과 함께 사용하기 위해 HTML + CSS 코드를 수정해야한다는 것입니다. 그것 이외에, 나는 꽤 좋은 결과를 가지고있다.

아래 참조 :

원본 HTML

HTML을 PDF로 변환


나는 PHP 클래스가 CSS와 함께 xHtml 페이지를 렌더링하는 데 가장 좋다고 생각하지 않는다.

새로운 CSS 규칙이 나오면 어떻게 될까요? (곧 css 3.0 ...)

html 페이지를 렌더링하는 가장 좋은 방법은 브라우저입니다 (obvisiuly). Firefox 3.0은 기본적으로 pdf 형식으로 '인쇄'할 수 있으며, torisugary는이를 사용하기위한 확장 (명령 줄 인쇄)을 개발했습니다. 여기에서 찾을 수 있습니다.

어쨌든, 거기에 여전히 PDF 변환기로 많은 problmes runninr 파이어 폭스가 ...

지금은 wkhtmltopdf가 최고라고 생각합니다 (즉, 사파리 브라우저에서 사용하는 것입니다). 빠르며, 빠르며, 굉장합니다. 네, opensource뿐입니다 ... wkhtmltopdf


최신 야간 dompdf 빌드 잡아보십시오 - 나는 끔찍한 리소스 돼지 였고 영원히 내 PDF를 렌더링하는 데 사용되는 이전 버전을 사용했다. here 에서 야간을 붙잡고 난 후에.

PDF를 생성하는 데 몇 초 밖에 걸리지 않았습니다 . PrinceXML / Docraptor 와 마찬가지로 멋지게 렌더링되었습니다. 마치 내가 마지막으로 사용했기 때문에 dompdf 코드를 심각하게 최적화 한 것처럼 보입니다!


이미 제공되는 솔루션이 많지만 다음 두 가지를 권장합니다.

  1. HTM2PDF - HTML을 PDF로 변환하는 API를 제공하며 PHP로 구현하기가 쉬운 PHP SDK도 제공합니다. 유럽, 아시아 및 미국에서 서버 위치를 선택할 수 있습니다.
  2. PDFmyURL - HTM2PDF 와 거의 동일한 기능을 갖춘 URL과 HTML을 PDF로 제공하는 API를 제공하지만로드 균형이 잡힌 환경에서 작동하며 조금 더 길었습니다.

앞서 언급 한 모든 솔루션에서이 두 API와 다른 점은 HTML을 CSS 및 JavaScript로 PDF로 변환하는 것 외에도 PDF 권한 관리, 워터 마킹 및 암호화를 제공한다는 것입니다. 따라서이 제품은 지상에서 뛰고 싶은 사람들을위한 올인원 (all-in-one) 솔루션입니다.

면책 조항 : 나는이 웹 사이트를 운영하는 Kaiomi 회사에서 일합니다.


나는 TCPDF 또는 DOMPDF를 추천한다.


나는 PHP를 위해 많은 라이브러리를 시도했다. 내가 열거 한 모든 것을 시도했다. 내 견해로는 TCPDF 라이브러리가 최상의 성능 / 유용성이다. 설치와 사용이 매우 간단하며 중소 규모의 응용 프로그램에서도 좋은 성능을 발휘합니다. 높은 성능과 큰 PDF 문서가 필요하다면 Zend_PDF 모듈을 사용 Zend_PDF .


외부 라이브러리없이 php ( 파트 1 , 파트 2 )에서 pdf를 생성하는 Zend의 devzone에 대한 자습서가 있습니다. 필자는 이런 종류의 솔루션을 구현 한 적이 없지만 모든 PHP를 사용하기 때문에 구현 및 디버깅을보다 유연하게 수행 할 수 있습니다.


wkhtmltopdf 살펴 wkhtmltopdf . 웹킷과 무료로 제공되는 오픈 소스입니다.

우리는 here 작은 자습서를 썼습니다.

편집 (2017) :

오늘 무언가를 만드는 것이었다면 더 이상 그 길을 가지 않을 것입니다.
그러나 대신 http://pdfkit.org/ 를 사용할 것입니다.
브라우저에서 실행하기 위해 모든 nodejs 종속성을 제거합니다.


처음에 오프닝 포스트에서 언급 한 HTML2PDF 및 HTML2PS 는이 link 가있는 2009 패키지에 대해 이야기하고있었습니다.

그러나 더 나은 HTML2PDF

부분적으로는 프랑스어이지만 TCPDF를 기반으로합니다.

페이지에서 반복되는 테이블 머리글 또는 바닥 글을 가질 수 있으며 페이지 번호와 전체 페이지가 있습니다. 그 예를 보라. 나는 3 년 이상 그것을 사용하고 그것을 추천했다.


TCPDF 대한 Darryl Hein의 언급은 좋은 생각 일 수 있습니다. Nicola Asuni의 코드는 매우 편리하고 강력합니다. 유일한 킬러는 PDF 파일을 생성 된 PDF와 병합 할 계획이라면 그 기능이없는 것입니다. PDF를 작성한 다음 Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)의 PDFTK와 같은 것을 사용하여 병합해야합니다.


웹 페이지에서 PDF 파일을 작성하기위한 공용 API를 개발했습니다. 그것은 사용하기 쉬운 슈퍼 PHP 클라이언트 클래스가 있습니다. wkhtmltopdf를 사용하여 클라우드에서 PDF를 렌더링합니다.

HTML에서 특별한 것이 필요하지 않습니다. images / css / js 링크에 절대 URL이 필요 없습니다. localhost (dev 컴퓨터)에서도 작동합니다.

현재이 서비스는 Azure 4 개 지역 (미국 동부, 미국 서부, EU 북부, 동남아시아)에 종점이 있습니다.

독점 프로토콜을 사용하여 웹 페이지 내용을 API로 보내 PDF로 변환하기 때문에 빠릅니다.

모든 엔드 포인트의로드 균형이 조정되므로 신뢰성이 있습니다.

무료 계정은 테스트 또는 낮은 사용 가능. 웹 사이트 세부 정보 :

https://rotativahq.com





pdf-generation