pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.9</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-pdfa</artifactId> <version>5.5.9</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-xtra</artifactId> <version>5.5.9</version> </dependency> <dependency> <groupId>com.itextpdf.tool</groupId> <artifactId>xmlworker</artifactId> <version>5.5.9</version> </dependency> | cs |
html
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 | <!DOCTYPE html> <html> <head> <style> thead {color:green;} tbody {color:blue;} tfoot {color:red;} table, th, td { border: 1px solid black; } </style> </head> <body> <table> <colgroup> <col width="30%"> <col width="70%"> </colgroup> <thead> <tr> <th>Month</th> <th>Savings</th> </tr> </thead> <tfoot> <tr> <td>Sum</td> <td>$180</td> </tr> </tfoot> <tbody> <tr> <td>January</td> <td>$100</td> </tr> <tr> <td>February</td> <td>$80</td> </tr> </tbody> </table> <p><b>Tip:</b> The thead, tbody, and tfoot elements will not affect the layout of the table by default. However, you can use CSS to style these elements.</p> </body> </html> | cs |
다음과 같이 있을 때 <col>는 itext에서 오류로 뱉어냅니다. 마찬가지로 <img>나 <input>도 동일합니다.
그래서 <colgroup>그룹을 제외한 <thead><tbody>등 필요한 부분만 가져옵니다.
(*위는 예시일 뿐 제 테이블에는 <tbody>만 있습니다.)
js에서 보낼 html
1 2 3 4 5 6 | var html = "<div class='boardWrite'>"; $('.printView>tbody').each(function(idx, el) { console.log($(this).html()); html+="<table class='tableStyle'>"+$(this).html()+"</table>"; }); html+="</div>"; | cs |
css를 적용 시킬 예정이라면 실제 css class나 id를 적어주세요.
참고로 iText에서 <input ~ />나 <col /> <br /> 같은 tag는 오류가 발생됩니다. (그래서 <tbody> 아래만 가져왔어요)
그리고 js에서 controller로 form이나 ajax로 데이터를 보내주세요.
저는 json을 통해 ajax로 보냈습니다.
.java
1 2 3 4 5 6 7 | //파일을 만들어 주세요. File file = new File(savePath + saveName); //css String css = request.getSession().getServletContext().getRealPath("/css/content.css"); //font String font = request.getSession().getServletContext().getRealPath("/font/printFont.ttf"); | cs |
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 | try { // 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, new FileOutputStream(file)); writer.setInitialLeading(12.5f); // 파일 다운로드 설정 response.setContentType("application/pdf"); response.setHeader("Content-Transper-Encoding", "binary"); response.setHeader("Content-Disposition", "inline; filename=" + save); // Document 오픈 document.open(); XMLWorkerHelper helper = XMLWorkerHelper.getInstance(); // CSS CSSResolver cssResolver = new StyleAttrCSSResolver(); CssFile cssFile = helper.getCSS(new FileInputStream(scss)); cssResolver.addCss(cssFile); // HTML, 폰트 설정 XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); fontProvider.register(sfont, "MalgunGothic"); // MalgunGothic은 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")); // 폰트 설정에서 별칭으로 줬던 "MalgunGothic"을 html 안에 폰트로 지정한다. String sHtml = "<html><head></head><body style='font-family:MalgunGothic;'>" + map.get("printData").toString() + "</body></html>"; // byte[] bHtml = (map.get("printData").toString()).getBytes(); xmlParser.parse(new StringReader(sHtml)); document.close(); writer.close(); } catch (Exception e) { throw e; } | cs |
참고사이트
http://zero-gravity.tistory.com/251
http://www.rgagnon.com/javadetails/java-html-to-pdf-using-itext.html
★이미지는 base64로!!!
다시 view에서 pdf 파일을 여는 것은 진행중 입니다.
참고
http://developers.itextpdf.com/question/how-convert-html-table-pdf
'웹' 카테고리의 다른 글
jqgrid colmodel select/checkbox/datepicker (0) | 2016.07.05 |
---|---|
jqgrid cell value danyamic/calcuate (0) | 2016.07.05 |
jqGrid 모음 (0) | 2016.05.19 |
jqgrid 위키 (0) | 2016.04.06 |
spring mvc+tiles에서 매핑 실행하기 (0) | 2016.04.06 |