From b5c01ed7b60849a3f21588a10035aa4f0598ce97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Prante?= Date: Thu, 18 Mar 2021 13:49:27 +0100 Subject: [PATCH] print on Samsung ML 1610 --- .../src/main/java/module-info.java | 5 ++ .../graphics/pdfbox/print}/PrintUtility.java | 44 ++++++++++-------- .../xbib/graphics/pdfbox/print}/Printer.java | 4 +- .../pdfbox/print/test/PrinterTest.java | 28 +++++++++++ .../src/test/resources/test.pdf | Bin 0 -> 3756 bytes .../src/main/java/module-info.java | 5 -- .../graphics/printer/test/PrinterTest.java | 18 ------- settings.gradle | 2 +- 8 files changed, 60 insertions(+), 46 deletions(-) create mode 100644 graphics-pdfbox-print/src/main/java/module-info.java rename {graphics-printer/src/main/java/org/xbib/graphics/printer => graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print}/PrintUtility.java (86%) rename {graphics-printer/src/main/java/org/xbib/graphics/printer => graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print}/Printer.java (97%) create mode 100644 graphics-pdfbox-print/src/test/java/org/xbib/graphics/pdfbox/print/test/PrinterTest.java create mode 100644 graphics-pdfbox-print/src/test/resources/test.pdf delete mode 100644 graphics-printer/src/main/java/module-info.java delete mode 100644 graphics-printer/src/test/java/org/xbib/graphics/printer/test/PrinterTest.java diff --git a/graphics-pdfbox-print/src/main/java/module-info.java b/graphics-pdfbox-print/src/main/java/module-info.java new file mode 100644 index 0000000..7c4f9f4 --- /dev/null +++ b/graphics-pdfbox-print/src/main/java/module-info.java @@ -0,0 +1,5 @@ +module org.xbib.graphics.pdfbox.print { + exports org.xbib.graphics.pdfbox.print; + requires java.logging; + requires transitive java.desktop; +} diff --git a/graphics-printer/src/main/java/org/xbib/graphics/printer/PrintUtility.java b/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java similarity index 86% rename from graphics-printer/src/main/java/org/xbib/graphics/printer/PrintUtility.java rename to graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java index e17499e..01ffb58 100644 --- a/graphics-printer/src/main/java/org/xbib/graphics/printer/PrintUtility.java +++ b/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java @@ -1,4 +1,4 @@ -package org.xbib.graphics.printer; +package org.xbib.graphics.pdfbox.print; import javax.print.Doc; import javax.print.DocFlavor; @@ -27,7 +27,12 @@ import java.util.List; */ public class PrintUtility { - public static void print(InputStream inputStream, Printer printer) + public static void print(InputStream inputStream, DocFlavor docFlavor) + throws Exception { + print(inputStream, docFlavor, findDefaultPrinter(docFlavor)); + } + + public static void print(InputStream inputStream, DocFlavor docFlavor, Printer printer) throws Exception { if (inputStream == null || printer == null) { return; @@ -51,7 +56,7 @@ public class PrintUtility { pas.add(Sides.TUMBLE); break; default: - pas.add(Sides.ONE_SIDED); + break; } } if (printer.isModeSupported()) { @@ -63,7 +68,7 @@ public class PrintUtility { pas.add(Chromaticity.COLOR); break; default: - pas.add(Chromaticity.MONOCHROME); + break; } } if (printer.isMediaSupported() && printer.getMediaSize() != null) { @@ -74,15 +79,14 @@ public class PrintUtility { } PrintService service = printer.getService(); DocPrintJob job = service.createPrintJob(); - Doc doc = new SimpleDoc(inputStream, - DocFlavor.INPUT_STREAM.POSTSCRIPT, null); + Doc doc = new SimpleDoc(inputStream, docFlavor, null); job.print(doc, pas); } - public static Printer getPrinter(String printerName) { + public static Printer getPrinter(String printerName, DocFlavor docFlavor) { Printer printer = null; if (printerName != null) { - List printers = findPrinters(); + List printers = findPrinters(docFlavor); for (Printer p : printers) { if (printerName.equalsIgnoreCase(p.getName())) { printer = p; @@ -94,21 +98,25 @@ public class PrintUtility { PrintService service = PrintServiceLookup.lookupDefaultPrintService(); printer = createPrinter(service); } - if (printer != null) { + /*if (printer != null) { printer.setCopies(1); printer.setCollate(false); printer.setDuplex(Printer.DUPLEX_SIMPLEX); printer.setMode(Printer.STATUS_ACCEPTING_JOBS); printer.setMediaSize("A4"); - } + }*/ return printer; } - public static List findPrinters() { + public static Printer findDefaultPrinter(DocFlavor docFlavor) { + List printers = findPrinters(docFlavor); + return printers.isEmpty() ? null : printers.get(0); + } + + public static List findPrinters(DocFlavor docFlavor) { List printers = new ArrayList<>(); - PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); - DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT; - PrintService[] printServices = PrintServiceLookup.lookupPrintServices(flavor, pras); + PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet(); + PrintService[] printServices = PrintServiceLookup.lookupPrintServices(docFlavor, printRequestAttributeSet); if (printServices != null) { for (PrintService service : printServices) { printers.add(createPrinter(service)); @@ -150,11 +158,7 @@ public class PrintUtility { if (collate == null) { collate = SheetCollate.UNCOLLATED; } - if (collate == SheetCollate.COLLATED) { - printer.setCollate(true); - } else { - printer.setCollate(false); - } + printer.setCollate(collate == SheetCollate.COLLATED); } boolean modeSupported = service.isAttributeCategorySupported(Chromaticity.class); printer.setModeSupported(modeSupported); @@ -189,7 +193,7 @@ public class PrintUtility { printer.setMediaSupported(mediaSupported); if (mediaSupported) { Object obj = service.getSupportedAttributeValues(Media.class, null, null); - if (obj != null && obj instanceof Media[]) { + if (obj instanceof Media[]) { Media[] medias = (Media[]) obj; for (Media media : medias) { if (media instanceof MediaSizeName) { diff --git a/graphics-printer/src/main/java/org/xbib/graphics/printer/Printer.java b/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/Printer.java similarity index 97% rename from graphics-printer/src/main/java/org/xbib/graphics/printer/Printer.java rename to graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/Printer.java index 487816e..a68f261 100644 --- a/graphics-printer/src/main/java/org/xbib/graphics/printer/Printer.java +++ b/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/Printer.java @@ -1,4 +1,4 @@ -package org.xbib.graphics.printer; +package org.xbib.graphics.pdfbox.print; import javax.print.PrintService; import javax.print.attribute.standard.Media; @@ -29,7 +29,7 @@ public class Printer { private int duplex; private boolean mediaSupported; private String mediaSize; - private Map mediaSizeNames = new HashMap<>(); + private final Map mediaSizeNames = new HashMap<>(); private int pageSize; private String pageRange; private PrintService service; diff --git a/graphics-pdfbox-print/src/test/java/org/xbib/graphics/pdfbox/print/test/PrinterTest.java b/graphics-pdfbox-print/src/test/java/org/xbib/graphics/pdfbox/print/test/PrinterTest.java new file mode 100644 index 0000000..d9aaadb --- /dev/null +++ b/graphics-pdfbox-print/src/test/java/org/xbib/graphics/pdfbox/print/test/PrinterTest.java @@ -0,0 +1,28 @@ +package org.xbib.graphics.pdfbox.print.test; + +import javax.print.DocFlavor; +import org.junit.jupiter.api.Test; +import org.xbib.graphics.pdfbox.print.PrintUtility; +import org.xbib.graphics.pdfbox.print.Printer; + +import java.util.logging.Level; +import java.util.logging.Logger; + +public class PrinterTest { + + private static final Logger logger = Logger.getLogger(PrinterTest.class.getName()); + + @Test + public void testPrinterSelection() { + logger.log(Level.INFO, "printer = " + PrintUtility.findPrinters(DocFlavor.INPUT_STREAM.PDF)); + } + + @Test + public void print() throws Exception { + Printer printer = PrintUtility.getPrinter("Samsung_ML-1610", DocFlavor.INPUT_STREAM.PDF); + if (printer != null) { + PrintUtility.print(getClass().getResourceAsStream("/test.pdf"), DocFlavor.INPUT_STREAM.PDF, printer); + } + } + +} diff --git a/graphics-pdfbox-print/src/test/resources/test.pdf b/graphics-pdfbox-print/src/test/resources/test.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f1c422f07d39416113b2f6079c56261dc44cee8e GIT binary patch literal 3756 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 literal 0 HcmV?d00001 diff --git a/graphics-printer/src/main/java/module-info.java b/graphics-printer/src/main/java/module-info.java deleted file mode 100644 index a726c28..0000000 --- a/graphics-printer/src/main/java/module-info.java +++ /dev/null @@ -1,5 +0,0 @@ -module org.xbib.graphics.printer { - exports org.xbib.graphics.printer; - requires java.logging; - requires transitive java.desktop; -} diff --git a/graphics-printer/src/test/java/org/xbib/graphics/printer/test/PrinterTest.java b/graphics-printer/src/test/java/org/xbib/graphics/printer/test/PrinterTest.java deleted file mode 100644 index 0d72140..0000000 --- a/graphics-printer/src/test/java/org/xbib/graphics/printer/test/PrinterTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.xbib.graphics.printer.test; - -import org.junit.jupiter.api.Test; -import org.xbib.graphics.printer.PrintUtility; - -import java.util.logging.Level; -import java.util.logging.Logger; - -public class PrinterTest { - - private static final Logger logger = Logger.getLogger(PrinterTest.class.getName()); - - @Test - public void testPrinterSelection() { - logger.log(Level.INFO, "printer = " + PrintUtility.findPrinters()); - } - -} diff --git a/settings.gradle b/settings.gradle index e7c2511..bd6ecab 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,4 +9,4 @@ include 'graphics-ghostscript' include 'graphics-pdfbox' include 'graphics-pdfbox-layout' include 'graphics-pdfbox-groovy' -include 'graphics-printer' +include 'graphics-pdfbox-print'