0%

WKHtmlToPdf 설치하기

WKhtmlToPdf?

회사에서 진행하는 프로젝트에서 Hwp -> Image를 만드는 과정을 진행하며 찾게된 툴이다.WKHtmlToPdf는 Html을 Pdf로 변환해주는 툴이다.
이번 포스팅에서는 이것을 AMI에 설치하고, 사용하는 방법을 소개한다.


설치하기 전…

일단 진행하는 환경은 Amazon의 AMI에서 진행하였다. (CentOS-6 64bit)
다른 OS환경은 공식 홈페이지를 참고하도록 하자.


1. 의존성 설치 및 Wget 가져오기

설치 전 필요한 의존성을 설치해준다. (명령어는 가급적 Control C + Control V 조합으로..)

$ yum -y install fontconfig libXrender libXext xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi freetype libpng zlib libjpeg-turbo openssl icu

그리고 wget으로 다운을 받는다.

$ wget https://downloads.wkhtmltopdf.org/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz –dns-timeout=5 –connect-timeout=5 tar -xJf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

bin으로 이동 처리를 해준다.

$ cp wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf
$ cp wkhtmltox/bin/wkhtmltoimage /usr/local/bin/wkhtmltoimage

2. 실행

특별히 환경변수를 안잡아도 터미널에서 아래와 같이 명령어를 수행하면 실행이 될 것이다.

$> wkhtmltopdf

이를 통해서 아래와 같이 URL에서 정보를 가져와서 변환할 수 있다.

$> wkhtmltopdf http://www.naver.com ./naver.pdf

또는 자신의 로컬 경로에 저장된 html도 변환이 가능하다.

$> wkhtmltopdf ~/sample/index.xhtml ./index.pdf

xhtml 또한 잘 변환된다.


번외 1 (자바용)

Wkhtmltopdf를 Java에서 호출할 수 있는 것이 있다.
이곳을 참고하였다.

물론 WKHtmltopdf가 시스템에 설치되어 있어야 한다.

먼저 gradle에서 저장소와 의존성을 추가한다.

1
2
3
4
5
6
7
8
9
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}

dependencies {
compile 'com.github.jhonnymertz:java-wkhtmltopdf-wrapper:1.1.5-RELEASE'
}

위와 같이 추가 후 자바단에서는 아래와 같이 호출을 하여 사용한다.

1
2
3
4
5
6
7
8
//객체 생성
Pdf pdf = new Pdf();
pdf.addPageFromUrl(inputHtmlPath);

try { pdf.saveAs(outputPath); } //Html을 pdf로 변환 처리하는 로직
catch (IOException e) { throw new Xhtml2PdfChangeException(this, "Change fail xhtml to pdf. IOException message = " + e.getMessage()); }
catch (InterruptedException e) { throw new Xhtml2PdfChangeException(this, "Change fail xhtml to pdf. InterruptedException message = " + e.getMessage()); }
return outputPath;

저기에서 inputHtmlPath는 html이 존재하는 경로 String 객체이며,
save에는 결과물(pdf)이 저장될 경로 String 객체를 전달하면 된다.
예외 처리의 경우 자신의 환경에 맞게끔 알맞게 설정해주면 된다.

번외 2 (한글이 깨지는 문제)

변환한 PDF의 한글 내용이 깨지는 경우가 있다.
이는 시스템에 폰트가 없어서 발생하는 문제이다.
폰트만 설치하면 깔끔하게 처리된다.
아래는 나눔폰트를 설치하여 적용하는 예시이다.

$ wget http://static.campaign.naver.com/0/hangeul/renew/download/NanumFont_TTF.zip
$ unzip Nanum*.zip
$ mkdir /usr/share/fonts/nanumfont
$ mv *.ttf /usr/share/fonts/nanumfont


참고

아래 사이트들에서 참고하였다.