주의
이 문건은 과거 Hexo 블로그 (2019-01-25) 에서 이동된 문서입니다.
시간이 지남에 따라 최신 기술과 다를 수 있으니 주의 바랍니다.
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에서 저장소와 의존성을 추가한다.
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
dependencies {
compile 'com.github.jhonnymertz:java-wkhtmltopdf-wrapper:1.1.5-RELEASE'
}
위와 같이 추가 후 자바단에서는 아래와 같이 호출을 하여 사용한다.
//객체 생성
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
참고
아래 사이트들에서 참고하였다.