Firefox 3 및 IE 7에서 제대로 렌더링되는 HTML(XHTML 아님) 문서가 있습니다. 이 문서는 상당히 기본적인 CSS를 사용하여 스타일을 지정하고 HTML에서 제대로 렌더링합니다.
이제 PDF로 변환하는 방법을 찾고 있습니다. 나는 시도했다:
DOMPDF : 테이블에 큰 문제가 있었습니다. 내 큰 중첩 테이블을 제외하고 도움이되었지만 (최대 128M의 메모리를 소비하기 전에 죽어 가고있었습니다. php.ini의 메모리 제한입니다) 테이블을 완전히 엉망으로 만들고 얻지 못하는 것 같습니다. 이미지. 표는 다양한 지점에 선을 추가하기 위한 테두리 스타일이 있는 기본적인 것이었습니다.
HTML2PDF 및 HTML2PS : 저는 사실 이것으로 운이 좋았습니다. 일부 이미지(모든 이미지는 Google 차트 URL임)를 렌더링했고 테이블 형식은 훨씬 더 좋았지만 아직 파악하지 못한 복잡성 문제가 있는 것 같았고 알 수 없는 node_type() 오류로 계속 죽어갔습니다. 여기에서 어디로 가야할지 확실하지 않습니다. 그리고
Htmldoc : 이것은 기본 HTML에서 잘 작동하는 것 같지만 CSS에 대한 지원이 거의 없으므로 HTML에서 모든 작업을 수행해야 합니다.
실제로 꽤 괜찮은 작업을 수행한 Html2Pdf Pilot이라는 Windows 앱을 사용해 보았지만 최소한 Linux에서 실행되고 이상적으로는 웹 서버에서 PHP를 통해 주문형으로 실행되는 것이 필요합니다.
몇 가지 조사와 일반적인 헤어 풀링 후에 솔루션은 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으로 선택되었습니다. 왜 그렇게 낮은 값입니까? 다시 말하지만, 아무 생각이 없습니다.
이것에 대해 무서운 것은 한도를 초과하면 교체가 자동으로 실패 한다는 것입니다. 적어도 오류가 발생하고 기록된 경우 발생한 일, 이유 및 수정을 위해 변경해야 할 사항에 대한 표시가 있을 것입니다. 하지만.
그래서 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) 정도로 유지하는데, 이는 완전히 터무니없는 일입니다.
불행히도, 그것이 내가 생각해낸 최고입니다.
Community Wiki
mPDF 버전 2.0 을 사용해 보시지 않겠습니까? PDF 문서를 만드는 데 사용했습니다. 잘 작동합니다.
한편 mPDF는 버전 5.7이며 HTML2PS/HTML2PDF와 달리 적극적으로 유지 관리됩니다.
Snappy는 URL이나 html 페이지에서 썸네일, 스냅샷 또는 PDF를 생성할 수 있는 매우 쉬운 오픈 소스 PHP5 라이브러리입니다. 그리고... 뛰어난 웹킷 기반 wkhtmltopdf를 사용합니다.
즐기다! ^_^
Community Wiki
이미 언급했지만 mpdf가 가장 쉽고 강력하며 가장 무료인 HTML to pdf 변환기임을 확인하고 싶습니다. 하늘은 정말 한계입니다. 동적 사용자 생성 데이터의 PDF를 생성할 수도 있습니다.
예를 들어, 클라이언트는 자신이 클럽에서 연주한 음악의 트랙 목록을 업데이트할 수 있도록 CMS 시스템을 원했습니다. 그것은 문제가 되지 않았지만 사용자가 재생 목록의 .pdf를 다운로드할 수 있기를 원했기 때문에 다운로드 가능한 이 pdf도 cms에서 업데이트해야 했습니다. mpdf 덕분에 몇 가지 간단한 루프와 산재된 변수로 그렇게 할 수 있었습니다. 몇 주가 걸릴 거라고 생각했던 일이 말 그대로 몇 분이 걸렸습니다.
페이지에서 반복되는 표 머리글 또는 바닥글이 있고 페이지 번호와 총 페이지가 있을 수 있습니다. 예제를 참조하십시오. 3년 넘게 사용하고 있는데 추천합니다.
Community Wiki
fpdf 를 사용하여 PHP를 사용하여 PDF 파일을 생성하고 있습니다. 지금까지 간단한 출력을 생성하는 것이 잘 작동하고 있습니다.
Community Wiki
외부 라이브러리 없이 PHP에서 pdf를 생성하는 방법에 대한 Zend의 devzone( 1부 , 2부)에 대한 자습서가 있습니다. 나는 이런 종류의 솔루션을 구현한 적이 없지만 모두 php이기 때문에 구현하고 디버그하는 것이 더 유연하다는 것을 알게 될 것입니다.
Community Wiki
TCPDF에 대한 Darryl Hein의 언급은 아마도 좋은 아이디어일 것입니다. Nicola Asuni의 코드는 매우 편리하고 강력합니다. 유일한 킬러는 생성된 PDF와 PDF 파일을 병합할 계획이라면 해당 기능이 없다는 것입니다. PDF를 만든 다음 Sid Steward의 PDFTK(www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)와 같은 것을 사용하여 병합해야 합니다.
Community Wiki
최신 야간 dompdf 빌드를 가져오십시오. 나는 끔찍한 리소스 돼지였고 내 pdf를 렌더링하는 데 영원히 걸렸던 이전 버전을 사용하고 있었습니다. 여기 에서 밤샘을 잡은 후.
PDF를 생성하는 데 몇 초 밖에 걸리지 않았으며 PrinceXML / Docraptor에서 와 마찬가지로 멋지게 렌더링되었습니다. 내가 마지막으로 사용한 이후로 그들이 dompdf 코드를 심각하게 최적화한 것 같습니다!
Community Wiki
비용 측면에서 웹 서비스(API)를 사용하는 것이 많은 경우 더 합리적인 접근 방식일 수 있습니다. 또한 이 프로세스를 아웃소싱하여 자체 인프라/백엔드의 부담을 줄이고 평판이 좋은 서비스를 사용하는 경우 웹 표준 조정, 가동 시간, 짧은 처리 시간 및 빠른 콘텐츠 전달과의 호환성을 보장합니다.
저는 현재 시장에 나와 있는 대부분의 웹 서비스에 대해 약간의 조사를 했습니다. 이 스레드에서 언급할 가치가 있다고 생각되는 API를 가격/가치 비율에 따라 순서대로 찾으십시오. 그들 모두는 미리 구성된 PHP 클래스와 패키지를 제공하고 있습니다.
고품질 엔진 PrinceXML 을 백본으로 사용하는 DocRaptor는 분명히 최고의 PDF 품질을 제공하여 고도로 세련되고 잘 변환된 PDF 문서를 반환합니다. 그러나 pdflayer API 서비스는 여기에서 매우 가깝습니다. Pdfcrowd는 반드시 품질로 점수를 매기는 것이 아니라 처리 속도에서 점수를 매깁니다.
비용:
pdflayer.com - 위에 표시된 것처럼 여기에서 가장 비용 효율적인 옵션은 pdflayer.com으로, 100개의 월간 PDF에 대한 완전 무료 구독 계획과 $9.99-$119.99 사이의 프리미엄 구독을 제공합니다. 월간 PDF 문서 10,000개의 가격은 $39.99입니다.
docraptor.com - 7일 무료 평가판 기간을 제공합니다. 프리미엄 구독 계획은 $15-$2250입니다. 월간 PDF 문서 10,000개의 가격은 ~ $300.00입니다.
pdfcrowd.com - 100개의 PDF를 한 번 무료로 제공합니다. 프리미엄 구독 계획의 범위는 $9-$89입니다. 월간 PDF 문서 10,000개의 가격은 ~ $49.00입니다.
나는 세 가지를 모두 사용했으며 이 텍스트는 모든 비용을 지불하지 않고도 결정하는 데 도움이 될 것입니다. 이 텍스트는 한 제품을 보증하기 위해 작성된 것이 아니며 저는 그 어떤 제품과도 아무런 관련이 없습니다.
Community Wiki
명령줄에 액세스할 수 있는 경우 PhantomJS 를 사용하여 URL (원격 또는 로컬)에서 PDF
파일을 변환기에 전달하기 전에 Tidy를 사용해 볼 수도 있습니다. 렌더러 중 하나가 일부 HTML 문제(예: 닫히지 않은 태그)에서 질식하면 도움이 될 수 있습니다.
Community Wiki
좋은 렌더링은 아무 의미가 없습니다. 확인합니까?
모든 브라우저는 입력이 아무리 나쁘더라도 화면에 무언가를 표시하기 위해 최선을 다합니다. 그리고 물론 그들은 같은 일을 하지 않습니다. FireFox와 동일한 렌더링을 원하면 해당 렌더링 엔진을 사용할 수 있습니다. pdf 생성기가 있습니다. 그것은 끔찍하게 많은 작업입니다.
Community Wiki
이미 많은 솔루션이 제공되지만 다음 두 가지를 권장합니다.
HTM2PDF - HTML을 PDF로 변환하는 API를 제공하며 PHP SDK도 포함하므로 PHP에서 구현하기가 매우 쉽습니다. 유럽, 아시아 및 미국에서 서버 위치를 선택할 수 있습니다.
PDFmyURL - HTM2PDF와 거의 동일한 기능으로 URL 및 HTML을 PDF로 변환하는 API를 제공하지만 로드 밸런싱된 환경에서 작동하며 조금 더 오래되었습니다.
앞서 언급한 모든 솔루션과 이 두 API가 다른 점은 CSS 및 JavaScript를 사용하여 HTML을 PDF로 변환하는 것 외에도 PDF 권한 관리, 워터마킹 및 암호화도 제공한다는 것입니다. 따라서 지상에서 실행하려는 사람들을 위한 올인원 솔루션입니다.
TCPDF는 잘 작동하고 종속성이 없으며 무료이며 지속적으로 버그가 수정됩니다. 제공되는 HTML/CSS 콘텐츠의 형식이 잘 잡혀 있으면 적당한 속도입니다. 나는 일반적으로 50 - 300kB의 HTML 입력(CSS 포함)을 생성하고 10 - 15개의 PDF 페이지로 1-3초 이내에 PDF 출력을 얻습니다.
TCPDF에 무엇이든 보내기 전에 깔끔한 라이브러리를 HTML 프리티 포맷터로 사용하는 것이 좋습니다.
Community Wiki
나는 PHP에 대해 많은 다른 라이브러리를 시도했습니다. 내가 시도한 모든 목록. 제 생각에는 TCPDF 라이브러리가 성능/사용성을 가장 잘 타협한 것입니다. 설치 및 사용이 매우 간단하며 중소형 애플리케이션에서도 우수한 성능을 발휘합니다. 고성능, 대용량 PDF 문서가 필요하다면 Zend_PDF 모듈을 사용하되 열심히 코딩할 준비를 하세요!
Community Wiki
웹 API
이런 종류의 것을 항상 검색하는 사람들이 있다면 html 코드 및 페이지를 pdf로 변환할 수 있는 무료 웹사이트가 있습니다. URL에서 pdf 파일을 가져올 수 있는 (매우 작은) API도 있습니다.