2016-06-06 2 views
-4

270 PDF를 생성해야하고 DOMPDF를 사용해야합니다. 문제는 20 PDF를 생성 한 후 내부 서버 오류가 발생한다는 것입니다. 시간 제한도 0으로 설정했습니다. 많은 PDF를 생성하는 가장 좋은 방법은 무엇입니까?수백 개의 PDF 생성

+0

한 번에 하나씩? –

+0

@MarkBaker 나는 pdf를 while ..으로 생성하고 테이블에 270 개의 레코드가 있습니다. – Eliana

+1

"500 내부 서버 오류"상태 코드 (또는 빈 페이지)는 스크립트가 오류를 발생 시키지만 PHP를 구성하지 않았 음을 나타냅니다 오류 메시지를 표시하십시오. 오류 메시지를 보지 않고 올바르게 코드를 작성하기가 어렵 기 때문에 추가 작업을하기 전에 해결해야 할 사항입니다. 오류보고 엄지 규칙은 개발 및 로그인 프로덕션에 표시됩니다. 출발점으로,'error_reporting'과'display_errors' 지시자를 개발하고 조정하는 컴퓨터에서 시스템 전체의'php.ini' 파일을 편집 해보는 것이 좋습니다 ([here here] (http://stackoverflow.com/). a/5680885/13508)). –

답변

1

wkhtmltopdf을보아야합니다. 그것은 훌륭한 도구이며, 아무 문제없이 수천 페이지가있는 수천 개의 pdfs를 생성하기 위해이 도구를 사용해 왔습니다.

구문이 될 수있는 쉬운 :

wkhtmltopdf http://google.com google.pdf 

이 구글 홈페이지에서 PDF를 만들 것입니다.

+0

wkhtmltopdf는 실제 (헤드리스) 브라우저를 실행하므로 경량이 아니며 특히 빠르지 않습니다. 배치 처리, 특히 esp에 대한 좋은 대안이 아닐 수도 있습니다. 작업에 복잡한 레이아웃이 포함되지 않은 경우 –

+0

물론 변환 할 데이터에 따라 달라집니다. 복잡한 레이아웃이 좋지 않을 수 있습니다. 수동으로 페이지를 레이아웃하기 위해'tcpdf '를 사용할 수도 있습니다. 이렇게하면 최종 결과에 더 많은 힘을 얻을 수 있지만 제작/코드 작성에 더 많은 노력이 필요합니다. 런타임 응용 프로그램이 있으면 더 빠를 수도 있습니다. – cb0

+0

@ cb0 나는 동적으로 출력을 생성합니다 ... 그래서 변수 $ 출력 = "내 HTML"과 나는 폴더에 PDF 파일을 저장해야합니다. 이 경우 나는 이것을 할 수있다 : wkhtmltopdf $ output /folder/mypdf.pdf 또는 아닌가? – Eliana

2

Dompdf를 사용하여 많은 수의 문서를 생성하려면 각 렌더에 대해 외부 프로세스를 생성해야합니다. 이는 더 빠르고 자원 집약적 일 수 있습니다 (즉, 메모리 사용에 관한 것) [ref].

나는 비슷한 작업을 위해 과거에 사용했던 단계는했다 :

  1. 렌더링에 대한 각각의 HTML 문서를 작성 (선택적으로 파일에 저장).
  2. 해당 HTML을 PDF로 렌더링하는 프로세스를 생성하십시오.
  3. HTML을 파일로 저장 한 경우 HTML을 삭제하십시오.

    foreach ($htmldocs as $htmldoc) { 
        exec("php dompdf.php $htmldoc"); 
    } 
    

    그리고 dompdf.php이 DOMPDF를 인스턴스화하고 HTML 파일을 렌더링하는 스크립트 될 것이다 :

그래서 2 단계는 다음과 같이 될 것이다.

$dompdf = new Dompdf(); 
$dompdf->load_html_file($argv[1]); 
$dompdf->render(); 
$filename = basename($argv[1], '.html').'.pdf'; 
file_put_contents($filename, $dompdf->output()); 

보너스 정보 : 실제로 쉽게 정의 페이지와 약간 큰 문서를 작성했다 I've done something similar. 이 프로세스의 네 번째 단계에서 나는 pdftk을 사용하여 렌더링 된 PDF 문서를 단일 PDF로 결합했습니다.

$exec_cmd = 'pdftk'; 
for ($html_doc = 1; $html_doc <= count($html_docs); $html_doc++) { 
    $exec_cmd .= ' ' . TEMP_DIR . '/' . $filenames[$html_doc] . '.pdf'; 
} 
$exec_cmd .= ' cat output ' . FILESTORE_DIR . '/' . $packet_gen_info['packet_code'] . '.pdf'; 
exec($exec_cmd, $pdftk_output, $pdftk_return_code); 
관련 문제