PHP로 PDF를 작성할 때는 phpwkhtmltopdf로 싸움 [2016년도판]
8854 단어 PHPPDFwkhtmltopdf
PDF는 여전히 어려움
브라우저의 인쇄 기능에 PDF 변환이 구현되어 오랜, 기원 2016년.
지금도 아직 여러가지 가려움에 밀린 PHPer들의 불모한 싸움은 계속되고 있습니다.
벌써 해의 세입니다만 내년도 PDF와 싸워 가기 위한 정보를 전달합니다.
wkhtmltopdf와 phpwkhtmltopdf로 행복해지자
wkhtmltopdf
htp // wkhtml 및 pdf. rg/
HTML을 Webkit로 해석하여 PDF로 변환하는 Google 근제 도구입니다.
HTML5도 CSS3도 어렵게 해석합니다.
2016년 12월 현재 최신 버전은 0.12.4입니다.
mikehaertl/phpwkhtmltopdf
htps : // Pac cross st. rg / pac 게이 s / 미케하에 rtl / phpwkhtml 및 pdf
wkhtmltopdf를 PHP로 처리하는 래퍼 클래스입니다.
packagist로 배포됩니다.
도입 방법
wkhtmltopdf는 64bit 버전의 Linux용 바이너리를 사용합니다.
배포 환경은 CentOS 6.5 (64bit 버전)의 가정입니다.
다른 환경의 경우 본가 사이트에서 적절한 버전을 구하십시오.
또한 이미 composer를 도입하고 있는 프로젝트를 전제로 하여 이야기를 진행합니다.
wkhtmltopdf 설치
우선은 wkhtmltopdf의 인스톨로부터 진행해 갑니다.
이번 이용하는 버전은 0.12.4입니다.
$ cd /usr/local/bin
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
$ xz -dv wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
$ tar -xf wkhtmltox-0.12.4_linux-generic-amd64.tar
위의 작업을 마치면 wkhtmltox
디렉터리가 압축 해제됩니다.
실행 파일의 전체 경로는 /usr/local/bin/wkhtmltox/bin/wkhtmltopdf
입니다.
버전 점검 명령을 실행하여 wkhtmltopdf를 확인합니다.
$ /usr/local/bin/wkhtmltox/bin/wkhtmltopdf --version
wkhtmltopdf 0.12.4 (with patched qt)
※ 대개 이하의 패키지가 부족하게 화나므로, 추가로 인스톨 해 주세요
$ yum install -y libXrender libXext
일본어 글꼴 설치
wkhtmltopdf에는 일본어 폰트가 들어 있지 않으므로, 일본어를 통과하면 그 부분만이 하얗게 됩니다.
반드시 일본어 폰트를 별도로 설치합시다.
이번은 IPA 폰트의 신세가 되기로 하겠습니다.
ht tp // // 가파퉁 t. 가득. . jp/이파에 x후 t/도 w응아 d. HTML
$ wget http://dl.ipafont.ipa.go.jp/IPAexfont/IPAexfont00301.zip
$ unzip IPAexfont00301.zip
$ mv IPAexfont00301 /usr/share/fonts
mikehaertl/phpwkhtmltopdf 설치
composer로 설치합니다.
배포하려는 프로젝트에서 다음 명령을 실행합니다.
$ composer require mikehaertl/phpwkhtmltopdf
PDF 출력 샘플
mikehaertl\wkhtmlto\Pdf를 인스턴스화하고 addPage()
HTML을 던지면 페이지가 추가됩니다.
HTML 파일의 위치를 전체 경로로 전달할 수도 있습니다.
send()
를 두드리면 브라우저에 PDF가 표시됩니다.
또한 send('xxx.pdf')
와 같이 첫 번째 인수를 지정하면 정의한 파일 이름으로 PDF가 다운로드됩니다.
pdf.phprequire './vendor/autoload.php';
$html = <<<EOF
<!DOCTYPE html>
<html>
<style>
body {
padding: 7px;
background-color: black;
}
.red {
color: red;
font-size: 50px;
}
.opacity {
opacity: 0.3;
}
</style>
<body>
<div class="red">
<p>PDF化してください!</p>
<p class="opacity">何でもしますから!</p>
</div>
</body>
</html>
EOF;
use mikehaertl\wkhtmlto\Pdf;
$pdf = new Pdf([
// バイナリの位置とエンコード形式
'binary' => '/usr/local/bin/wkhtmltox/bin/wkhtmltopdf',
'encoding' => 'utf-8',
// 以下の指定があるとPDFをページ端まで利用できる
'margin-top' => 0,
'margin-right' => 0,
'margin-bottom' => 0,
'margin-left' => 0,
'no-outline',
]);
// ページを追加
$pdf->addPage($html);
// ブラウザにPDFを表示
$pdf->send();
확장하고 편리하게
바이너리의 위치와 인코딩 형식을 초기 설정.
pdf.phpuse mikehaertl\wkhtmlto\Pdf as BasePdf;
class Pdf extends BasePdf
{
const DEFAULT_OPTIONS = [
'binary' => '/usr/local/bin/wkhtmltox/bin/wkhtmltopdf',
'encoding' => 'utf-8',
];
public function __construct($options = null)
{
$this->setOptions(self::DEFAULT_OPTIONS);
parent::__construct($options);
}
}
example.php(new Pdf($html))->send();
사용상의 주의점
htps : // 기주 b. 이 m / wkhtml, pdf / wkhtml 및 pdf / 이스에 s / 1524
wkhtmltopdf는 테이블을 사용하면, 2페이지째 이후에도 자동으로 헤더를 부여해 줍니다만,
그것이 어긋나거나 다음 열과 쓰면서 디자인이 크게 무너집니다.
이 스타일을 부여하면 해결할 수 있습니다.
style.csstr {
page-break-inside: avoid;
}
요약
이전에 쓴 이쪽의 기사로부터 1년이 지나, 여러가지 변경이 볼 수 있는 개정판이었습니다.
PHP로 PDF를 만들 때는 wkhtmltopdf + snappy로 싸워라.
v 0.12.3에서 wkhtmltopdf 설치 방법이 변경되었으며 아카이브를 압축 해제하고 배치 할 수 있습니다.
IPA 폰트가 이전의 URL에서는 다운로드 할 수 없게 되어 있거나,
Snappy가 팔로우하지 않았던 HTTP 헤더의 출력까지 랩핑한 phpwkhtmltopdf의 존재를 알거나.
단 1년 만에 여러가지 일어나는 것입니다.
앞으로도 PHP로 PDF를 조작하는 방법은 정기적으로 조사해 가겠습니다.
뭔가 깨달은 점이 있으면 편집 요청도 기다리고 있습니다.
Reference
이 문제에 관하여(PHP로 PDF를 작성할 때는 phpwkhtmltopdf로 싸움 [2016년도판]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/morisuke/items/88010efca9fc03466c7f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
wkhtmltopdf
htp // wkhtml 및 pdf. rg/
HTML을 Webkit로 해석하여 PDF로 변환하는 Google 근제 도구입니다.
HTML5도 CSS3도 어렵게 해석합니다.
2016년 12월 현재 최신 버전은 0.12.4입니다.
mikehaertl/phpwkhtmltopdf
htps : // Pac cross st. rg / pac 게이 s / 미케하에 rtl / phpwkhtml 및 pdf
wkhtmltopdf를 PHP로 처리하는 래퍼 클래스입니다.
packagist로 배포됩니다.
도입 방법
wkhtmltopdf는 64bit 버전의 Linux용 바이너리를 사용합니다.
배포 환경은 CentOS 6.5 (64bit 버전)의 가정입니다.
다른 환경의 경우 본가 사이트에서 적절한 버전을 구하십시오.
또한 이미 composer를 도입하고 있는 프로젝트를 전제로 하여 이야기를 진행합니다.
wkhtmltopdf 설치
우선은 wkhtmltopdf의 인스톨로부터 진행해 갑니다.
이번 이용하는 버전은 0.12.4입니다.
$ cd /usr/local/bin
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
$ xz -dv wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
$ tar -xf wkhtmltox-0.12.4_linux-generic-amd64.tar
위의 작업을 마치면 wkhtmltox
디렉터리가 압축 해제됩니다.
실행 파일의 전체 경로는 /usr/local/bin/wkhtmltox/bin/wkhtmltopdf
입니다.
버전 점검 명령을 실행하여 wkhtmltopdf를 확인합니다.
$ /usr/local/bin/wkhtmltox/bin/wkhtmltopdf --version
wkhtmltopdf 0.12.4 (with patched qt)
※ 대개 이하의 패키지가 부족하게 화나므로, 추가로 인스톨 해 주세요
$ yum install -y libXrender libXext
일본어 글꼴 설치
wkhtmltopdf에는 일본어 폰트가 들어 있지 않으므로, 일본어를 통과하면 그 부분만이 하얗게 됩니다.
반드시 일본어 폰트를 별도로 설치합시다.
이번은 IPA 폰트의 신세가 되기로 하겠습니다.
ht tp // // 가파퉁 t. 가득. . jp/이파에 x후 t/도 w응아 d. HTML
$ wget http://dl.ipafont.ipa.go.jp/IPAexfont/IPAexfont00301.zip
$ unzip IPAexfont00301.zip
$ mv IPAexfont00301 /usr/share/fonts
mikehaertl/phpwkhtmltopdf 설치
composer로 설치합니다.
배포하려는 프로젝트에서 다음 명령을 실행합니다.
$ composer require mikehaertl/phpwkhtmltopdf
PDF 출력 샘플
mikehaertl\wkhtmlto\Pdf를 인스턴스화하고 addPage()
HTML을 던지면 페이지가 추가됩니다.
HTML 파일의 위치를 전체 경로로 전달할 수도 있습니다.
send()
를 두드리면 브라우저에 PDF가 표시됩니다.
또한 send('xxx.pdf')
와 같이 첫 번째 인수를 지정하면 정의한 파일 이름으로 PDF가 다운로드됩니다.
pdf.phprequire './vendor/autoload.php';
$html = <<<EOF
<!DOCTYPE html>
<html>
<style>
body {
padding: 7px;
background-color: black;
}
.red {
color: red;
font-size: 50px;
}
.opacity {
opacity: 0.3;
}
</style>
<body>
<div class="red">
<p>PDF化してください!</p>
<p class="opacity">何でもしますから!</p>
</div>
</body>
</html>
EOF;
use mikehaertl\wkhtmlto\Pdf;
$pdf = new Pdf([
// バイナリの位置とエンコード形式
'binary' => '/usr/local/bin/wkhtmltox/bin/wkhtmltopdf',
'encoding' => 'utf-8',
// 以下の指定があるとPDFをページ端まで利用できる
'margin-top' => 0,
'margin-right' => 0,
'margin-bottom' => 0,
'margin-left' => 0,
'no-outline',
]);
// ページを追加
$pdf->addPage($html);
// ブラウザにPDFを表示
$pdf->send();
확장하고 편리하게
바이너리의 위치와 인코딩 형식을 초기 설정.
pdf.phpuse mikehaertl\wkhtmlto\Pdf as BasePdf;
class Pdf extends BasePdf
{
const DEFAULT_OPTIONS = [
'binary' => '/usr/local/bin/wkhtmltox/bin/wkhtmltopdf',
'encoding' => 'utf-8',
];
public function __construct($options = null)
{
$this->setOptions(self::DEFAULT_OPTIONS);
parent::__construct($options);
}
}
example.php(new Pdf($html))->send();
사용상의 주의점
htps : // 기주 b. 이 m / wkhtml, pdf / wkhtml 및 pdf / 이스에 s / 1524
wkhtmltopdf는 테이블을 사용하면, 2페이지째 이후에도 자동으로 헤더를 부여해 줍니다만,
그것이 어긋나거나 다음 열과 쓰면서 디자인이 크게 무너집니다.
이 스타일을 부여하면 해결할 수 있습니다.
style.csstr {
page-break-inside: avoid;
}
요약
이전에 쓴 이쪽의 기사로부터 1년이 지나, 여러가지 변경이 볼 수 있는 개정판이었습니다.
PHP로 PDF를 만들 때는 wkhtmltopdf + snappy로 싸워라.
v 0.12.3에서 wkhtmltopdf 설치 방법이 변경되었으며 아카이브를 압축 해제하고 배치 할 수 있습니다.
IPA 폰트가 이전의 URL에서는 다운로드 할 수 없게 되어 있거나,
Snappy가 팔로우하지 않았던 HTTP 헤더의 출력까지 랩핑한 phpwkhtmltopdf의 존재를 알거나.
단 1년 만에 여러가지 일어나는 것입니다.
앞으로도 PHP로 PDF를 조작하는 방법은 정기적으로 조사해 가겠습니다.
뭔가 깨달은 점이 있으면 편집 요청도 기다리고 있습니다.
Reference
이 문제에 관하여(PHP로 PDF를 작성할 때는 phpwkhtmltopdf로 싸움 [2016년도판]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/morisuke/items/88010efca9fc03466c7f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ cd /usr/local/bin
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
$ xz -dv wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
$ tar -xf wkhtmltox-0.12.4_linux-generic-amd64.tar
$ /usr/local/bin/wkhtmltox/bin/wkhtmltopdf --version
wkhtmltopdf 0.12.4 (with patched qt)
$ yum install -y libXrender libXext
$ wget http://dl.ipafont.ipa.go.jp/IPAexfont/IPAexfont00301.zip
$ unzip IPAexfont00301.zip
$ mv IPAexfont00301 /usr/share/fonts
$ composer require mikehaertl/phpwkhtmltopdf
mikehaertl\wkhtmlto\Pdf를 인스턴스화하고
addPage()
HTML을 던지면 페이지가 추가됩니다.HTML 파일의 위치를 전체 경로로 전달할 수도 있습니다.
send()
를 두드리면 브라우저에 PDF가 표시됩니다.또한
send('xxx.pdf')
와 같이 첫 번째 인수를 지정하면 정의한 파일 이름으로 PDF가 다운로드됩니다.pdf.php
require './vendor/autoload.php';
$html = <<<EOF
<!DOCTYPE html>
<html>
<style>
body {
padding: 7px;
background-color: black;
}
.red {
color: red;
font-size: 50px;
}
.opacity {
opacity: 0.3;
}
</style>
<body>
<div class="red">
<p>PDF化してください!</p>
<p class="opacity">何でもしますから!</p>
</div>
</body>
</html>
EOF;
use mikehaertl\wkhtmlto\Pdf;
$pdf = new Pdf([
// バイナリの位置とエンコード形式
'binary' => '/usr/local/bin/wkhtmltox/bin/wkhtmltopdf',
'encoding' => 'utf-8',
// 以下の指定があるとPDFをページ端まで利用できる
'margin-top' => 0,
'margin-right' => 0,
'margin-bottom' => 0,
'margin-left' => 0,
'no-outline',
]);
// ページを追加
$pdf->addPage($html);
// ブラウザにPDFを表示
$pdf->send();
확장하고 편리하게
바이너리의 위치와 인코딩 형식을 초기 설정.
pdf.phpuse mikehaertl\wkhtmlto\Pdf as BasePdf;
class Pdf extends BasePdf
{
const DEFAULT_OPTIONS = [
'binary' => '/usr/local/bin/wkhtmltox/bin/wkhtmltopdf',
'encoding' => 'utf-8',
];
public function __construct($options = null)
{
$this->setOptions(self::DEFAULT_OPTIONS);
parent::__construct($options);
}
}
example.php(new Pdf($html))->send();
사용상의 주의점
htps : // 기주 b. 이 m / wkhtml, pdf / wkhtml 및 pdf / 이스에 s / 1524
wkhtmltopdf는 테이블을 사용하면, 2페이지째 이후에도 자동으로 헤더를 부여해 줍니다만,
그것이 어긋나거나 다음 열과 쓰면서 디자인이 크게 무너집니다.
이 스타일을 부여하면 해결할 수 있습니다.
style.csstr {
page-break-inside: avoid;
}
요약
이전에 쓴 이쪽의 기사로부터 1년이 지나, 여러가지 변경이 볼 수 있는 개정판이었습니다.
PHP로 PDF를 만들 때는 wkhtmltopdf + snappy로 싸워라.
v 0.12.3에서 wkhtmltopdf 설치 방법이 변경되었으며 아카이브를 압축 해제하고 배치 할 수 있습니다.
IPA 폰트가 이전의 URL에서는 다운로드 할 수 없게 되어 있거나,
Snappy가 팔로우하지 않았던 HTTP 헤더의 출력까지 랩핑한 phpwkhtmltopdf의 존재를 알거나.
단 1년 만에 여러가지 일어나는 것입니다.
앞으로도 PHP로 PDF를 조작하는 방법은 정기적으로 조사해 가겠습니다.
뭔가 깨달은 점이 있으면 편집 요청도 기다리고 있습니다.
Reference
이 문제에 관하여(PHP로 PDF를 작성할 때는 phpwkhtmltopdf로 싸움 [2016년도판]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/morisuke/items/88010efca9fc03466c7f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
use mikehaertl\wkhtmlto\Pdf as BasePdf;
class Pdf extends BasePdf
{
const DEFAULT_OPTIONS = [
'binary' => '/usr/local/bin/wkhtmltox/bin/wkhtmltopdf',
'encoding' => 'utf-8',
];
public function __construct($options = null)
{
$this->setOptions(self::DEFAULT_OPTIONS);
parent::__construct($options);
}
}
(new Pdf($html))->send();
htps : // 기주 b. 이 m / wkhtml, pdf / wkhtml 및 pdf / 이스에 s / 1524
wkhtmltopdf는 테이블을 사용하면, 2페이지째 이후에도 자동으로 헤더를 부여해 줍니다만,
그것이 어긋나거나 다음 열과 쓰면서 디자인이 크게 무너집니다.
이 스타일을 부여하면 해결할 수 있습니다.
style.css
tr {
page-break-inside: avoid;
}
요약
이전에 쓴 이쪽의 기사로부터 1년이 지나, 여러가지 변경이 볼 수 있는 개정판이었습니다.
PHP로 PDF를 만들 때는 wkhtmltopdf + snappy로 싸워라.
v 0.12.3에서 wkhtmltopdf 설치 방법이 변경되었으며 아카이브를 압축 해제하고 배치 할 수 있습니다.
IPA 폰트가 이전의 URL에서는 다운로드 할 수 없게 되어 있거나,
Snappy가 팔로우하지 않았던 HTTP 헤더의 출력까지 랩핑한 phpwkhtmltopdf의 존재를 알거나.
단 1년 만에 여러가지 일어나는 것입니다.
앞으로도 PHP로 PDF를 조작하는 방법은 정기적으로 조사해 가겠습니다.
뭔가 깨달은 점이 있으면 편집 요청도 기다리고 있습니다.
Reference
이 문제에 관하여(PHP로 PDF를 작성할 때는 phpwkhtmltopdf로 싸움 [2016년도판]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/morisuke/items/88010efca9fc03466c7f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(PHP로 PDF를 작성할 때는 phpwkhtmltopdf로 싸움 [2016년도판]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/morisuke/items/88010efca9fc03466c7f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)