r612 - in trunk: . faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/print faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util f
Author: kmorin Date: 2014-09-09 16:04:41 +0200 (Tue, 09 Sep 2014) New Revision: 612 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/612 Log: refs #5743 Impossible d'imprimer correctement depuis windows fixes #5745 La fenetre de configuration de l'impression apparait derriere l'editeur de PDF Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/EditAttachmentAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenMailFolderChooserFromListAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenModalFrameAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java 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/print/AttachmentToPrintChooserUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties trunk/pom.xml Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-09-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-09-09 14:04:41 UTC (rev 612) @@ -64,6 +64,7 @@ import org.nuiton.jaxx.application.swing.action.ApplicationActionEngine; import org.nuiton.jaxx.application.swing.action.ApplicationActionFactory; import org.nuiton.jaxx.application.swing.action.ApplicationActionUI; +import org.nuiton.jaxx.application.swing.action.ApplicationUIAction; import org.nuiton.jaxx.application.swing.util.ApplicationErrorHelper; import org.nuiton.util.converter.ConverterUtil; @@ -110,6 +111,8 @@ public static final String PROPERTY_HIDE_BODY = "hideBody"; + private static final String PROPERTY_ACTION_IN_PROGRESS = "actionInProgress"; + /** * Application context (only one for all the application). */ @@ -161,6 +164,11 @@ protected boolean hideBody; /** + * Flag to know if an action is already in progress. + */ + protected boolean actionInProgress; + + /** * Message notifiers. */ protected final Set<UIMessageNotifier> messageNotifiers; @@ -607,6 +615,17 @@ } @Override + public boolean isActionInProgress(ApplicationUIAction action) { + return actionInProgress; + } + + @Override + public void setActionInProgress(ApplicationUIAction action, boolean actionInProgress) { + this.actionInProgress = actionInProgress; + firePropertyChange(PROPERTY_ACTION_IN_PROGRESS, null, actionInProgress); + } + + @Override public Color getColorBlockingLayer() { return getConfig().getColorBlockingLayer(); } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/EditAttachmentAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/EditAttachmentAction.java 2014-09-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/EditAttachmentAction.java 2014-09-09 14:04:41 UTC (rev 612) @@ -33,6 +33,7 @@ import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.PDFEditorUIModel; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; +import javax.swing.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -46,6 +47,7 @@ protected Attachment attachment; protected PDFEditorUI dialogContent; + protected JFrame frame; public EditAttachmentAction(AttachmentEditorUIHandler handler) { super(handler, false); @@ -73,17 +75,23 @@ public void postSuccessAction() { super.postSuccessAction(); MainUI mainUI = getContext().getMainUI(); - getHandler().openModalFrame(dialogContent, attachment.getOriginalFileName(), mainUI.getSize()) - .addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - } + frame = getHandler().openModalFrame(dialogContent, attachment.getOriginalFileName(), mainUI.getSize()); + frame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + } - @Override - public void windowClosed(WindowEvent e) { - dialogContent.getModel().toEntity(attachment); - } - }); + @Override + public void windowClosed(WindowEvent e) { + dialogContent.getModel().toEntity(attachment); + } + }); } + @Override + protected void releaseAction() { + super.releaseAction(); + frame.toFront(); + frame = null; + } } \ No newline at end of file Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenMailFolderChooserFromListAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenMailFolderChooserFromListAction.java 2014-09-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenMailFolderChooserFromListAction.java 2014-09-09 14:04:41 UTC (rev 612) @@ -32,6 +32,7 @@ import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUI; import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUIModel; +import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.List; @@ -45,9 +46,11 @@ protected List<DemandeUIModel> demandsToTransmit; protected MailFolderChooserUI frameContent; - + protected JFrame frame; + public OpenMailFolderChooserFromListAction(DemandeListUIHandler handler) { super(handler, false); + setActionDescription(t("faxtomail.action.openMailFolderChooser.tip")); } @Override @@ -92,6 +95,13 @@ @Override public void postSuccessAction() { super.postSuccessAction(); - getHandler().openModalFrame(frameContent, t("faxtomail.chooseMailFolder.title"), new Dimension(350, 500)); + frame = getHandler().openModalFrame(frameContent, t("faxtomail.chooseMailFolder.title"), new Dimension(350, 500)); } + + @Override + protected void releaseAction() { + super.releaseAction(); + frame.toFront(); + frame = null; + } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java 2014-09-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java 2014-09-09 14:04:41 UTC (rev 612) @@ -79,6 +79,7 @@ AbstractFaxToMailUIHandler handler = (AbstractFaxToMailUIHandler) getHandler(); Configuration config = getContext().newServiceContext().getConfigurationService().getConfiguration(); + int printedFileNb = 0; Multimap<DemandeUIModel, AttachmentFile> nonPrintedAttachment = HashMultimap.create(); notPrintableDemands = new ArrayList<DemandeUIModel>(); @@ -101,15 +102,18 @@ Email email = demandeUIModel.toEntity(); final AttachmentFile demandDetailAttachment = emailService.getEmailDetailAsAttachment(email); // print details - FaxToMailUIUtil.print(demandDetailAttachment, true); - printedFiles.add(demandDetailAttachment.getFilename()); + if (FaxToMailUIUtil.print(demandDetailAttachment, true)) { + printedFiles.add(demandDetailAttachment.getFilename()); + + } else { + nonPrintedAttachment.put(demandeUIModel, demandDetailAttachment); + } } for (AttachmentFile attachmentFile : attachmentsToPrintByDemand.get(demandeUIModel)) { if (attachmentFile != null) { boolean printable = FaxToMailUIUtil.isFileTypeEditable(attachmentFile.getFilename()); - if (printable) { - FaxToMailUIUtil.print(attachmentFile, true); + if (printable && FaxToMailUIUtil.print(attachmentFile, true)) { printedFiles.add(attachmentFile.getFilename()); } else { @@ -123,15 +127,18 @@ getContext().getCurrentUser(), new Date(), printedFiles.toArray(new String[printedFiles.size()])); + printedFileNb += printedFiles.size(); demandeUIModel.setHistory(email.getHistory()); } } // print another page for non printed attachments if (!nonPrintedAttachment.isEmpty()) { - InputStream errorPageStream = generateErrorPageStream(nonPrintedAttachment); - FaxToMailUIUtil.print(errorPageStream, true); + String errorPageContent = generateErrorPageStream(nonPrintedAttachment); + FaxToMailUIUtil.printText(errorPageContent, true); } + + handler.showInformationMessage(t("faxtomail.print.success.message", printedFileNb)); } @Override @@ -157,7 +164,7 @@ * @param nonPrintedAttachment not printed attachment list * @return input stream with content */ - protected InputStream generateErrorPageStream(Multimap<DemandeUIModel, AttachmentFile> nonPrintedAttachment) { + protected String generateErrorPageStream(Multimap<DemandeUIModel, AttachmentFile> nonPrintedAttachment) { // generate text content StringBuilder builder = new StringBuilder(); @@ -175,10 +182,6 @@ builder.append(" - " + attachmentFile.getFilename() + "\n"); } } - - // convert text content to inputstream - byte[] content = builder.toString().getBytes(Charsets.UTF_8); - InputStream is = new ByteArrayInputStream(content); - return is; + return builder.toString(); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenModalFrameAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenModalFrameAction.java 2014-09-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenModalFrameAction.java 2014-09-09 14:04:41 UTC (rev 612) @@ -27,7 +27,11 @@ import com.franciaflex.faxtomail.ui.swing.content.demande.DemandesUIHandler; import org.nuiton.jaxx.application.swing.ApplicationUI; +import javax.swing.*; import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; /** * @author Kevin Morin (Code Lutin) @@ -35,6 +39,7 @@ public abstract class SaveAndOpenModalFrameAction<FC extends ApplicationUI> extends SaveDemandeAction { protected FC frameContent; + protected JFrame frame; public SaveAndOpenModalFrameAction(DemandesUIHandler handler) { super(handler.getCurrentDemandHandler()); @@ -47,6 +52,13 @@ @Override public void postSuccessAction() { super.postSuccessAction(); - getHandler().openModalFrame(frameContent, getTitle(), getDimension()); + frame = getHandler().openModalFrame(frameContent, getTitle(), getDimension()); } + + @Override + protected void releaseAction() { + super.releaseAction(); + frame.toFront(); + frame = null; + } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java 2014-09-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java 2014-09-09 14:04:41 UTC (rev 612) @@ -147,7 +147,7 @@ openAttachmentAction.setAttachment(attachment, true); // run Internal to prevent multiple successive execution (#5668) - getContext().getActionEngine().runInternalAction(openAttachmentAction); + getContext().getActionEngine().runAction(openAttachmentAction); } public void editAttachment(Attachment attachment) { @@ -156,30 +156,23 @@ if (model.isEditable() && FaxToMailUIUtil.isFileTypeEditable(attachment.getOriginalFileName())) { editAttachmentAction.setAttachment(attachment); // run Internal to prevent multiple successive execution (#5668) - getContext().getActionEngine().runInternalAction(editAttachmentAction); + getContext().getActionEngine().runAction(editAttachmentAction); } else if (attachment.getEditedFileName() != null) { openAttachmentAction.setAttachment(attachment, false); // run Internal to prevent multiple successive execution (#5668) - getContext().getActionEngine().runInternalAction(openAttachmentAction); + getContext().getActionEngine().runAction(openAttachmentAction); } } public void removeAttachment(AttachmentItem attachmentItem) { Attachment attachment = attachmentItem.getAttachment(); - boolean hackDialog = ui.isAlwaysOnTop(); - if (hackDialog) { - ui.setAlwaysOnTop(false); - } int answer = JOptionPane.showConfirmDialog(ui, t("faxtomail.attachmentEditor.deleteAttachment.message", attachment.getOriginalFileName()), t("faxtomail.attachmentEditor.deleteAttachment.title"), JOptionPane.YES_NO_OPTION ); - if (hackDialog) { - ui.setAlwaysOnTop(true); - } if (answer == JOptionPane.YES_OPTION) { 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-09-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java 2014-09-09 14:04:41 UTC (rev 612) @@ -186,7 +186,7 @@ File file = attachmentFile.getFile(); if (!FaxToMailUIUtil.isFileAPDF(attachmentFile)) { try { - file = convertFileToPdf(file); + file = convertFileToPdf(attachmentFile); } catch (IOException e) { if (log.isErrorEnabled()) { @@ -526,70 +526,8 @@ container.updateUI(); } - public File convertFileToPdf(File file) throws IOException, DocumentException { - - AttachmentFile attachmentFile = getModel().getNotNullFile(); - File target = File.createTempFile("faxtomail-", ".tmp"); - target.deleteOnExit(); - - Document document = new Document(); - FileOutputStream fos = new FileOutputStream(target); - PdfWriter writer = PdfWriter.getInstance(document, fos); - writer.open(); - - document.setPageSize(PageSize.A4); - document.open(); - - if (FaxToMailUIUtil.isFileATxt(attachmentFile)) { - BufferedReader br = null; - try { - br = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8)); - StringBuilder text = new StringBuilder(); - while (br.readLine() != null) { - text.append(br.readLine()).append("\n"); - } - document.add(new Paragraph(text.toString())); - br.close(); - } finally { - IOUtils.closeQuietly(br); - } - - } else if (FaxToMailUIUtil.isFileATif(attachmentFile)) { - FileInputStream fis = null; - try { - fis = new FileInputStream(file); - FileChannel channel = fis.getChannel(); - ByteBuffer buffer = ByteBuffer.allocate((int) channel.size()); - channel.read(buffer); - SeekableStream stream = new ByteArraySeekableStream(buffer.array()); - String[] names = ImageCodec.getDecoderNames(stream); - ImageDecoder tifImageDecoder = ImageCodec.createImageDecoder(names[0], stream, null); - - for (int i = 0 ; i < tifImageDecoder.getNumPages() ; i++) { - RenderedImage renderedImage = tifImageDecoder.decodeAsRenderedImage(i); - java.awt.Image awtImage = PlanarImage.wrapRenderedImage(renderedImage).getAsBufferedImage(); - document.newPage(); - com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(writer, awtImage, 1.0f); - image.scaleToFit(PageSize.A4.getWidth() - document.leftMargin() - document.rightMargin(), - PageSize.A4.getHeight() - document.topMargin() - document.bottomMargin()); - document.add(image); - } - fis.close(); - } finally { - IOUtils.closeQuietly(fis); - } - - } else { - URL resource = file.toURI().toURL(); - com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(resource); - float scaler = ((document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin()) / image.getWidth()) * 100; - image.scalePercent(scaler); - document.add(image); - } - - document.close(); - writer.close(); - + public File convertFileToPdf(AttachmentFile attachmentFile) throws IOException, DocumentException { + File target = FaxToMailUIUtil.convertFileToPdf(attachmentFile); // convert content to blob FaxToMailServiceContext serviceContext = getContext().newServiceContext(); AttachmentFile attachmentFileNew = serviceContext.getEmailService().getAttachmentFileFromStream(new FileInputStream(target)); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/print/AttachmentToPrintChooserUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/print/AttachmentToPrintChooserUIHandler.java 2014-09-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/print/AttachmentToPrintChooserUIHandler.java 2014-09-09 14:04:41 UTC (rev 612) @@ -48,6 +48,8 @@ import org.nuiton.jaxx.application.swing.util.Cancelable; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; +import static org.nuiton.i18n.I18n.t; + /** * @author Kevin Morin (Code Lutin) * @@ -155,10 +157,15 @@ PrintOnDefaultPrinterAction action = new PrintOnDefaultPrinterAction(this, attachmentToPrints, false, - false); - getContext().getActionEngine().runActionAndWait(action); - showInformationMessage("faxtomail.print.success.message"); - closeFrame(); + false) { + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + closeFrame(); + } + }; + getContext().getActionEngine().runAction(action); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-09-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-09-09 14:04:41 UTC (rev 612) @@ -329,7 +329,6 @@ } }); - result.setAlwaysOnTop(true); result.setSize(dim); SwingUtil.center(parentContainer, result); result.setVisible(true); 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-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-09-09 14:04:41 UTC (rev 612) @@ -28,18 +28,25 @@ import java.awt.Component; import java.awt.Desktop; import java.awt.Font; +import java.awt.image.RenderedImage; 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.BufferedReader; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.net.URI; +import java.net.URL; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -49,6 +56,7 @@ import java.util.Map; import java.util.regex.Pattern; +import javax.media.jai.PlanarImage; import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; @@ -72,11 +80,21 @@ import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; +import com.itextpdf.text.Document; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.PageSize; +import com.itextpdf.text.Paragraph; +import com.itextpdf.text.pdf.PdfWriter; +import com.sun.media.jai.codec.ByteArraySeekableStream; +import com.sun.media.jai.codec.ImageCodec; +import com.sun.media.jai.codec.ImageDecoder; +import com.sun.media.jai.codec.SeekableStream; import jaxx.runtime.JAXXObject; import jaxx.runtime.JAXXUtil; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; +import org.apache.commons.io.Charsets; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -413,24 +431,6 @@ } } - public static Desktop getDesktopForPrint() { - - if (!Desktop.isDesktopSupported()) { - throw new ApplicationTechnicalException( - t("jaxx.application.error.desktop.print.not.supported")); - } - - Desktop desktop = Desktop.getDesktop(); - - if (!desktop.isSupported(Desktop.Action.PRINT)) { - - throw new ApplicationTechnicalException( - t("jaxx.application.error.desktop.print.not.supported")); - } - - return desktop; - } - /** * Imprime un attachment file. * @@ -440,96 +440,61 @@ */ public static boolean print(AttachmentFile attachmentFile, boolean defaultPrinter) { boolean result = false; - FileInputStream textStream = null; + FileInputStream fileInputStream = null; try { - textStream = new FileInputStream(attachmentFile.getFile()); + File file; + if (!FaxToMailUIUtil.isFileAPDF(attachmentFile)) { + file = convertFileToPdf(attachmentFile); + } else { + file = attachmentFile.getFile(); + } - //result = print(textStream, defaultPrinter); - //result = printWithIcePdf(textStream, defaultPrinter, attachmentFile.getFile().getAbsolutePath()); - result = printWithPdfRenderer(textStream, defaultPrinter, attachmentFile.getFile().getAbsolutePath()); + fileInputStream = new FileInputStream(file); + + //result = print(fileInputStream, defaultPrinter); + //result = printWithIcePdf(fileInputStream, defaultPrinter, attachmentFile.getFile().getAbsolutePath()); + result = printWithPdfRenderer(fileInputStream, defaultPrinter, file.getAbsolutePath()); - } catch (IOException e) { + } catch (IOException | DocumentException e) { throw new ApplicationTechnicalException( t("jaxx.application.error.cannot.print"), e); + } finally { - IOUtils.closeQuietly(textStream); + IOUtils.closeQuietly(fileInputStream); } return result; } /** - * Imprime un attachment file. + * Imprime du texte. * - * @param inputStream stream to print + * @param text text 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; + public static boolean printText(String text, boolean defaultPrinter) { + boolean result = false; + FileInputStream fileInputStream = null; + ByteArrayInputStream byteArrayInputStream = null; + try { + // convert text content to inputstream + byte[] content = text.getBytes(Charsets.UTF_8); + byteArrayInputStream = new ByteArrayInputStream(content); - DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; - Doc mydoc = new SimpleDoc(inputStream, flavor, null); + File file = convertFileToPdf(byteArrayInputStream, FileType.TEXT); - PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); - aset.add(new Copies(1)); + fileInputStream = new FileInputStream(file); + result = printWithPdfRenderer(fileInputStream, defaultPrinter, file.getAbsolutePath()); - PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, aset); - PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); - - if (defaultPrinter) { - DocPrintJob job; - - if (defaultService == null) { - if (services.length == 0) { - throw new ApplicationBusinessException(t("jaxx.application.error.noPrinter")); - } - job = services[0].createPrintJob(); - if (log.isWarnEnabled()) { - log.warn("No default printer found, use " + services[0].getName() + " instead"); - } - } 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(); - } - job.print(mydoc, aset); - - } else { - - if (services.length == 0) { - if (defaultService == null) { - throw new ApplicationBusinessException(t("jaxx.application.error.noPrinter")); - - } else { - services = new PrintService[] { - defaultService - }; - } - } - - //built in UI for printing you may not use this - PrintService service = ServiceUI.printDialog(null, 200, 200, services, defaultService, flavor, aset); - - result = service != null; - if (result) { - DocPrintJob job = service.createPrintJob(); - job.print(mydoc, aset); - } - } - - } catch (PrintException e) { + } catch (IOException | DocumentException e) { throw new ApplicationTechnicalException( t("jaxx.application.error.cannot.print"), e); + + } finally { + IOUtils.closeQuietly(fileInputStream); + IOUtils.closeQuietly(byteArrayInputStream); } - return result; } @@ -541,7 +506,7 @@ * @return true if file has been printed, false otherwise */ public static boolean printWithPdfRenderer(FileInputStream fis, boolean defaultPrinter, String path) { - boolean result = true; + boolean result = false; try { // Create a PDFFile from a File reference @@ -566,12 +531,12 @@ pjob.setPageable(book); // Send print job to default printer - pjob.print(); - } catch (PrinterException ex) { - if (log.isErrorEnabled()) { - log.error("can't print", ex); + result = defaultPrinter || pjob.printDialog(); + if (result) { + pjob.print(); } - } catch (IOException ex) { + + } catch (PrinterException | IOException ex) { if (log.isErrorEnabled()) { log.error("can't print", ex); } @@ -580,6 +545,98 @@ return result; } + public static File convertFileToPdf(AttachmentFile attachmentFile) throws IOException, DocumentException { + File file = attachmentFile.getFile(); + FileType type; + if (FaxToMailUIUtil.isFileATxt(attachmentFile)) { + type = FileType.TEXT; + + } else if (FaxToMailUIUtil.isFileATif(attachmentFile)) { + type = FileType.TIF; + + } else { + type = FileType.OTHER; + } + File result = convertFileToPdf(new FileInputStream(file), type); + return result; + } + + protected enum FileType { + TEXT, TIF, OTHER + } + + protected static File convertFileToPdf(InputStream inputStream, FileType type) throws IOException, DocumentException { + File target = File.createTempFile("faxtomail-", ".tmp"); + target.deleteOnExit(); + + Document document = new Document(); + FileOutputStream fos = new FileOutputStream(target); + PdfWriter writer = PdfWriter.getInstance(document, fos); + writer.open(); + + document.setPageSize(PageSize.A4); + document.open(); + + if (type == FileType.TEXT) { + BufferedReader br = null; + try { + br = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + StringBuilder text = new StringBuilder(); + while (br.readLine() != null) { + text.append(br.readLine()).append("\n"); + } + document.add(new Paragraph(text.toString())); + br.close(); + + } finally { + IOUtils.closeQuietly(br); + } + + } else if (type == FileType.TIF) { + try { + FileInputStream fis = (FileInputStream) inputStream; + FileChannel channel = fis.getChannel(); + ByteBuffer buffer = ByteBuffer.allocate((int) channel.size()); + channel.read(buffer); + SeekableStream stream = new ByteArraySeekableStream(buffer.array()); + String[] names = ImageCodec.getDecoderNames(stream); + ImageDecoder tifImageDecoder = ImageCodec.createImageDecoder(names[0], stream, null); + + for (int i = 0 ; i < tifImageDecoder.getNumPages() ; i++) { + RenderedImage renderedImage = tifImageDecoder.decodeAsRenderedImage(i); + java.awt.Image awtImage = PlanarImage.wrapRenderedImage(renderedImage).getAsBufferedImage(); + document.newPage(); + com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(writer, awtImage, 1.0f); + image.scaleToFit(PageSize.A4.getWidth() - document.leftMargin() - document.rightMargin(), + PageSize.A4.getHeight() - document.topMargin() - document.bottomMargin()); + document.add(image); + } + fis.close(); + } finally { + IOUtils.closeQuietly(inputStream); + } + + } else { + byte[] bytes = IOUtils.toByteArray(inputStream); + com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(bytes); + float pageWidth = document.getPageSize().getWidth()- document.leftMargin() - document.rightMargin(); + float pageHeight = document.getPageSize().getHeight()- document.topMargin() - document.bottomMargin(); + float imageWidth = image.getWidth(); + float imageHeight = image.getHeight(); + if (pageWidth < imageWidth || pageHeight < imageHeight) { + float scaler = Math.min(pageWidth / imageWidth, pageHeight / imageHeight) * 100; + image.scalePercent(scaler); + } + document.add(image); + } + + document.close(); + writer.close(); + + return target; + } + + public static String getEditedFileName(String originalFileName) { return t("faxtomail.attachment.editedFile.name", originalFileName) + "-.pdf"; } Modified: trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties =================================================================== --- trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-09-09 09:23:08 UTC (rev 611) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-09-09 14:04:41 UTC (rev 612) @@ -16,6 +16,7 @@ faxtomail.action.goto.search.tip=Aller à l'écran de recherche faxtomail.action.group.tip=Grouper l'élément faxtomail.action.loadFolderEmails.tip=Chargement des demandes du dossier %s +faxtomail.action.openMailFolderChooser.tip=Ouverture de la fenêtre de sélection du dossier de destination faxtomail.action.print.notPrintableDemands.message=<html>Les éléments suivant n'ont pas été imprimés car ils n'étaient pas valides \:<br/>%s</html> faxtomail.action.print.notPrintableDemands.title=Éléments non imprimés faxtomail.action.print.tip=Impression @@ -230,8 +231,9 @@ faxtomail.pdfEditor.button.addVLine.tip=Ajouter une ligne verticale faxtomail.pdfEditor.button.nextPage=Page suivante faxtomail.pdfEditor.button.previousPage=Page précédente -faxtomail.pdfEditor.convertToPdf.error= -faxtomail.pdfEditor.readPdf.error= +faxtomail.pdfEditor.convertToPdf.error=Erreur lors de la conversion en PDF +faxtomail.pdfEditor.readPdf.error=Erreur lors de la lecture du PDF +faxtomail.print.success.message=%s fichiers ont été imprimés faxtomail.quantitiesByRange.button.text=OK faxtomail.quantitiesByRange.title=Quantités par gamme faxtomail.rangeRows.table.header.commandNumber=N° commande / devis Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2014-09-09 09:23:08 UTC (rev 611) +++ trunk/pom.xml 2014-09-09 14:04:41 UTC (rev 612) @@ -110,7 +110,7 @@ <h2Version>1.3.176</h2Version> <guavaVersion>18.0</guavaVersion> - <jaxxVersion>2.11</jaxxVersion> + <jaxxVersion>2.12-SNAPSHOT</jaxxVersion> <!-- do not upgrade to 1.6.5-1 --> <swingXVersion>1.6.4</swingXVersion> <xworkVersion>2.3.16.3</xworkVersion>
participants (1)
-
kmorin@users.forge.codelutin.com