2012-12-12 6 views
11

현재 PDF 생성에 문제가 있습니다. 시스템에서 dompdf를 사용하여 HTML을 PDF로 변환하면 정상적으로 작동합니다. 그러나 사용자가 A4 페이지보다 큰 이미지를 삽입하면 PDF가 크게 망가지며 큰 이미지 아래의 모든 내용이 묶여 있거나 전혀 표시되지 않습니다.dompdf 이미지 오버 플로우 문제

여기

이 하나가 괜찮 문제의 예를 보여주는 두 개의 PDF 파일입니다

https://dl.dropbox.com/u/65878041/OK.pdf

첫 번째 이미지가 A4 페이지의 모든 컨텐츠보다 큰 것으로 볼 수있는이 일 다음과 같은 경우 이전과 동일해야한다. 내가 이상적으로 할 싶은 무엇

https://dl.dropbox.com/u/65878041/Issue.pdf

는 부분으로 이미지를 깨고 필요한만큼의 페이지에 걸쳐 그것을 걸쳐있다. 이 LaTeX solution에서 성취되는 것과 같습니다. dompdf로이 작업을 수행 할 수 있습니까? 또는 HTML을 PDF로 변환하기위한 다른 PHP 라이브러리?

나는 그것을 직접 들여다 보았고 분명히 A4 페이지보다 큰 이미지를자를 수 있었다. 그러나 문제는 손에 들어가기 전에 페이지에 텍스트가 있는지 또는 그와 비슷한 것이 있는지를 알 필요가있는 그러한 접근법에 있습니다.

감사합니다. 어떤 통찰력이라도 대단히 감사 할 것입니다.

+2

그것은이다 직접적인 해결책은 아니지만 다른 HTML 기반 PDF 생성기로 전환하는 것을 고려할 수 있습니다. 나는 webkit을 사용하는'wkhtmltopdf'에 행운을 빕니다. 즉, CSS 및 심지어 자바 스크립트를 사용하여 렌더링되는 동안 페이지 내용을 조작 할 수 있습니다. 예를 들어, 렌더링 된대로 예상 된 뷰포트에 대해 이미지를 측정 한 다음 적절하게 크기를 조정할 수 있습니다. 물론 사이즈의 품질을 보장하지는 않을 것입니다 ... – Charles

+0

DOMPDF 버전은 무엇입니까? 나는 비슷한 문제를 가지고 있었고 최신 베타가 나를 위해 트릭을했다. –

+0

그것은 최신 0.6.0 베타 3이지만 github에서 절대 최신 버전을 가져 오도록 노력할 것입니다. –

답변

4

그것은 나를 훨씬 더 당신에게 게시하면 도움이 HTML과 CSS ... 있어 마음에 두 가지 일 것입니다 :

옵션 # 1

봅니다 포장하는 방법 이미지를 추가 DIV에 추가하고 너비 및 오버플로 규칙을 명시 적으로 설정합니다. 내가되기 전에

옵션 # 2

dompdf의하지만 wkhtmltopdf을 발견 한 후 큰 팬은 뒤돌아 보지도 않았다. wkhtmltopdf은 일을 올바르게 끝내는 놀라운 도구입니다. 이 솔루션을 시도하려면 다음을 수행하십시오 :

  1. 정적 바이너리는 project home page에서 다운로드하십시오. 아키텍처에 따라 다르므로 올바른 것을 선택하십시오. 둘 다 다운로드 할 수 있습니다. 런타임에 아키텍처를 감지하고 적절한 바이너리를로드하십시오.
  2. 프로젝트에서 액세스 할 수있는 디렉토리에 파일을 저장하십시오.
    /path/to/my/proj/bin/wkhtmltopdf
  3. 스크립트를 실행하고 HTML 문서를 생성하십시오. 일부 tmp 파일
    file_put_contents('/tmp/myfile.html', $html);
  4. 에 저장하면 변환 명령을 실행
    shell_exec('/path/to/my/proj/bin/wkhtmltopdf /tmp/myfile.html /tmp/myfile.pdf')
  5. 받기 생성 된 PDF, 변경 응답 헤더와 서버 파일의 내용 :
    header('Content-Type: application/pdf');

    echo file_get_contents('/tmp/myfile.pdf');

+0

wkhtmltopdf로 바꾼 것이 트릭입니다. 알렉스 고마워. –

1

이미지가 표시되는 방법을 모르겠지만 특정 요소 이전 또는 이후에 페이지를 분할하도록 dompdf에 알릴 수 있습니다. 예를 들어 :

<div style='page-break-after:always;'> 
    <img src="PATH_TO_IMAGE" /> 
</div> 
+0

페이지가 깨지면? if는 100 개의 이미지를 포함합니다. div를 오버플로하거나 A4 시트를 오버 플로우시키는 경우 중단해야합니다. – 151291