HTML + CSS를 PDF로 변환 [닫기]

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

이제 PDF로 변환하는 방법을 밟고 있습니다. 나는 시도했다 :

  • DOMPDF : 테이블에 큰 문제가있었습니다. 내 큰 중첩 테이블을 제외하고 도움이되었습니다 (최대 128M의 메모리를 소비하고 죽기 전에-php.ini의 메모리에 대한 한계입니다). 그러나 테이블을 완전히 엉망으로 만들지 않는 것처럼 보입니다. 이미지. 이 테이블은 다양한 점에서 일부 선을 추가하기 위해 일부 테두리 스타일을 가진 기본 항목이었습니다.
  • HTML2PDF 및 HTML2PS : 실제로 이것으로 더 나은 행운을 얻었 습니다. 일부 이미지 (모든 이미지는 Google 차트 URL 임)를 렌더링했으며 테이블 형식이 훨씬 나아졌지 만 아직 파악하지 못하고 알 수없는 node_type () 오류로 계속 죽어가는 복잡한 문제가있는 것 같습니다. 여기서 어디로 가야할지 모르겠다. 과
  • Htmldoc : 이것은 기본 HTML에서 잘 작동하는 것처럼 보이지만 CSS를 거의 지원하지 않으므로 HTML의 모든 작업을 수행해야합니다 (Htmldoc-land에서는 여전히 2001 년이라는 것을 몰랐습니다 …) 그래서 쓸모가 없습니다.

실제로 Html2Pdf Pilot이라는 Windows 응용 프로그램을 사용해 보았지만 실제로 Linux에서는 최소한 실행되고 웹 서버에서는 PHP를 통해 주문형으로 실행되는 것이 필요합니다.

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



답변

중요 :
이 답변은 2009 년에 작성되었으며 2019 년에는 오늘날 가장 비용 효율적인 솔루션이 아닐 수 있습니다. 온라인 대안은 이전보다 더 나은 방법입니다.

사용할 수있는 온라인 서비스는 다음과 같습니다.


PrinceXML을 살펴보십시오 .

무료는 아니지만, HTML / CSS에서 PDF로 변환하는 것이 가장 좋습니다.하지만 프로그래밍이 자유롭지 않을 수도 있습니다. 따라서 10 시간의 작업 시간을 절약 할 수 있습니다 대체 솔루션을 사용하려면 올바른 소프트웨어로 전용 서버를 설정해야합니다.)

네, 이것이 ACID2를 완전하게하는 최초의 HTML2PDF 솔루션이라고 언급 했습니까?

PrinceXML 샘플


답변

를보십시오 wkhtmltopdf. 웹킷을 기반으로하며 무료로 제공되는 오픈 소스입니다.

우리는 여기에 작은 튜토리얼을 썼습니다 .

편집 (2017) :

오늘 무언가를 건설한다면 더 이상 그 길을 가지 않을 것입니다.
그러나 http://pdfkit.org/를 대신 사용 하십시오 .
아마도 모든 nodejs 의존성을 제거하여 브라우저에서 실행하십시오.


답변

약간의 조사와 일반적인 헤어 풀링 후 솔루션은 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)의 순서로 메모리 사용 비율을 지정합니다.

불행히도, 그것은 내가 생각해 낸 최고의 것입니다.


답변

mPDF 버전 2.0 을 사용해 보지 않겠 습니까? PDF로 문서를 만들 때 사용했습니다. 잘 작동합니다.

한편 mPDF는 버전 5.7이며 HTML2PS / HTML2PDF와 대조적으로 활발하게 유지됩니다.

그러나 설명서는 실제로 다루기가 어려울 수 있습니다. 예를 들어 https://mpdf.github.io/ 페이지를 살펴보십시오 .

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


답변

1) MPDF를 사용 하십시오 !

a) 추출 yourfolder

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

<?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의 수만큼 많은 페이지)이 생성됩니다.


답변

TCPDF를 점검하십시오 . 필요한 것으로 충분할 수있는 HTML-PDF 기능이 있습니다. 또한 무료입니다!


답변

스레드를 부딪 치기 위해 DOMPDF를 사용해 보았고 완벽하게 작동했습니다. 나는 DIV모든 것을 배치하기 위해 다른 블록 레벨 요소를 사용 했으며 CSS 2.1을 엄격하게 유지했으며 매우 훌륭하게 연주했습니다.