JAVA

itext이용해서 pdf파일 만드는 샘플 소스

질주하는구 2016. 10. 25. 16:45

아래의 소스 처럼 pdf를 만드는 소스를 작업 하게 되면 한글 및 css때문에 처리에 어려움이 있습니다.

css도 제약이 많아서 우선 아래와 같이 xml형식으로 처리 하는 경우 태그를 닫는건 잘 찾아서 처리 해줘야 합니다. 요즘에는 소스 코딩을 html5로 하니까... 태그를 안 닫는 경우가 많아 관련 부분 작업이 필요 합니다. 한글은 font파일로 해결 합니다.  

pdf.css
다운로드

 

public static void main(String[] args) throws Exception {
	// Document 생성
	Document document = new Document(PageSize.A4, 50, 50, 50, 50); // 용지 및 여백 설정
		  
	// PdfWriter 생성
	PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("D:/테스트/test.pdf")); // 바로 다운로드.
	//PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream());
	writer.setInitialLeading(12.5f);
	  
	// Document 오픈
	document.open();
	XMLWorkerHelper helper = XMLWorkerHelper.getInstance();
		  
	// CSS
	CSSResolver cssResolver = new StyleAttrCSSResolver();
	CssFile cssFile = helper.getCSS(new FileInputStream("D:/테스트/pdf.css"));
	cssResolver.addCss(cssFile);
		  
	// HTML, 폰트 설정
	XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
	fontProvider.register("D:/테스트/NanumGothic-Regular.ttf", "NanumGothic"); // MalgunGothic은 alias,
	CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
	  
	HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
	htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
	  
	// Pipelines
	PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
	HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
	CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
	  
	XMLWorker worker = new XMLWorker(css, true);
	XMLParser xmlParser = new XMLParser(worker, Charset.forName("UTF-8"));
	  
	String htmlStr = "html태그 여기에 작성해서 처리 한글이 처리 안되면 폰트가 안맞아서 그러는거니 아래 처럼 폰트를 임의로 수정";
	 
	htmlStr = htmlStr.replaceAll("<br>", "<br>");
	htmlStr = htmlStr.replaceAll("rgb\\(0, 0, 0\\);", "");
	htmlStr = htmlStr.replaceAll("font-family: 굴림;", "font-family: NanumGothic;");
	htmlStr = htmlStr.replaceAll("font-family: 굴림체;", "font-family: NanumGothic;");
	htmlStr = htmlStr.replaceAll("img src=\"/", "img src=\"http://xxxxxxxxxx/");
	htmlStr = htmlStr.replaceAll(".*","");
	 
	//이미지 태그 안닫힌 태그들 찾아서 닫는 작업 진행
	Pattern pattern  =  Pattern.compile("</p><img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>");
	Matcher match = pattern.matcher(htmlStr);
	while(match.find()){
		String imgTag   = match.group();
		String imgTag2  = imgTag.replaceAll(">", "/>");
		htmlStr             = htmlStr.replaceAll(imgTag, imgTag2);
	}
			Pattern pattern2  =  Pattern.compile("<col[^>]*style=[\"']?([^>\"']+)[\"']?[^>]*>");
			Matcher match2 = pattern2.matcher(dataContent);
			while(match2.find()){
				String colTag       = match2.group();
				String colTag2  = colTag.replaceAll(">", "/>");
				dataContent         = dataContent.replaceAll(colTag, colTag2);
			}
	StringReader strReader = new StringReader(htmlStr);
	xmlParser.parse(strReader);
	  
	document.close();

}
반응형