caTea 블로그

html convert pdf (html문서를 pdf 파일로 변환) 본문

spring(java)

html convert pdf (html문서를 pdf 파일로 변환)

ZaRas 2016. 5. 11. 17:15
반응형

필요 라이브러리

-------------------

core-renderer.jar

iText-2.0.8.jar

jtidy-r938.jar

-------------------


소스


import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.UUID;


import org.w3c.tidy.Tidy;

import org.xhtmlrenderer.pdf.ITextFontResolver;

import org.xhtmlrenderer.pdf.ITextRenderer;


import com.lowagie.text.pdf.BaseFont;


public class PdfConverter {


public static void main(String[] args) {

// TODO Auto-generated method stub

//Check to make sure everything is as it should be

    if (args.length < 2) {

    //throw new Exception("Invalid arguments. Renderer requires a path to an HTML File (source) and a path to a PDF File (destination).");

    }

        try {

            //URL.setURLStreamHandlerFactory(new DataURLStreamHandlerFactory());

        } catch (Error e) {

            System.out.println("The Stream Handler Factory is already defined. Moving on to convert to PDF.");

        }

        try {

    //Set up command line arguments

       

        String inputEncoding = "UTF-8";

        String outputEncoding = "UTF-8";

       

String inputFile = "/html경로/test.html";

String pdfFilePath = "/만들어질 pdf 경로/test4.pdf";

String fontPath = "/폰트경로/NanumGothic-Bold.ttf"; //중요하다 한글로 표현할려고하면 폰트지정은 필수다



    //Set up input file and output file for cleaning up the HTML

        InputStream is = new FileInputStream(inputFile);

        UUID uniqueID = UUID.randomUUID();

        String cleanHTMLFile = uniqueID.toString() + ".html";

        OutputStream os = new FileOutputStream(cleanHTMLFile);

        //Clean the HTML

        //This is necessary because for flyingsaucer to render the PDF, it

    //requires well-formatted XHTML or XML (XHTML in our case)

    Tidy htmlCleaner = new Tidy();

        if (!inputEncoding.isEmpty())

            htmlCleaner.setInputEncoding(inputEncoding);

        if (!outputEncoding.isEmpty())

            htmlCleaner.setOutputEncoding(outputEncoding);

    htmlCleaner.setXHTML(true);

    htmlCleaner.parse(isos);

        //Setup the inputs and outputs for the PDF rendering

    String url;

url = new File(cleanHTMLFile).toURI().toURL().toString();

OutputStream outputPDF = new FileOutputStream(pdfFilePath);


        //Create the renderer and point it to the XHTML document

        ITextRenderer renderer = new ITextRenderer();

        ITextFontResolver ifr  renderer.getFontResolver(); // 한글로 나오게 할려면 필요하다

        ifr.addFont(fontPath, BaseFont.IDENTITY_H, true);

       

        renderer.setDocument(url);

       

        //Render the PDF document

        renderer.layout();

       

        renderer.createPDF(outputPDF);


        //Close the streams (and don't cross them!)

        os.close();

        outputPDF.close();


//Clean up the temp file

File tempFile = new File(uniqueID.toString() + ".html");

tempFile.delete();

catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

        

}


}


----------------------------------------------------------------------


html 소스


<!DOCTYPE html>

<html>

<head>

<title>PDF TEST</title>




</head>

<body style="font-family: NanumGothic;">  이부분을 설정해줘야 한글로 나온다

<h2>test</h2>

<h2>테스트</h2>


</body>

</html>



-------------------------------------------------------------------------------


잡담


iText 라는 라이브러리가 있어서 써보았지만 라이센스 문제로 인해 쓸수가없었다...


이 라이브러리는 라이센스가 MIT라서 맘대로 사용가능하다(내부적으론 IText를 사용하지만.... 상관없겠지..) 


하지만 버전이 낮아 지원되는 기능은 적지만


간단한 변환은 정말 좋은거같다 끗


etc. 한글 나오게 할려고 개고생했다 ㅅㅂ



728x90

'spring(java)' 카테고리의 다른 글

fcm server side code spring java  (2) 2016.12.12
바코드 생성  (0) 2016.05.17
http 데이터 송수신 클라이언트단  (0) 2016.01.29
java mail sand example  (0) 2015.09.10
java excel paser example  (0) 2015.09.10