본문 바로가기

IT/back-end

FreeHtmltoPDF 무료 HTML to PDF 변환 소스

반응형

무료 HTML to PDF 변환 소스

HTML을 PDF변환을 할수있는 여러 오픈소스들 다 적용해보았다. 

한글변환, CSS 적용, 이미지적용 등 모든 요건을 완벽하게 처리가능한 오픈소스는 존재하지않았다.


org.w3c.tidy를 이용해 html -> xhtml로 변환 flying saucer를 이용해 xhtml -> pdf로 변환 처리했다.

적용되는 CSS는 css-inline 툴로 inline 처리하고 폰트는 예제 class를 보면 된다.

이미지 처리는 request 자체가 img인것으로 바로 처리되나 request가 doc이고 response가 img 인경우 base64인코딩으로 처리했다.

유료라이센스도 정상적으로 잘되는 애가 없다. itext5,7은 잘되는지 모르겠으나

본인은 돈을 아끼려는 회사를 위해 itext2버전을 사용했다.

모르겠지 그들은.




간단 참조 코드:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
 
import org.w3c.tidy.Tidy;
import org.xhtmlrenderer.pdf.ITextRenderer;
 
import com.lowagie.text.pdf.BaseFont;
 
public class FreeHtmlToPdf {
 
    
    public static void main(String[] args) throws Exception {
        File file = new File("asd.html");
        InputStream is = null;
        try
        {
          is = new FileInputStream(file);
        }
        catch (FileNotFoundException e)
        {
          e.printStackTrace();
        }
        StringWriter sw = new StringWriter();
        StringBuffer sb = sw.getBuffer();
        Tidy tidy = new Tidy();
        tidy.setQuiet(false);
        tidy.setShowWarnings(true);
        tidy.setInputEncoding("UTF-8");
        tidy.setOutputEncoding("UTF-8");
        
        tidy.setForceOutput(true);
        tidy.parse(is, sw);
        
        String outputFile = "asd.pdf";
        OutputStream os = new FileOutputStream(outputFile);
        
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocumentFromString(sb.toString());
        renderer.getFontResolver().addFont("notokr-regular.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        renderer.layout();
        renderer.createPDF(os, false);
        
        renderer.setDocumentFromString(sb.toString());
        renderer.getFontResolver().addFont("notokr-regular.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        renderer.layout();
        renderer.writeNextDocument();
        
        renderer.finishPDF();
        os.close();
    }
}
cs

github링크: https://github.com/devjeonghun/freeHtmlToPdf

반응형

'IT > back-end' 카테고리의 다른 글

스프링부트 (웹소켓, 로그 Appender)  (0) 2019.04.22
CGV 자동예매 봇  (13) 2019.04.22
Samsung Pass 삼성패스 JAVA 자바  (0) 2018.12.27