Author: kmorin Date: 2014-11-30 14:04:47 +0000 (Sun, 30 Nov 2014) New Revision: 708 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/708 Log: fixes #6199 Certains pdf impriment des pages blanches Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java trunk/faxtomail-ui-swing/pom.xml trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java trunk/pom.xml Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-11-28 13:37:30 UTC (rev 707) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-11-30 14:04:47 UTC (rev 708) @@ -394,8 +394,8 @@ if (searchFilter.isAddGroupDemands()) { hqlForFetchStep1 += "OR E." + TopiaEntity.PROPERTY_TOPIA_ID + " IN (" + "select E2." + TopiaEntity.PROPERTY_TOPIA_ID + " FROM " + Email.class.getName() + " E " - + "LEFT OUTER JOIN E." + Email.PROPERTY_EMAIL_GROUP + " AS G " - + "LEFT OUTER JOIN G." + EmailGroup.PROPERTY_EMAIL + " AS E2 " + + "INNER JOIN E." + Email.PROPERTY_EMAIL_GROUP + " AS G " + + "INNER JOIN G." + EmailGroup.PROPERTY_EMAIL + " AS E2 " + query.toString() + ")"; } Modified: trunk/faxtomail-ui-swing/pom.xml =================================================================== --- trunk/faxtomail-ui-swing/pom.xml 2014-11-28 13:37:30 UTC (rev 707) +++ trunk/faxtomail-ui-swing/pom.xml 2014-11-30 14:04:47 UTC (rev 708) @@ -225,22 +225,14 @@ <artifactId>itextpdf</artifactId> </dependency> - <!-- for pdf printing --> <dependency> - <groupId>org.swinglabs</groupId> - <artifactId>pdf-renderer</artifactId> - </dependency> - - <dependency> <groupId>javax.media.jai</groupId> <artifactId>com.springsource.javax.media.jai.core</artifactId> - <version>1.1.3</version> </dependency> <dependency> <groupId>javax.media.jai</groupId> <artifactId>com.springsource.javax.media.jai.codec</artifactId> - <version>1.1.3</version> </dependency> <dependency> Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java 2014-11-28 13:37:30 UTC (rev 707) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java 2014-11-30 14:04:47 UTC (rev 708) @@ -102,7 +102,7 @@ String value = (String) actionGroup.getSelectedValue(); model.setSelectedComponent(PDFEditorUIModel.EditionComponent.valueOf(value)); - pdfDecoder = new PdfDecoder(true); + pdfDecoder = new PdfDecoder(); FontMappings.setFontReplacements(); ui.getContainer().addContainerListener(new ContainerListener() { @@ -349,7 +349,7 @@ } protected void displayPage(int pageNb, float previousZoom, int previousRotation) { - if (pageNb < 0 || pageNb > pdfDecoder.getPageCount()) { + if (pageNb < 1 || pageNb > pdfDecoder.getPageCount()) { return; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-11-28 13:37:30 UTC (rev 707) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-11-30 14:04:47 UTC (rev 708) @@ -24,14 +24,12 @@ import static org.nuiton.i18n.I18n.t; -import java.awt.Color; -import java.awt.Component; -import java.awt.Desktop; -import java.awt.Font; +import java.awt.*; +import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; -import java.awt.print.Book; import java.awt.print.PageFormat; import java.awt.print.Paper; +import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.io.BufferedReader; @@ -59,8 +57,6 @@ import javax.swing.*; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; -import javax.swing.text.StyleConstants; -import javax.swing.text.html.HTMLDocument; import javax.swing.text.html.HTMLEditorKit; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; @@ -68,7 +64,6 @@ import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; -import com.sun.pdfview.PDFPrintPage; import jaxx.runtime.JAXXObject; import jaxx.runtime.JAXXUtil; @@ -81,6 +76,9 @@ import org.apache.commons.lang3.SystemUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.jpedal.PdfDecoder; +import org.jpedal.exception.PdfException; +import org.jpedal.fonts.FontMappings; import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.jaxx.application.swing.util.ApplicationUIUtil; import org.nuiton.util.FileUtil; @@ -114,8 +112,6 @@ import com.sun.media.jai.codec.ImageCodec; import com.sun.media.jai.codec.ImageDecoder; import com.sun.media.jai.codec.SeekableStream; -import com.sun.pdfview.PDFFile; -//import com.sun.pdfview.PDFPrintPage; /** * @author kmorin - morin@codelutin.com @@ -500,39 +496,54 @@ */ protected static boolean printWithPdfRenderer(String printName, FileInputStream fis, boolean defaultPrinter) { boolean result = false; + final PdfDecoder pdfDecoder = new PdfDecoder(); + FontMappings.setFontReplacements(); try { - // Create a PDFFile from a File reference - FileChannel fc = fis.getChannel(); - ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); - PDFFile pdfFile = new PDFFile(bb); // Create PDF Print Page - PDFPrintPage pages = new PDFPrintPage(pdfFile); + pdfDecoder.openPdfFileFromInputStream(fis, false); - // fix fit to page - // see http://lynema.org/2010/12/29/printing-a-pdf-in-java-with-pdfrenderer - PrinterJob pjob = PrinterJob.getPrinterJob(); - PageFormat pf = pjob.defaultPage(); + pdfDecoder.setExtractionMode(0, 0, 1f); + PrinterJob printJob = PrinterJob.getPrinterJob(); + printJob.setJobName(printName); + + PageFormat pf = printJob.defaultPage(); Paper paper = new Paper(); - paper.setImageableArea(0, 0, paper.getWidth() * 2, paper.getHeight()); + paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight()); pf.setPaper(paper); - // Create Print Job - pjob.setJobName(printName); - Book book = new Book(); - book.append(pages, pf, pdfFile.getNumPages()); - pjob.setPageable(book); + printJob.setPrintable(new Printable() { + public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { + try { + if (pageIndex >= pdfDecoder.getPageCount()) { + return NO_SUCH_PAGE; + } + BufferedImage image = pdfDecoder.getPageAsImage(pageIndex + 1); + graphics.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null); + return PAGE_EXISTS; + } catch (Exception e) { + log.error("error while printing", e); + return NO_SUCH_PAGE; + } + } + }); + // Send print job to default printer - result = defaultPrinter || pjob.printDialog(); + result = defaultPrinter || printJob.printDialog(); if (result) { - pjob.print(); + printJob.print(); } - } catch (PrinterException | IOException ex) { + + } catch (PrinterException | PdfException ex) { if (log.isErrorEnabled()) { log.error("can't print", ex); } + + } finally { + log.info("finally close the pdf file"); + pdfDecoder.closePdfFile(); } return result; Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2014-11-28 13:37:30 UTC (rev 707) +++ trunk/pom.xml 2014-11-30 14:04:47 UTC (rev 708) @@ -306,15 +306,15 @@ </dependency> <dependency> - <groupId>org.swinglabs</groupId> - <artifactId>pdf-renderer</artifactId> - <version>1.0.5</version> + <groupId>javax.media.jai</groupId> + <artifactId>com.springsource.javax.media.jai.core</artifactId> + <version>1.1.3</version> </dependency> <dependency> - <groupId>org.apache.pdfbox</groupId> - <artifactId>pdfbox</artifactId> - <version>1.8.7</version> + <groupId>javax.media.jai</groupId> + <artifactId>com.springsource.javax.media.jai.codec</artifactId> + <version>1.1.3</version> </dependency> <!-- librairie Jaxx -->