r609 - trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util
Author: echatellier Date: 2014-09-05 14:01:37 +0200 (Fri, 05 Sep 2014) New Revision: 609 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/609 Log: Tentative de correction de l'impression pour windows Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 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-09-05 08:52:42 UTC (rev 608) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-09-05 12:01:37 UTC (rev 609) @@ -28,11 +28,18 @@ import java.awt.Component; import java.awt.Desktop; import java.awt.Font; +import java.awt.print.Book; +import java.awt.print.PageFormat; +import java.awt.print.Paper; +import java.awt.print.PrinterException; +import java.awt.print.PrinterJob; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -52,6 +59,7 @@ import javax.print.SimpleDoc; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.standard.Copies; import javax.swing.Icon; import javax.swing.JTextPane; import javax.swing.JTree; @@ -100,6 +108,8 @@ import com.google.common.base.Function; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; +import com.sun.pdfview.PDFFile; +import com.sun.pdfview.PDFPrintPage; /** * @author kmorin - morin@codelutin.com @@ -434,7 +444,10 @@ try { textStream = new FileInputStream(attachmentFile.getFile()); - result = print(textStream, defaultPrinter); + //result = print(textStream, defaultPrinter); + //result = printWithIcePdf(textStream, defaultPrinter, attachmentFile.getFile().getAbsolutePath()); + result = printWithPdfRenderer(textStream, defaultPrinter, attachmentFile.getFile().getAbsolutePath()); + } catch (IOException e) { throw new ApplicationTechnicalException( t("jaxx.application.error.cannot.print"), e); @@ -450,7 +463,10 @@ * @param inputStream stream to print * @param defaultPrinter if {@code true}, do not display print dialog and print with default printer * @return true if file has been printed, false otherwise + * + * @deprecated not working on windows */ + @Deprecated public static boolean print(InputStream inputStream, boolean defaultPrinter) { boolean result = true; try { @@ -459,6 +475,7 @@ Doc mydoc = new SimpleDoc(inputStream, flavor, null); PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); + aset.add(new Copies(1)); PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, aset); PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); @@ -477,6 +494,9 @@ } else { if (log.isDebugEnabled()) { log.debug("Automatic print on " + defaultService.getName()); + for (DocFlavor flavor2 : defaultService.getSupportedDocFlavors()) { + log.debug(String.format(" - supported flavor %s", flavor2.getMimeType())); + } } job = defaultService.createPrintJob(); } @@ -512,7 +532,54 @@ return result; } + + /** + * Imprime un attachment file. + * + * @param fis stream to print + * @param defaultPrinter if {@code true}, do not display print dialog and print with default printer + * @return true if file has been printed, false otherwise + */ + public static boolean printWithPdfRenderer(FileInputStream fis, boolean defaultPrinter, String path) { + boolean result = true; + 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); + + // 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(); + Paper paper = new Paper(); + paper.setImageableArea(0, 0, + paper.getWidth() * 2, paper.getHeight()); + pf.setPaper(paper); + + // Create Print Job + pjob.setJobName(path); + Book book = new Book(); + book.append(pages, pf, pdfFile.getNumPages()); + pjob.setPageable(book); + + // Send print job to default printer + pjob.print(); + } catch (PrinterException ex) { + if (log.isErrorEnabled()) { + log.error("can't print", ex); + } + } catch (IOException ex) { + if (log.isErrorEnabled()) { + log.error("can't print", ex); + } + } + + return result; + } + public static String getEditedFileName(String originalFileName) { return t("faxtomail.attachment.editedFile.name", originalFileName) + "-.pdf"; }
participants (1)
-
echatellier@users.forge.codelutin.com