2016-11-21 1 views
0

HTML을 템플릿보기에 배치하는 동안 TCPDF를 사용하여 PDF를 생성 할 수 있습니까?

예 :

details.html.pdf :

%의 PDF-1.7 %

<?php 
    $html = ' //all the stuff i want to appear on the pdf '; 

     $filename = $emailReport['subject']; //Outputs 'Email Report From Database' in output 

     $pdf->writeHTMLCell($w = 250, $h = 200, $x = '', $y = '', $html, $border = 0, '', $fill = 0, $reseth = true, $align = 'center', $autopadding = true); 
     $pdf->Output($filename,'I'); 
} 

DefaultController.php

public function printAction() 
    { 
     return $this->delegateView(
     [ 
      'viewParameters' => [ 
       'pdf' => $pdf 
      ], 
      'contentTemplate' => 'PrintoutBundle:Default:pdf.html.php', 
      'passthroughVars' => [ 
       'activeLink' => '#printout_email', 
       'mauticContent' => 'email', 
       'route'   => $this->generateUrl('printout_email'), 
      ], 
     ] 
    ); 
    } 

나를 준다 7 0 obj < </Typ 리소스 2 0 R/미디어 박스 [0.000000 0.000000 595.276000 841.890000]/CropBox [0.000000 0.000000 595.276000 841.890000]/BleedBox [0.000000 0.000000 595.276000 841.890000]// 페이지/부모 1 0 R/LastModified (D : 20161121165447-06'00 ' TrimBox [0.000000 0.000000 595.276000 841.890000]/ArtBox [0.000000 595.276000 841.890000]/내용 8 0 R/회전 0/그룹 < </유형/그룹/S/투명/CS/DeviceRGB >>/PZ 1 >> endobj 8 0 obj <> 스트림 x S 6 W ݴݴ, , $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ! l < G , v 7 dk ] S ( ~ vN + Sf 3 : G ? c b / s C w (x ~ p o Y l = PBU Q rr @ ​​ ֪ w + | ? A nfW // 더 많은 수의 행에 대한 자세한 내용 j W 6m ֭ [/^LwY : fp A \ vmpp v16 Q0 Bl5 T A & =`F XX ^! c LK ( KKKKK/ProcSet [/ PDF/Text/ImageB/ImageC/ImageI]/글꼴 < </F1 3 0 R/F2 4 0 R/F3 5 0 R >>/XObject/I0 13 0 R/I1 14 0 R/I2 15 0 R/I3 16 0 R >> >> endobj 6 0 obj <>/H/I >> endobj 17 0 obj < </제목 2016 년 11 월 21 일)/제목 (데이터베이스에서 보낸 전자 메일 제목)/제작자 ( TCPDF 6.2.12 (tcpdf.org))/CreationDate (D : 20161121165447-06'00 ')/ModDate D : 20161121165447-06'00 ')/Trapped/False >> endobj 18 0 obj < </유형/메타 데이터/하위 유형/XML/길이 4307 >> 스트림 응용 프로그램/pdf 생성 됨 2016 년 11 월 21 일 이메일 제목 데이터베이스의 주제 2016- 11-21T16 : 54 : 47-06 : 00 2016-11-21T16 : 54 : 47-06 : 00 2016-11-21T16 : 54 : 47-06 : 00 TCPDF 6.2.12 (tcpdf.org) uuid : 4945196b- d05c-76e8-8a79-e9009fcad893 uuid : 4945196b-d05c-76e8-8a79-e9009fcad893 ns.adobe.com/pdf/1.3/pdf Adobe PDF 스키마 ns.adobe.com/xap/1.0/mm/ xmpMM XMP 미디어 관리 스키마 내부 문서의 특정 화신에 대한 UUID 기반 식별자 InstanceID URI www.aiim.org/pdfa/ns/id/pdfaid PDF/A ID 스키마 내부 PDF/A 표준 부품의 일부 내부 정수 내부 PDF/표준 수정 amd 텍스트 내부 적합성 레벨 PDF/A 표준 준수 텍스트 엔드 스트림 endobj 19 0 obj < </유형/카탈로그/버전/1.7/페이지 1 0 R/이름 < < >>/ViewerPreferences < </Direction/L2R >>/PageLayout/SinglePage/PageMode/UseNone/OpenAction [7 0 R/FitH null]/메타 데이터 18 0 R >> endobj xref 0 20 0000000000 65535 f 0000006237 00000 n 0000035774 00000 n 0000035774 00000 n 0000006309 00000 n 0000006526 00000 n 0000035942 00000 n 0000000465 00000 n 0000003474 00000 n 0000003925 00000 n 0000004460 00000 n 0000004930 00000 n 0000006640 00000 n 0000006938 00000 n 0000014933 00000 n 0000023217 00000 00000 N N 0000036214 0000036602 0000040992 00000 00000 N N 트레일러 < </사이즈 20/루트 19 0 R/정보 17 0 R/ID [< 4945196bd05c76e88a79e9009fcad893> < 4945196bd05c76e88a79e9009fcad893>] >> startxref 41,201 %% EOF

그러나 컨트롤러에 내 코드를 모두 넣고 템플릿 파일을 사용하지 않고 건너 뛰면 완벽하게로드됩니다.

$ this-> delegateView()는 내 컨트롤러에서 템플릿으로 데이터를 보냅니다. 는 (나는 또한 아무 소용이 $ html로 = $ this-> delegateView (..) 만들기 시도했습니다.)

편집과 같이 컨트롤러 : PDF를 생성하는 시도에

 return $pdf->writeHTMLCell($this->delegateView(
     [ 'Content-Type'  => 'application/pdf', 
      'Content-Disposition' => sprintf('attachment; filename="%s"', $filename), //$pdf->Output($filename,'I'), 
      'viewParameters' => [ 
       'pdf' => $pdf, 
       'objectId'  => $objectId 
       //more stuff sent to the template 
      ] 
     ] 
    )); 

(콘텐트가 컨트롤러에서 템플릿으로 이동하는 동안) PDF가 작성되지 않습니다. TCPDF 서비스를 잘못 포장하고 있다고 생각하지만 올바르게 처리하는 방법을 알 수 없습니다.

+0

** 1 ** - 나는'details.html.php'을 의미한다고 생각합니다. ** 2 ** -'Output' 명령은 첫 번째 인수로 pdf 확장자를 취합니다. '$ filename'은 PDF입니까? –

+0

예 $ filename은 제목을 가져와 .pdf 확장자로 다시 작성합니다. – billblast

+0

마지막 예제에서 작성한 'writeHTMLCell' 메소드에 잘못된 인수가 전달되었습니다. 첫 번째 예제에 초점을 맞 춥니 다. 출력 명령 전에'ob_clean()'을 실행하려 했습니까? –

답변

0

출력 방법의 두 번째 매개 변수를 "S"문자열로 변경해야합니다. 심포니 서비스에서 pdf의 생성을 아웃소싱하고 "createPdf()"와 같은 메소드를 사용하여 tcpdf의 출력 메소드의 반환 값을 가져옵니다. 당신이 당신의 페이지를 렌더링하는 템플릿을 사용하는 경우

가 유효한 PDF 출력을 얻으려면, 당신은 응용 프로그램/PDF

에 콘텐츠 형식 헤더를 변경해야합니다 (즉, PDF 진 내용이다), 당신은 HTML 콘텐츠를 - 기본적으로.

+0

이것은 내가하려는 일이지만 내 접근 방식이 잘못되었다고 생각합니다. 원래 게시물을 수정했습니다. 제가 누락되거나 잘못하고있는 것을 지적 해 주시겠습니까? – billblast

+0

delegateView 메소드의 구현을 보여주세요. –

0

는 불완전하지만, 나는로드를 얻지 :

$html = $this->delegateView(
     [ 
      'Content-Type'  => 'application/pdf', 
      'Content-Disposition' => sprintf('attachment; filename="%s"', $filename), //$pdf->Output($filename,'I'), 
      'viewParameters' => [ 
//variables being sent to the template here 
       ] 
     ] 
    ); 
    $pdf->writeHTMLCell($w = 250, $h = 200, $x = '', $y = '', $html, $border = 0, '', $fill = 0, $reseth = true, $align = 'center', $autopadding = true); 
    return new Response($pdf->Output($filename,'I')); 

} 

} 

그러나, 그것은 아직 JS 렌더링하지 않고

HTTP/1.0 200 OK 캐시 제어 : 노 캐시

헤더가 맨 위에 있습니다. 진행중인 작업.

관련 문제