# DOMPDF # 사용 팁
DOMPDF 는 HTML 을 PDF 로 변환해주는 컨버터입니다.
PHP 5.0 이상에서 지원합니다.
CSS 를 지원하며, @media, @page 작업도 지원합니다.
CSS 상에서 왠만한 미디어쿼리 및 문서의 paging 기능도 지원하므로
예전에 리포트툴에 의존하던 특정기능들을 어느정도(?)는 지원할 수 있게 되었습니다.
기존의 FastReport로 작업된 출력물들을 DOMPDF로 작업을 했습니다.
툴을 별도로 설치할 필요가 없고, 기존 웹작업 하던대로 작업을 했기 때문에
출력물 또한 기존의 품질을 유지할 수 있었습니다.
처음 사용하던거라 많은 시행착오가 있었지만,
모든 툴이 다 그렇듯이 익숙함이 찾아오면서 나름 유용하게 사용했습니다.
허나 그래도 몇몇가지 문제가 존재합니다. 그러므로
사용할때 피해야할 것들과 알아두면 좋은 tip으로 남겨드립니다
1. 기반은 table 기반으로 작업하시고 css는 inline-style로 작업하는것이 좋습니다.
- 기본 div 로 작업하게 되면 경우에 따라 레이아웃이 깨지기도 합니다
- css는 inline으로 작업하셔야 합니다. 그래야 바로바로 스타일이 적용됩니다.
* 출력물이기 때문에 기본 웹 작업방식과는 조금 차이가 있습니다.
2. 이중 table (Nested Table)은 사용을 자제 하셔야 합니다.
- 간혹 페이지가 넘어갈때 이중테이블이 pdf 로 변환하지 못하는 오류가 있습니다.
- 이중 table로 작업을 하지마시고 table을 여러개 사용하는것이 좋습니다
- 이중 테이블의 경우 페이징이 되는 중간부분에서 테이블이 잘리는 경우이므로 이를 아직 처리를 못해주는것 같습니다.
3. 변환작업때 서버의 메모리 설정을 조금은 넉넉히 잡아줘야 합니다.
- html을 pdf 로 변환하는 과정에서 html량에 따라서 시간이 다소 걸릴수 있습니다.
- memory limit 및 timeout 에 빠져나갈 위험이 있으므로
데이터를 최대한 최적화로 하셔서 사용하길 권장드립니다.
4. 페이지가 넘어가는 table의 경우 page-break 속성을 넣어주십시오
- 페이징 처리 속성을 넣어야 한 페이지가 바로 다음 페이지로 넘어가게 됩니다
.page-break { page-break-after:always; }
div.page-break:last-child{ page-break-after:avoid; }
- 페이징 메기기 소스 예제 (그냥 바로 갖다 쓰셔도 됨)
<script type="text/php">
if ( isset($pdf) ) {
$size = 10;
$color = array(0,0,0);
if (class_exists('Font_Metrics')) {
$font = Font_Metrics::get_font("NanumGothic");
$text_height = Font_Metrics::get_font_height($font, $size);
$width = Font_Metrics::get_text_width("Page 1 of 2", $font, $size);
} elseif (class_exists('Dompdf\\FontMetrics')) {
$font = $fontMetrics->getFont("NanumGothic");
$text_height = $fontMetrics->getFontHeight($font, $size);
$width = $fontMetrics->getTextWidth("Page 1 of 2", $font, $size);
}
$foot = $pdf->open_object();
$w = $pdf->get_width();
$h = $pdf->get_height();
// Draw a line along the bottom
$y = $h - $text_height - 24;
$pdf->line(16, $y, $w - 16, $y, $color, 0.5);
$pdf->close_object();
$pdf->add_object($foot, "all");
$text = "{PAGE_COUNT} - {PAGE_NUM}";
// Center the text
$pdf->page_text($w / 2 - $width / 2, $y, $text, $font, $size, $color);
}
</script>
5. @page를 사용하여 문서의 폭을 결정합니다.
- @page { margin-bottom:0px; }
- 출력물은 출력 후 바인딩 처리가 많으므로 출력폭을 지정하셔야 합니다.
6. @font를 이용하여 한글지원을 잡아줍니다
- 나눔고딕 폰트를 다운로드하여 폰트를 지정해야 한글이 지원됩니다.
- @font-face{
font-family:NanumGothic;
src: url("{{ public_path('font/NanumGothic.ttf') }}");
}
이상 개인적으로 작업을 하면서
부딪혔던 문제에 대해서 나름 know-how를 정리했습니다.
리포트 툴을 설치 않아도 웹방식으로 그대로 실시간으로 출력물을 확인 할 수 있는 장점이 좋았습니다.
참고 바랍니다
'IT > Web Programming' 카테고리의 다른 글
Front-End 발전 역사와 개발 생태계 (0) | 2018.05.16 |
---|---|
[PHP]PHP 코딩 스타일 가이드 (0) | 2018.05.10 |
[javascript] Promise를 사용해봅시다. (0) | 2018.05.09 |
[javascript]라이브러리 모음 (0) | 2018.05.04 |
[크로스브라우징]익스플로러와 비익스플로러에서의 Date Object (0) | 2018.05.02 |
[CSS] font-size의 새로운 단위 [em] (0) | 2018.04.14 |
[HTML] HTML 어떻게 읽는것이 좋을까? (0) | 2018.04.13 |
Xml Web Service 를 사용하기 위한 IIS 및 ASP.NET 2.0 설정 (0) | 2018.04.09 |