2014-11-01 3 views
1

이 질문에 대한 답변이 없지만 여기에 설명되어 있습니다.DOMPDF PDF 자동 높이를 만드는 방법

내가하려는 것은 사람들이 내 웹 사이트에서 다양한 정보를 입력하고 HTML 템플릿 파일에 모든 내용을 표시하여 나중에 PDF로 변환하는 것입니다. 모든 사용자는 항목 및 항목 길이가 가변적이므로 문서의 최종 결과 높이를 예측하는 것은 불가능합니다.

즉, 사용자가 더 많은 정보를 제공할수록 문서의 크기가 커집니다. 그리고 HTML 템플릿의 최종 결과에 따라 PDF 높이를 생성하도록 DOMPDF를 설정하는 방법은 없습니다.

내 코 바로 아래에 해결책이 누락 되었습니까?

답변

0

기본 제공 방법이 없지만 가능하지는 않습니다. 당신은이 질문에 두 번째로 우연히 만났고, 제가 관리했던 처음으로 할 수있는 방법을 찾아 냈습니다.

다음은 원래 게시물의 dompdf support group에 있습니다.


먼저 문서의 스타일 시트를 약간 수정해야합니다. 상단 및 하단 페이지 여백을 높이 계산에 추가하지 않도록 0으로 설정하려고합니다. 첫 번째 패스 HTML은 다음과 같은 추가 스타일 선언 추가에 그래서 :

@page { margin-top: 0px; margin-bottom: 0px; } 

다음, 당신은 가장 먼저 통과 문서 크기가 있다는 것을 결정해야한다. 나는 간단한 문서를 사용하고 있었기 때문에 간단한 8cm x 8cm 페이지 크기로 갔다. 페이징과 관련된 버그를 피하려면 더 큰 높이를 사용하는 것이 좋습니다. 8cm는 대략 226.77pt입니다. 우리는 우리의 두 번째 패스를 할 수 있도록

$dompdf = new DOMPDF(); 
$dompdf->set_paper(array(0 , 0 , 226.77 , 226.77)); 
$dompdf->load_html($first_pass_html); 
$dompdf->render(); 

그런 다음 우리는이 패스 및 해제는 $ DOMPDF 변수의 결과 페이지 수를 얻을 : 그래서 적절한 크기로 정의 된 문서를 사용하는 최초의 패스를 설정 :

$page_count = $dompdf->get_canvas()->get_page_number(); 
unset($dompdf); 

마지막으로 생성 된 페이지의 수 (및 여백을 수용하는 약간의 여분의 패딩)을 곱한 첫번째 패스에서 사용 된 페이지의 높이로부터 산출되는 페이지 높이를 사용하여 문서를 두 번 렌더링.

$dompdf = new DOMPDF(); 
$dompdf->set_paper(array(0 , 0 , 226.77 , 226.77 * $page_count + 20)); 
$dompdf->load_html($original_html); 
$dompdf->render(); 
$dompdf->stream('sample.pdf' , array('Attachment' => 0)); 
+0

저는 이것이 제대로 작동하지 않을 것이라고 생각합니다. 이 방법은 "그리드에 스냅"하기 때문에 더 나은 용어가 부족합니다. 나는 그것을 정확하게 완벽하게 픽셀이 될 필요가있다. 나는 당신의 매우 상세한 대답을 위해 당신을 감사한다 :) – Boriss

+0

예, 미안. 이것은 분명히 픽셀 완벽한 크기를 얻지 못할 것입니다. 어느 시점에서 나는 현재 위치를 추출하는 방법을 알아 내기 위해 시간을 할애 할 것이다. – BrianS

+0

@BrianS 저는 자동 높이 기능을 구현하기 위해 일부 HTML을로드 한 후 위치를 파악하는 방법을 알고 싶어합니다. 이 문제를 조사 할 기회가 있으면 여기에 게시하십시오. momemt에서는이 제한으로 인해 domPdf를 사용할 수 없으며 mPdf를 사용하여 자동 높이 (http://stackoverflow.com/questions/33022101/mpdf-document-auto-height-pos-printer)를 구현할 수 있습니다. 고마워, Hannes – HKandulla