본문 바로가기

카테고리 없음

html2pdf를 composer 없이 사용하기 (한글출력 포함)

 

 

 

html를 pdf로 바꿔야 해서 관련 내용을 찾아 봤습니다.

먼저 beautifulhill.tistory.com/21에서 여러 라이브러리에 대한 설명을 확인할 수 있었습니다.

여기서 저는 html2pdf를 사용해 보려고 합니다.

한글 지원이 안되는거 같습니다.

 

대부분 한글 문제는 폰트나 인코딩 관련 문제가 많아,

그부분은 수정해 주면 되지 않을까 생각 했습니다.

 

 

 

 

 

간단히 생각했는데 문제가 발생했습니다.

html2pdf는 composer 설치만 지원한다고 합니다.

 

 

 

제가 작업하는 환경인 cafe24 웹호스팅에서는 composer를 지원하지 않습니다.

include만 잘 해주면 되지 않을까 생각하고 찾아 봤습니다.

 

저와 비슷한 상황이 있는지 확인을 했는데,

만든이가 꼭 composer를 써야 한다는 댓글을 달아 주셨네요.

 

https://github.com/spipu/html2pdf/issues/262

 

 

하지만 다행히도 다른분이 친절하게

composer 없이 설치할 수 있는 방법을 알려주셨습니다.

 

먼저 html2pdf는 tcpdf를 사용하기 때문에 둘다 다운로드를 받습니다.

 

 

 

1. 다운로드

 

- html2pdf :: github.com/spipu/html2pdf

 

spipu/html2pdf

OFFICIAL PROJECT | HTML to PDF converter written in PHP - spipu/html2pdf

github.com

- tcpdf :: github.com/tecnickcom/tcpdf

 

tecnickcom/TCPDF

Official clone of PHP library to generate PDF documents and barcodes - tecnickcom/TCPDF

github.com

둘다 같은 위치에 풀어둡니다.

 

html2pdf, TCPDF 에 압축해제 했다고 가정하겠습니다.

 

 

 

2. Html2Pdf.php에 require_once 추가

 

html2pdf/src/Html2Pdf.php를 열어 

......
use Spipu\Html2Pdf\Debug\DebugInterface;
use Spipu\Html2Pdf\Debug\Debug;

require_once dirname(__FILE__) . '/config/tcpdf.config.php';
......

이 부분을

......
use Spipu\Html2Pdf\Debug\DebugInterface;
use Spipu\Html2Pdf\Debug\Debug;

require_once(dirname(__FILE__).'/../../TCPDF/tcpdf.php');
require_once(dirname(__FILE__).'/../../TCPDF/tcpdf_parser.php');
require_once(dirname(__FILE__).'/../../TCPDF/tcpdf_import.php');
require_once(dirname(__FILE__).'/../../TCPDF/tcpdf_barcodes_1d.php');
require_once(dirname(__FILE__).'/../../TCPDF/tcpdf_barcodes_2d.php');
require_once(dirname(__FILE__).'/../../TCPDF/include/tcpdf_colors.php');
require_once(dirname(__FILE__).'/../../TCPDF/include/tcpdf_filters.php');
require_once(dirname(__FILE__).'/../../TCPDF/include/tcpdf_font_data.php');
require_once(dirname(__FILE__).'/../../TCPDF/include/tcpdf_fonts.php');
require_once(dirname(__FILE__).'/../../TCPDF/include/tcpdf_images.php');
require_once(dirname(__FILE__).'/../../TCPDF/include/tcpdf_static.php');
require_once(dirname(__FILE__).'/../../TCPDF/include/barcodes/datamatrix.php');
require_once(dirname(__FILE__).'/../../TCPDF/include/barcodes/pdf417.php');
require_once(dirname(__FILE__).'/../../TCPDF/include/barcodes/qrcode.php');
require_once(dirname(__FILE__).'/Locale.php');
require_once(dirname(__FILE__).'/MyPdf.php');
require_once(dirname(__FILE__).'/CssConverter.php');
require_once(dirname(__FILE__).'/SvgDrawer.php');
require_once(dirname(__FILE__).'/Exception/Html2PdfException.php');
require_once(dirname(__FILE__).'/Exception/ImageException.php');
require_once(dirname(__FILE__).'/Exception/LongSentenceException.php');
require_once(dirname(__FILE__).'/Exception/HtmlParsingException.php');
require_once(dirname(__FILE__).'/Exception/TableException.php');
require_once(dirname(__FILE__).'/Extension/ExtensionInterface.php');
require_once(dirname(__FILE__).'/Extension/AbstractExtension.php');
require_once(dirname(__FILE__).'/Extension/Core/HtmlExtension.php');
require_once(dirname(__FILE__).'/Extension/Core/SvgExtension.php');
require_once(dirname(__FILE__).'/Parsing/Css.php');
require_once(dirname(__FILE__).'/Parsing/Html.php');
require_once(dirname(__FILE__).'/Parsing/HtmlLexer.php');
require_once(dirname(__FILE__).'/Parsing/Token.php');
require_once(dirname(__FILE__).'/Parsing/Node.php');
require_once(dirname(__FILE__).'/Parsing/TagParser.php');
require_once(dirname(__FILE__).'/Parsing/TextParser.php');
require_once(dirname(__FILE__).'/Tag/TagInterface.php');
require_once(dirname(__FILE__).'/Tag/AbstractTag.php');
require_once(dirname(__FILE__).'/Tag/AbstractHtmlTag.php');
require_once(dirname(__FILE__).'/Tag/Html/I.php');
require_once(dirname(__FILE__).'/Tag/Html/B.php');
require_once(dirname(__FILE__).'/Tag/Html/Big.php');
require_once(dirname(__FILE__).'/Tag/Html/Bookmark.php');
require_once(dirname(__FILE__).'/Tag/Html/Cite.php');
require_once(dirname(__FILE__).'/Tag/Html/Em.php');
require_once(dirname(__FILE__).'/Tag/Html/Span.php');
require_once(dirname(__FILE__).'/Tag/Html/Font.php');
require_once(dirname(__FILE__).'/Tag/Html/Label.php');
require_once(dirname(__FILE__).'/Tag/Html/Samp.php');
require_once(dirname(__FILE__).'/Tag/Html/Small.php');
require_once(dirname(__FILE__).'/Tag/Html/Strong.php');
require_once(dirname(__FILE__).'/Tag/Html/Sup.php');
require_once(dirname(__FILE__).'/Tag/Html/Sub.php');
require_once(dirname(__FILE__).'/Tag/Html/U.php');
require_once(dirname(__FILE__).'/Tag/Html/Ins.php');
require_once(dirname(__FILE__).'/Tag/Html/S.php');
require_once(dirname(__FILE__).'/Tag/Html/Del.php');
require_once(dirname(__FILE__).'/Tag/Html/Address.php');
require_once(dirname(__FILE__).'/Tag/AbstractSvgTag.php');
require_once(dirname(__FILE__).'/Tag/Svg/Circle.php');
require_once(dirname(__FILE__).'/Tag/Svg/Ellipse.php');
require_once(dirname(__FILE__).'/Tag/Svg/G.php');
require_once(dirname(__FILE__).'/Tag/Svg/Line.php');
require_once(dirname(__FILE__).'/Tag/Svg/Path.php');
require_once(dirname(__FILE__).'/Tag/Svg/Polygon.php');
require_once(dirname(__FILE__).'/Tag/Svg/Polyline.php');
require_once(dirname(__FILE__).'/Tag/Svg/Rect.php');
require_once(dirname(__FILE__).'/Debug/DebugInterface.php');
require_once(dirname(__FILE__).'/Debug/Debug.php');

require_once dirname(__FILE__) . '/config/tcpdf.config.php';
......

이렇게 변경합니다.

 

* 저는 여기서 Locale.php이 대소문자 문제가 있었는데, 비슷한 문제가 있으면 적절히 수정해 주세요.

 

 

 

3. tcpdf.config.php의 $k_path_main 수정

 

html2pdf/src/config/tcpdf.config.php를 열어

......
    /**
     * Installation path of tcpdf with composer.
     */
    $vendorFolders = array(
        dirname(dirname(dirname(__FILE__))) . '/vendor/',
        dirname(dirname(dirname(__FILE__))) . '/../../',
    );
    foreach ($vendorFolders as $vendorFolder) {
        if (file_exists($vendorFolder.'autoload.php')) {
            $k_path_main = $vendorFolder . 'tecnickcom/tcpdf/';

            break;
        }
    }

    if (!isset($k_path_main)) {
......    

이 부분을

......
    /**
     * Installation path of tcpdf with composer.
     */
//    $vendorFolders = array(
//        dirname(dirname(dirname(__FILE__))) . '/vendor/',
//        dirname(dirname(dirname(__FILE__))) . '/../../',
//    );
//    foreach ($vendorFolders as $vendorFolder) {
//        if (file_exists($vendorFolder.'autoload.php')) {
//            $k_path_main = $vendorFolder . 'tecnickcom/tcpdf/';
//
//            break;
//        }
//    }
    $k_path_main = dirname(dirname(dirname(__FILE__))) . '/TCPDF';

    if (!isset($k_path_main)) {
......    

이렇게 변경합니다.

 

 

4. 마지막으로 Html2Pdf를 require 합니다.

 

예제 파일 html2pdf/examples/example00.php를 열어

......
require_once dirname(__FILE__).'/../vendor/autoload.php';

use Spipu\Html2Pdf\Html2Pdf;
use Spipu\Html2Pdf\Exception\Html2PdfException;
use Spipu\Html2Pdf\Exception\ExceptionFormatter;

try {
......

이 부분에서

......
//require_once dirname(__FILE__).'/../vendor/autoload.php';

use Spipu\Html2Pdf\Html2Pdf;
use Spipu\Html2Pdf\Exception\Html2PdfException;
use Spipu\Html2Pdf\Exception\ExceptionFormatter;

require_once dirname(__FILE__).'/../src/Html2Pdf.php';

try {
......

이렇게 변경합니다.

 

 

5. 확인

 

이제 예제 파일를 확인하면

 

예제 pdf 파일을 확인할 수 있습니다.

 

여기까지가 composer 없이 html2pdf를 설치하는 과정이였습니다.

 

 

 

 

 

 

 

위 예제 파일에 한글, 숫자, 영문을 넣어 보겠습니다.

 

역시나... 한글이 깨져버립니다.

 

 

html2pdf의 한글 출력과 관련해서는

m.blog.naver.com/le_blanc_/221812308990

 

PHP PDF 생성/다운로드 해보기!!(한글 출력 포함)

​아마도 PDF 생성/다운로드를 가장 빠르고 무난하게 할 수 있는 방법일 것 같습니다. 다만 이 방법은 ...

blog.naver.com

여기서 확인할 수 있습니다.

 

tcpdf에서 독자규격 폰트파일을 생성한다고 하여

이분도 누군가 만든 Arial Unicode 파일을 구하여 수정 했다고 합니다.

 


저는 위에 한글 관련 내용이 생각보다

자세히 나와 있지 않아 참고만 했습니다.

 

tcpdf가 독자규격 폰트파일을 사용하다고 하여

tcpdf가 설치된 디렉토리를 살펴봤습니다.

 

font라는 디렉토리를 확인할 수 있고

그 안에는 폰트 관련 여러 파일을 확인할 수 있습니다.

 

그중에 cid0kr.php 파일을 확인할 수 있습니다.

tcpdf 버전에 따라 없을 수도 있으니 참고하세요.

 

 

 

6. 예제파일에서 한글 폰트를 추가합니다.

 

예제 파일 html2pdf/examples/example00.php를 열어

......
try {
    ob_start();
    include dirname(__FILE__).'/res/example00.php';
    $content = ob_get_clean();

    $html2pdf = new Html2Pdf('P', 'A4', 'fr');
    $html2pdf->setDefaultFont('Arial');
    $html2pdf->writeHTML($content);
    $html2pdf->output('example00.pdf');
} catch (Html2PdfException $e) {
......

이 부분을

......
try {
    ob_start();
    include dirname(__FILE__).'/res/example00.php';
    $content = ob_get_clean();

    $html2pdf = new Html2Pdf('P', 'A4', 'fr');
    $html2pdf->setDefaultFont('cid0kr');
    $html2pdf->writeHTML($content);
    $html2pdf->output('example00.pdf');
} catch (Html2PdfException $e) {
......

이렇게

$html2pdf->setDefaultFont('cid0kr');

변경해 주시면 됩니다.

 

이제 예제 파일을 확인하시면

 

한글 출력을 확인할 수 있습니다.