PHP로 PDF를 만들 때는 wkhtmltopdf + snappy로 싸워라.

7646 단어 PHPPDFwkhtmltopdf

! ! 최신 정보는 아래 기사를 참조하십시오! !



PHP로 PDF를 작성할 때는 phpwkhtmltopdf로 싸워 [2016년도판]

HTML을 PDF로 변환하는 접근 방식의 어려움



· 인라인 CSS 만 허용
· 원래 CSS2.0 계열의 속성 만 허용
· 셀렉터로 요소를 좁힐 수 없다

mPDF, 주로 너의 일이다.

wkhtmltopdf와 snappy로 행복해지자



wkhtmltopdf



htp // wkhtml 및 pdf. rg/
Webkit html to pdf의 약자.
이름에서 알 수 있듯이 HTML을 Webkit로 해석하여 PDF로 변환하는 Google 근제 도구입니다.
물론 HTML5도 CSS3.0도 어렵게 해석합니다.
최고감 있다.

knplabs/knp-snappy



htps : // Pac cross st. 오 rg / pa c gaze s / kn p bs / kn ps py
wkhtmltopdf를 PHP로 처리하는 래퍼 클래스입니다.
packagist로 배포됩니다.

도입 방법



CentOS 6.5(64bit판)를 상정하고 있습니다.
다른 환경의 경우 필요한 버전이 다르므로 본가 사이트 에서 적절한 wkhtmltopdf 패키지를 구하십시오.

wkhtmltopdf 설치



우선은 wkhtmltopdf의 인스톨로부터 진행해 갑니다.rpm -ivh 런타임에 오류가 발생하면 오류를 보면서 yum이 부족한 패키지를 넣으십시오.
$ cd /usr/local/src
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm
$ rpm -ivh wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm

일본어 글꼴 설치



wkhtmltopdf에는 일본어 폰트가 들어 있지 않으므로, 일본어를 통과하면 그 부분만이 하얗게 됩니다.
그래서 반드시 일본어 폰트를 별도로 설치합시다.
이번은 IPA 폰트의 신세가 되기로 하겠습니다.
ht tp // // 가파퉁 t. 가득. . jp / 이파에 x 후 t / 드 w ぉ 아 d. HTML
$ wget http://ipafont.ipa.go.jp/ipaexfont/ipaexm00201.php
$ unzip ipaexm00201.php
$ mv ipaexm00201/ /usr/share/fonts

snappy 소개



composer로 가져옵니다.
배포하려는 PHP 프로젝트에서 다음 명령을 실행합니다.composer require knplabs/knp-snappy

PDF 출력 샘플



HTML을 준비하고 Snappy의 getOutputFromHtml 메소드에 던지기만 하면 됩니다.
Smarty등의 템플릿 엔진과 조합하면, 바삭바삭과 장표의 덩굴을 짜 갈 수 있다고 생각합니다.

샘플
require './vendor/autoload.php';

$html = <<<EOF
<style>
.red {
    color:red;
    background-color: black;
    font-size:30px;
}
.opacity {
    opacity: 0.3;
}
</style>

<div class="red">
    <p>祝ってやる</p>
    <p>祝ってやる</p>
    <p>祝ってやる</p>
    <p>祝ってやる</p>
    <p class="opacity">祝ってやる</p>
    <p>祝ってやる</p>
    <p>祝ってやる</p>
    <p>祝ってやる</p>
    <p class="opacity">祝ってやる</p>
    <p>祝ってやる</p>
    <p>祝ってやる</p>
</div>
EOF;

// wkhtmltopdfの位置をコンストラクタに渡す
$pdf = new Knp\Snappy\Pdf('/usr/local/bin/wkhtmltopdf');

// encoding = utf-8をセット
$pdf->setOption('encoding', 'utf-8');

// PDFをブラウザに出力
header("Content-Type: application/pdf");
echo $pdf->getOutputFromHtml($html);



CSS3의 속성인 opacity도 올바르게 해석되어 있다는 것을 알 수 있습니다.

확장해도 좀 편리하게



pdf.php
class Pdf extends \Knp\Snappy\Pdf
{
    // 初期値にwkhtmltopdfの位置を登録、エンコード設定をUTF-8に変更
    public function __construct($binary = '/usr/local/bin/wkhtmltopdf', array $options = [], array $env = null)
    {
        parent::__construct($binary, $options, $env);
        $this->setOption('encoding', 'utf-8');
    }

    // headerの出力も自動で行う
    public function output($html)
    {
        header("Content-Type: application/pdf");
        return $this->getOutputFromHtml($html);
    }
}

example
echo (new Pdf)->output($html);

사용상의 주의점



htps : // 기주 b. 이 m / wkhtml, pdf / wkhtml 및 pdf / 이스에 s / 1524
wkhtmltopdf는 테이블을 사용하면, 2페이지째 이후에도 자동으로 헤더를 부여해 줍니다만, 그것이 굉장한 기세로 어긋나거나 다음의 열과 쓰거나 합니다.
이 스타일을 부여하면 해결할 수 있습니다.
tr {
    page-break-inside: avoid;
}

요약



어쨌든 어떤 쓰는 법을 해도 해석해 주므로 이제 PDF는 무서워하지 않습니다.
PDF 출력 기능의 티켓을 끊어 다른 사람에게 돌려보내는 것은 이제 그만하자.
이제 그만하자

좋은 웹페이지 즐겨찾기