This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository faxtomail. See http://git.codelutin.com/faxtomail.git commit 77f666a816343575e3197c4de8796809986f2f8f Author: Kevin Morin <morin@codelutin.com> Date: Mon Mar 2 15:55:44 2015 +0100 fixes #6753 Les emails trop larges sont tronqués --- .../services/service/EmailServiceImpl.java | 75 ++++++++++++++++++++-- .../services/service/EmailServiceTest.java | 29 ++++++--- faxtomail-ui-swing/pom.xml | 6 ++ .../src/license/THIRD-PARTY.properties | 9 ++- pom.xml | 8 ++- 5 files changed, 111 insertions(+), 16 deletions(-) diff --git a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java index c782dd0..51e9a8f 100644 --- a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java +++ b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java @@ -48,10 +48,13 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; +import com.itextpdf.text.Image; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; +import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfWriter; import gui.ava.html.Html2Image; +import gui.ava.html.renderer.ImageRenderer; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.io.FileUtils; @@ -85,6 +88,8 @@ import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import org.xhtmlrenderer.pdf.ITextRenderer; import javax.activation.DataHandler; @@ -2120,10 +2125,70 @@ public class EmailServiceImpl extends FaxToMailServiceSupport implements EmailSe } } - Html2Image image = Html2Image.fromHtml(content); - //ImageRenderer imageRenderer = image.getImageRenderer(); - //imageRenderer.saveImage(os, true); - org.w3c.dom.Document doc = image.getParser().getDocument(); + Html2Image html2Image = Html2Image.fromHtml(content); + ImageRenderer imageRenderer = html2Image.getImageRenderer().setWidth((int) PageSize.A4.getWidth()); + org.w3c.dom.Document doc = html2Image.getParser().getDocument(); + + ByteArrayOutputStream ooo = new ByteArrayOutputStream(); + imageRenderer.saveImage(ooo, true); + Image image = Image.getInstance(ooo.toByteArray()); + + float width = image.getWidth(); + float height = image.getHeight(); + + // get the format of the page + Rectangle format = PageSize.A4; + if (width > PageSize.A4.getWidth() && width <= PageSize.A4.getHeight()) { + if (height <= PageSize.A4.getWidth()) { + format = PageSize.A4.rotate(); + + } else { + format = PageSize.A3; + } + } + if (width > PageSize.A3.getWidth() && width <= PageSize.A3.getHeight()) { + if (height <= PageSize.A3.getWidth()) { + format = PageSize.A3.rotate(); + + } else { + format = PageSize.A2; + } + } + if (width > PageSize.A2.getWidth() && width <= PageSize.A2.getHeight()) { + if (height <= PageSize.A2.getWidth()) { + format = PageSize.A2.rotate(); + + } else { + format = PageSize.A1; + } + } + if (width > PageSize.A1.getWidth() && width <= PageSize.A1.getHeight()) { + if (height <= PageSize.A1.getWidth()) { + format = PageSize.A1.rotate(); + + } else { + format = PageSize.A0; + } + } + if (width > PageSize.A0.getWidth()) { + format = PageSize.A0.rotate(); + } + + Node style = doc.createElement("style"); + style.setTextContent("@page { size: " + format.getWidth() + "px " + format.getHeight() + "px; }"); + NodeList heads = doc.getElementsByTagName("head"); + Node head; + if (heads.getLength() > 0) { + head = heads.item(0); + + } else { + head = doc.createElement("head"); + Node html = doc.getDocumentElement(); + html.appendChild(head); + } + head.appendChild(style); + +// FileUtils.write(new File("/tmp/test.html"), doc.toString()); // convert to pdf ITextRenderer renderer = new ITextRenderer(); @@ -2142,7 +2207,7 @@ public class EmailServiceImpl extends FaxToMailServiceSupport implements EmailSe result.setAddedByUser(false); } catch (OutOfMemoryError | DocumentException er) { - // certains mails (spam) très compliqué ne peuvent pas être convertit en images + // certains mails (spam) très compliqués ne peuvent pas être convertit en images if (log.isWarnEnabled()) { log.warn("Can't convert html content to pdf", er); } diff --git a/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java b/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java index c1647c3..83b1732 100644 --- a/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java +++ b/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java @@ -24,7 +24,6 @@ package com.franciaflex.faxtomail.services.service; * #L% */ -import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; import com.franciaflex.faxtomail.persistence.entities.DemandStatus; import com.franciaflex.faxtomail.persistence.entities.Email; @@ -35,9 +34,6 @@ import com.franciaflex.faxtomail.persistence.entities.Range; import com.franciaflex.faxtomail.persistence.entities.SearchFilter; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.apache.commons.mail.util.MimeMessageUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -45,15 +41,10 @@ import org.nuiton.topia.persistence.TopiaEntities; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; -import javax.mail.MessagingException; -import javax.mail.internet.MimeMessage; import java.io.File; -import java.io.FileReader; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -222,4 +213,24 @@ public class EmailServiceTest extends AbstractFaxToMailServiceTest { Assert.assertEquals(600, entry.getValue()[1].longValue()); // NPE : Assert.assertEquals(600, entry.getValue()[2].longValue()); } + +// @Test +// public void testConvertHTMLToPdf() { +// +// try { +// File email = new File("src/test/resources/email.txt"); +// String emailContent = FileUtils.readFileToString(email); +// MimeMessage message = MimeMessageUtils.createMimeMessage(null, emailContent); +// +// ArrayList<Attachment> attachments = new ArrayList<>(); +// String htmlContent = service.decomposeMultipartEmail(attachments, message); +// +// Attachment attachment = service.convertHTMLToPdf(attachments, htmlContent, "test"); +// Files.copy(attachment.getOriginalFile().getFile(), new File("/tmp/test.pdf")); +// +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// } } diff --git a/faxtomail-ui-swing/pom.xml b/faxtomail-ui-swing/pom.xml index 061158a..ba1bdcc 100644 --- a/faxtomail-ui-swing/pom.xml +++ b/faxtomail-ui-swing/pom.xml @@ -273,6 +273,12 @@ <scope>runtime</scope> </dependency> + <dependency> + <groupId>com.twelvemonkeys.imageio</groupId> + <artifactId>imageio-jpeg</artifactId> + <scope>runtime</scope> + </dependency> + </dependencies> <build> diff --git a/faxtomail-ui-swing/src/license/THIRD-PARTY.properties b/faxtomail-ui-swing/src/license/THIRD-PARTY.properties index be2c45c..380221f 100644 --- a/faxtomail-ui-swing/src/license/THIRD-PARTY.properties +++ b/faxtomail-ui-swing/src/license/THIRD-PARTY.properties @@ -36,12 +36,19 @@ # - Public Domain # - The Apache Software License, Version 2.0 # - The H2 License, Version 1.0 +# - The MIT License # - UnboundID LDAP SDK Free Use License #------------------------------------------------------------------------------- # Please fill the missing licenses for dependencies : # # -#Wed Jan 21 10:12:40 CET 2015 +#Sun Mar 01 12:20:52 CET 2015 +com.twelvemonkeys.common--common-image--3.0.2=BSD License +com.twelvemonkeys.common--common-io--3.0.2=BSD License +com.twelvemonkeys.common--common-lang--3.0.2=BSD License +com.twelvemonkeys.imageio--imageio-core--3.0.2=BSD License +com.twelvemonkeys.imageio--imageio-jpeg--3.0.2=BSD License +com.twelvemonkeys.imageio--imageio-metadata--3.0.2=BSD License commons-codec--commons-codec--1.2=The Apache Software License, Version 2.0 commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0 dom4j--dom4j--1.6.1=BSD License diff --git a/pom.xml b/pom.xml index dd250e2..7e0a295 100644 --- a/pom.xml +++ b/pom.xml @@ -327,7 +327,7 @@ <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> - <version>5.5.2</version> + <version>5.5.5</version> </dependency> <dependency> @@ -722,6 +722,12 @@ </dependency> <dependency> + <groupId>com.twelvemonkeys.imageio</groupId> + <artifactId>imageio-jpeg</artifactId> + <version>3.0.2</version> + </dependency> + + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junitVersion}</version> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.