2012-08-29 12 views
7

템플릿을 기반으로하는 pdf 파일의 대량 생성을 수행하고 있으며 성능 문제가 매우 빠르게 발생했습니다. 나의 현재 시나리오는 다음과 같다 :pdftk를 사용하여 PHP에서 대량 템플릿 기반 pdf 생성

  1. 는 FDF로 PDF 파일을 병합 데이터
  2. 는 단일 데이터 행과 PDF 형식 디스크
  3. -
  4. 쓰기 .fdf 파일을 기반으로 FDF를 만들 DB를에서 작성 될 수 pdftk (병합 된 명령으로 fill_form 사용)
  5. .pdf이 생성 될 때까지 행 반복 반복
  6. 생성 된 모든 파일이 함께 병합됩니다. 끝과 하나의 PDF는 클라이언트

나는, 그러나 이것은 단지 약간의 성능 향상 (시간 파일을 작성 저장합니다)입니다 클라이언트에 원시 출력을 제공하기 위해 passthru를 사용 주어집니다. 총 작업 시간은 200 레코드의 경우 약 50 초이며 어떤 식 으로든 적어도 10 초에 도달하려고합니다.

이상적인 시나리오는 이러한 모든 pdfs를 메모리에서 작동시키고 파일 하나 하나를 모두 작성하지 않고 pdftk와 같은 외부 도구에 그런 종류의 데이터를 전달할 수 없기 때문에 출력을 수행 할 수 없다는 것입니다 . 또 다른 아이디어는 그 모든 행을 가진 하나의 큰 .fdf 파일을 생성하는 것이지만, 허용되지 않는 것처럼 보입니다.

나는 여기 아주 사소한 것을 놓치고 있습니까?

나는 조언을 드릴 것입니다.

추신. 나는 pdflib와 같은 좋은 라이브러리를 사용할 수 있다는 것을 알고 있지만 지금은 오픈 된 라이브러리 만 고려하고 있습니다.

는 편집 :

내가 템플릿과 같은 PDF를 사용하여 여러 페이지가있는 .fdf 파일을 구축 할 수있는 구문을 파악까지 오전은, 몇 시간을 소비하고 좋은 문서를 찾을 수 없습니다.

+0

xgetbug와 같은 프로파일 링 도구를 webgrind와 함께 사용하면 실제로 시간이 많이 걸리는 것을 볼 수 있습니다. (그리고 나서 그것을 해결할 수 있습니다.) 몇 일 전과 매우 비슷한 상황에 빠졌습니다. 오픈 소스 대기열 시스템을 사용하고있었습니다. 내 경우에는 시간이 필요해. 다시 오픈 소스 솔루션 인 dompdf를 사용하고있었습니다. – amitchhajer

+0

필자는 프로파일 링을했는데 많은 시간을 필요로하는 주요 작업은 별도의 pdfs를 계속 작성하는 것입니다. –

+0

왜 그냥 6 또는 7 pdftk 변환을 병렬로 실행하지 않아도 총 시간이 10 초로 줄어들지 않는 이유는 무엇입니까? –

답변

1

내가 마지막으로 또 다른 원유하지만 효과적인 기술로 전환하기로 결정 (LaTeX를 기반으로 내 PDF 파일을 생성하기 위해 원) 첫번째 나는 twig 또는 똑똑한과 같은 템플렛 엔진을 가진 html를 생성한다. 두 번째는 mpdf을 사용하여 pdfs를 생성합니다. 나는 다른 많은 html2pdf 프레임 워크를 시험해보고 mpdf를 사용하여 끝냈다. 매우 성숙했으며 오랜 시간 (자주 업데이트, 풍부한 기능)부터 개발되었다. 이 기술을 사용하는 이점 : CSS를 사용하여 문서를 디자인 할 수 있습니다 (mpdf는 CSS 기능을 완벽하게 갖추고 있습니다) - css 혜택 (http://www.csszengarden.com)과 함께 제공되며 매우 쉽게 동적 테이블을 생성합니다.

Mpdf는 HTML 테이블을 분석하고 테 더더, tfooter 요소를 찾고 테이블이 한 페이지 크기보다 큰 경우 각 페이지에 배치합니다. 또한 page nr과 같은 동적 엔터티를 사용하여 페이지 머리글과 페이지 꼬리말 요소를 정의 할 수 있습니다.

나는이 우회로를 사용하는 것이 해결 방법 인 것처럼 보입니다. 그러나 정직하게 말하자면, 라텍스가 없어도, 어떤 엔진이든 html처럼 강력하고 간단합니다!

0

내가 꽤 좋은 라이트 찾을 FPDF (http://www.fpdf.org/)

같은 다른 덜 복잡한 라이브러리를 사용해보십시오.

항상 작고 필요한 라이브러리 만 찾으십시오.

라이브러리가 클수록 더 많은 리소스를 사용합니다.

+0

그래, 나는 그 라이브러리 (fpdf, tcpdf, dompdf)를보고 사용했지만, 내가 필요로하는 것을하지 않는다. 하나의 PDF 템플릿을 기반으로 큰 PDF를 생성하고 데이터로 채워야합니다. 이 라이브러리들 중 어느 것도 이것을하지 않습니다. 그들은 자신의 PDF를 처음부터 만들 수 있지만 템플릿을 만드는 데는 적합하지 않습니다. –

+0

그런 다음 각각의 생성 후에 메모리가 지워지도록 다른 PHP 호출에서 하나씩 생성하는 것을 고려해야합니다. 생성 할 때 큰 변수를 지우는 지 확인하십시오. 어쩌면 비 PHP 솔루션 일 수도 있습니다. – transilvlad

0

이렇게하면 여러 페이지 문제를 해결하는 데 도움이되지 않지만 pdftk는 - 문자를 '표준 입력에서 읽기'라는 의미로 사용합니다.

디스크에 쓰지 않아도되도록 .fdf을 stdin을 통해 pdftk 프로세스로 보낼 수 있습니다.내가 두 단계 내 PDF 파일을 생성

: 오랜 시간 동안 같은 문제에 직면에 beeing 후