Author: echatellier Date: 2014-07-04 10:28:12 +0200 (Fri, 04 Jul 2014) New Revision: 342 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/342 Log: Conversion du contenu du mail en pdf Modified: trunk/faxtomail-ui-web/pom.xml trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java trunk/pom.xml Modified: trunk/faxtomail-ui-web/pom.xml =================================================================== --- trunk/faxtomail-ui-web/pom.xml 2014-07-04 08:25:56 UTC (rev 341) +++ trunk/faxtomail-ui-web/pom.xml 2014-07-04 08:28:12 UTC (rev 342) @@ -292,8 +292,14 @@ <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> </dependency> - + <dependency> + <groupId>org.xhtmlrenderer</groupId> + <artifactId>flying-saucer-pdf-itext5</artifactId> + <scope>compile</scope> + </dependency> + + <dependency> <groupId>gui.ava</groupId> <artifactId>html2image</artifactId> <exclusions> @@ -303,13 +309,10 @@ </exclusion> </exclusions> </dependency> - - <!-- Mise à jour de la dependance de html2image --> + <dependency> - <groupId>org.xhtmlrenderer</groupId> - <artifactId>flying-saucer-core</artifactId> - <version>9.0.6</version> - <scope>runtime</scope> + <groupId>junit</groupId> + <artifactId>junit</artifactId> </dependency> </dependencies> Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-07-04 08:25:56 UTC (rev 341) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-07-04 08:28:12 UTC (rev 342) @@ -26,11 +26,9 @@ import static org.nuiton.i18n.I18n.t; import gui.ava.html.Html2Image; -import gui.ava.html.renderer.ImageRenderer; +import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; @@ -71,6 +69,7 @@ import org.quartz.DisallowConcurrentExecution; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; +import org.xhtmlrenderer.pdf.ITextRenderer; import com.franciaflex.faxtomail.FaxToMailApplicationContext; import com.franciaflex.faxtomail.FaxToMailConfiguration; @@ -640,12 +639,13 @@ } protected Attachment convertTextToPdf(String content, String name) throws IOException, DocumentException { - File target = File.createTempFile("faxtomail-", ".tmp"); - target.deleteOnExit(); + //File target = File.createTempFile("faxtomail-", ".tmp"); + //target.deleteOnExit(); Document document = new Document(); - FileOutputStream fos = new FileOutputStream(target); - PdfWriter writer = PdfWriter.getInstance(document, fos); + //FileOutputStream fos = new FileOutputStream(target); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + PdfWriter writer = PdfWriter.getInstance(document, os); writer.open(); document.setPageSize(PageSize.A4); @@ -657,15 +657,16 @@ writer.close(); // convert content to blob - AttachmentFile attachmentFileNew = emailService.getAttachmentFileFromStream(new FileInputStream(target)); + AttachmentFile attachmentFileNew = new AttachmentFileImpl(); + attachmentFileNew.setContent(os.toByteArray()); attachmentFileNew.setFilename(name + ".pdf"); Attachment attachment = new AttachmentImpl(); attachment.setOriginalFile(attachmentFileNew); - attachment.setOriginalFileName(name); + attachment.setOriginalFileName(name + ".pdf"); attachment.setAddedByUser(false); - target.delete(); + //target.delete(); return attachment; } @@ -681,21 +682,23 @@ */ protected Attachment convertHTMLToPdf(List<Attachment> attachments, String content, String name) throws IOException { - File target = File.createTempFile("faxtomail-", ".png"); - target.deleteOnExit(); Attachment result = null; + ByteArrayOutputStream os = new ByteArrayOutputStream(); + Collection<File> fileToDelete = new ArrayList<File>(); try { content = content.replaceAll("<meta (.*?)>(</meta>)?", ""); + for (Attachment attachment : attachments) { String key = attachment.getContentId(); if (key == null) { key = attachment.getOriginalFileName(); } - + // get file content AttachmentFile attachmentFile = attachment.getOriginalFile(); File file = attachmentFile.getFile(); + fileToDelete.add(file); // replace the inline attachments with the extracted attachment file url // match les patterns: @@ -710,26 +713,41 @@ } Html2Image image = Html2Image.fromHtml(content); - ImageRenderer imageRenderer = image.getImageRenderer(); - imageRenderer.saveImage(target); + //ImageRenderer imageRenderer = image.getImageRenderer(); + //imageRenderer.saveImage(os, true); + org.w3c.dom.Document doc = image.getParser().getDocument(); + + // convert to pdf + ITextRenderer renderer = new ITextRenderer(); + renderer.setDocument(doc, null); + renderer.layout(); + renderer.createPDF(os); // convert content to blob - AttachmentFile attachmentFileNew = emailService.getAttachmentFileFromStream(new FileInputStream(target)); - attachmentFileNew.setFilename(name + ".png"); + AttachmentFile attachmentFileNew = new AttachmentFileImpl(); + attachmentFileNew.setContent(os.toByteArray()); + attachmentFileNew.setFilename(name + ".pdf"); result = new AttachmentImpl(); result.setOriginalFile(attachmentFileNew); - result.setOriginalFileName(name); + result.setOriginalFileName(name + ".pdf"); result.setAddedByUser(false); } catch (OutOfMemoryError er) { // certains mails (spam) très compliqué ne peuvent pas être convertit en images if (log.isWarnEnabled()) { - log.warn("Can't convert html content to image", er); + log.warn("Can't convert html content to pdf", er); } + } catch (DocumentException ex) { + if (log.isWarnEnabled()) { + log.warn("Can't convert html content to pdf", ex); + } + } finally { + // on supprime les fichiers avant le delete on exit pour eviter que le disque ne se remplissent trop vite + for (File file : fileToDelete) { + file.delete(); + } } - target.delete(); - return result; } } Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2014-07-04 08:25:56 UTC (rev 341) +++ trunk/pom.xml 2014-07-04 08:28:12 UTC (rev 342) @@ -630,7 +630,12 @@ <artifactId>html2image</artifactId> <version>2.0.1</version> </dependency> - + + <dependency> + <groupId>org.xhtmlrenderer</groupId> + <artifactId>flying-saucer-pdf-itext5</artifactId> + <version>9.0.6</version> + </dependency> </dependencies> </dependencyManagement>