From 813a781d25f792e7952daad0b3175eb433a70f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Prante?= Date: Wed, 3 Mar 2021 10:21:30 +0100 Subject: [PATCH 1/5] clean tests for linux --- gradle.properties | 2 +- ...RendererTest.java => SVGRendererTest.java} | 2 +- .../graphics/barcode/output/code93-basic.eps | 1 - .../graphics/barcode/output/code93-basic.pdf | 12 +-- .../graphics/barcode/output/code93-colors.eps | 1 - .../graphics/barcode/output/code93-colors.pdf | 12 +-- .../barcode/output/code93-custom-font.eps | 1 - .../barcode/output/code93-custom-font.pdf | 12 +-- .../barcode/output/code93-magnification-2.eps | 1 - .../barcode/output/code93-magnification-2.pdf | 12 +-- .../barcode/output/code93-margin-size-20.eps | 1 - .../barcode/output/code93-margin-size-20.pdf | 12 +-- .../barcode/output/maxicode-basic.eps | 1 - .../barcode/output/maxicode-basic.pdf | 22 +---- .../graphics/ghostscript/PDFConverter.java | 2 +- .../graphics/ghostscript/PDFRasterizer.java | 77 ++++++++++-------- .../ghostscript/test/PDFRasterizerTest.java | 21 ++--- .../graphics/ghostscript/test/TiffTest.java | 9 +- .../pdfbox/groovy/test/BaseBuilderSpec.groovy | 4 +- .../pdfbox/groovy/test/FontSpec.groovy | 4 +- .../groovy/test/PdfDocumentBuilderTest.groovy | 13 +-- .../src/test/resources/img/img.png | Bin 0 -> 7700 bytes .../src/test/resources/img/logo-print.png | Bin 673 -> 0 bytes 23 files changed, 92 insertions(+), 130 deletions(-) rename graphics-barcode/src/test/java/org/xbib/graphics/barcode/output/{SvgRendererTest.java => SVGRendererTest.java} (99%) create mode 100644 graphics-pdfbox-groovy/src/test/resources/img/img.png delete mode 100644 graphics-pdfbox-groovy/src/test/resources/img/logo-print.png diff --git a/gradle.properties b/gradle.properties index a21f623..3b0b2f0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ group = org.xbib.graphics name = graphics -version = 4.0.1 +version = 4.0.2 gradle.wrapper.version = 6.6.1 pdfbox.version = 2.0.22 diff --git a/graphics-barcode/src/test/java/org/xbib/graphics/barcode/output/SvgRendererTest.java b/graphics-barcode/src/test/java/org/xbib/graphics/barcode/output/SVGRendererTest.java similarity index 99% rename from graphics-barcode/src/test/java/org/xbib/graphics/barcode/output/SvgRendererTest.java rename to graphics-barcode/src/test/java/org/xbib/graphics/barcode/output/SVGRendererTest.java index adb514a..4570e00 100755 --- a/graphics-barcode/src/test/java/org/xbib/graphics/barcode/output/SvgRendererTest.java +++ b/graphics-barcode/src/test/java/org/xbib/graphics/barcode/output/SVGRendererTest.java @@ -22,7 +22,7 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.Locale; -public class SvgRendererTest { +public class SVGRendererTest { private Locale originalDefaultLocale; diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-basic.eps b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-basic.eps index 9a29fdb..6d75bac 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-basic.eps +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-basic.eps @@ -26,7 +26,6 @@ clipsave gsave 0.0 0.0 0.0 rgb 1.0 setlinewidth 0 setlinejoin 0 setlinecap [] 0.0 setdash -/DejaVuSansLat /DejaVuSans latinize /DejaVuSansLat 12.0 selectfont 1.0 1.0 1.0 rgb newpath 0.0 0.0 128.0 60.0 rect Z fill 0.0 0.0 0.0 rgb diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-basic.pdf b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-basic.pdf index 8deee0b..1407ae9 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-basic.pdf +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-basic.pdf @@ -32,15 +32,11 @@ q /Fnt0 12.0 Tf q 0 J - -/Fnt0 12.0 Tf 0 0 m 128 0 l 128 60 l 0 60 l 0 0 l h f Q q 0 0 0 rg 0 0 0 RG 0 J - -/Fnt0 12.0 Tf 5 5 m 6 5 l 6 45 l 5 45 l h f 7 5 m 8 5 l 8 45 l 7 45 l h f 9 5 m 13 5 l 13 45 l 9 45 l h f @@ -93,7 +89,7 @@ Q endstream endobj 5 0 obj -1684 +1654 endobj 6 0 obj << @@ -121,13 +117,13 @@ xref 0000000058 00000 n 0000000115 00000 n 0000000248 00000 n -0000001984 00000 n -0000002004 00000 n +0000001954 00000 n +0000001974 00000 n trailer << /Size 7 /Root 1 0 R >> startxref -2267 +2237 %%EOF diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-colors.eps b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-colors.eps index 0d7b477..08a24d5 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-colors.eps +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-colors.eps @@ -26,7 +26,6 @@ clipsave gsave 0.0 0.0 0.0 rgb 1.0 setlinewidth 0 setlinejoin 0 setlinecap [] 0.0 setdash -/DejaVuSansLat /DejaVuSans latinize /DejaVuSansLat 12.0 selectfont 0.0 1.0 0.0 rgb newpath 0.0 0.0 128.0 60.0 rect Z fill 1.0 0.0 0.0 rgb diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-colors.pdf b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-colors.pdf index 1ec69b1..5b879ab 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-colors.pdf +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-colors.pdf @@ -33,15 +33,11 @@ q q 0 1 0 rg 0 1 0 RG 0 J - -/Fnt0 12.0 Tf 0 0 m 128 0 l 128 60 l 0 60 l 0 0 l h f Q q 1 0 0 rg 1 0 0 RG 0 J - -/Fnt0 12.0 Tf 5 5 m 6 5 l 6 45 l 5 45 l h f 7 5 m 8 5 l 8 45 l 7 45 l h f 9 5 m 13 5 l 13 45 l 9 45 l h f @@ -94,7 +90,7 @@ Q endstream endobj 5 0 obj -1702 +1672 endobj 6 0 obj << @@ -122,13 +118,13 @@ xref 0000000058 00000 n 0000000115 00000 n 0000000248 00000 n -0000002002 00000 n -0000002022 00000 n +0000001972 00000 n +0000001992 00000 n trailer << /Size 7 /Root 1 0 R >> startxref -2285 +2255 %%EOF diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-custom-font.eps b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-custom-font.eps index a9d9b7e..1782e7c 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-custom-font.eps +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-custom-font.eps @@ -26,7 +26,6 @@ clipsave gsave 0.0 0.0 0.0 rgb 1.0 setlinewidth 0 setlinejoin 0 setlinecap [] 0.0 setdash -/DejaVuSansLat /DejaVuSans latinize /DejaVuSansLat 12.0 selectfont 1.0 1.0 1.0 rgb newpath 0.0 0.0 128.0 82.0 rect Z fill 0.0 0.0 0.0 rgb diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-custom-font.pdf b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-custom-font.pdf index 4af9e84..83e29e7 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-custom-font.pdf +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-custom-font.pdf @@ -32,15 +32,11 @@ q /Fnt0 12.0 Tf q 0 J - -/Fnt0 12.0 Tf 0 0 m 128 0 l 128 82 l 0 82 l 0 0 l h f Q q 0 0 0 rg 0 0 0 RG 0 J - -/Fnt0 12.0 Tf 5 5 m 6 5 l 6 45 l 5 45 l h f 7 5 m 8 5 l 8 45 l 7 45 l h f 9 5 m 13 5 l 13 45 l 9 45 l h f @@ -93,7 +89,7 @@ Q endstream endobj 5 0 obj -1688 +1658 endobj 6 0 obj << @@ -121,13 +117,13 @@ xref 0000000058 00000 n 0000000115 00000 n 0000000248 00000 n -0000001988 00000 n -0000002008 00000 n +0000001958 00000 n +0000001978 00000 n trailer << /Size 7 /Root 1 0 R >> startxref -2271 +2241 %%EOF diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-magnification-2.eps b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-magnification-2.eps index 6afe746..50d8abb 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-magnification-2.eps +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-magnification-2.eps @@ -26,7 +26,6 @@ clipsave gsave 0.0 0.0 0.0 rgb 1.0 setlinewidth 0 setlinejoin 0 setlinecap [] 0.0 setdash -/DejaVuSansLat /DejaVuSans latinize /DejaVuSansLat 12.0 selectfont 1.0 1.0 1.0 rgb newpath 0.0 0.0 256.0 120.0 rect Z fill 0.0 0.0 0.0 rgb diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-magnification-2.pdf b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-magnification-2.pdf index 9d92951..ce7b528 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-magnification-2.pdf +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-magnification-2.pdf @@ -32,15 +32,11 @@ q /Fnt0 12.0 Tf q 0 J - -/Fnt0 12.0 Tf 0 0 m 256 0 l 256 120 l 0 120 l 0 0 l h f Q q 0 0 0 rg 0 0 0 RG 0 J - -/Fnt0 12.0 Tf 10 10 m 12 10 l 12 90 l 10 90 l h f 14 10 m 16 10 l 16 90 l 14 90 l h f 18 10 m 26 10 l 26 90 l 18 90 l h f @@ -93,7 +89,7 @@ Q endstream endobj 5 0 obj -1845 +1815 endobj 6 0 obj << @@ -121,13 +117,13 @@ xref 0000000058 00000 n 0000000115 00000 n 0000000248 00000 n -0000002145 00000 n -0000002165 00000 n +0000002115 00000 n +0000002135 00000 n trailer << /Size 7 /Root 1 0 R >> startxref -2428 +2398 %%EOF diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-margin-size-20.eps b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-margin-size-20.eps index 23f2363..db88843 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-margin-size-20.eps +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-margin-size-20.eps @@ -26,7 +26,6 @@ clipsave gsave 0.0 0.0 0.0 rgb 1.0 setlinewidth 0 setlinejoin 0 setlinecap [] 0.0 setdash -/DejaVuSansLat /DejaVuSans latinize /DejaVuSansLat 12.0 selectfont 1.0 1.0 1.0 rgb newpath 0.0 0.0 158.0 90.0 rect Z fill 0.0 0.0 0.0 rgb diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-margin-size-20.pdf b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-margin-size-20.pdf index 4a267d6..a69cb0e 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-margin-size-20.pdf +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/code93-margin-size-20.pdf @@ -32,15 +32,11 @@ q /Fnt0 12.0 Tf q 0 J - -/Fnt0 12.0 Tf 0 0 m 158 0 l 158 90 l 0 90 l 0 0 l h f Q q 0 0 0 rg 0 0 0 RG 0 J - -/Fnt0 12.0 Tf 20 20 m 21 20 l 21 60 l 20 60 l h f 22 20 m 23 20 l 23 60 l 22 60 l h f 24 20 m 28 20 l 28 60 l 24 60 l h f @@ -93,7 +89,7 @@ Q endstream endobj 5 0 obj -1795 +1765 endobj 6 0 obj << @@ -121,13 +117,13 @@ xref 0000000058 00000 n 0000000115 00000 n 0000000247 00000 n -0000002094 00000 n -0000002114 00000 n +0000002064 00000 n +0000002084 00000 n trailer << /Size 7 /Root 1 0 R >> startxref -2377 +2347 %%EOF diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/maxicode-basic.eps b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/maxicode-basic.eps index 5ef96b7..84e4492 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/maxicode-basic.eps +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/maxicode-basic.eps @@ -26,7 +26,6 @@ clipsave gsave 0.0 0.0 0.0 rgb 1.0 setlinewidth 0 setlinejoin 0 setlinecap [] 0.0 setdash -/DejaVuSansLat /DejaVuSans latinize /DejaVuSansLat 12.0 selectfont 1.0 1.0 1.0 rgb newpath 0.0 0.0 420.0 410.0 rect Z fill 0.0 0.0 0.0 rgb diff --git a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/maxicode-basic.pdf b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/maxicode-basic.pdf index 7331156..3d677a3 100644 --- a/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/maxicode-basic.pdf +++ b/graphics-barcode/src/test/resources/org/xbib/graphics/barcode/output/maxicode-basic.pdf @@ -32,15 +32,11 @@ q /Fnt0 12.0 Tf q 0 J - -/Fnt0 12.0 Tf 0 0 m 420 0 l 420 410 l 0 410 l 0 0 l h f Q q 0 0 0 rg 0 0 0 RG 0 J - -/Fnt0 12.0 Tf 43.45 38.4 m 48.825 35.275 l 48.825 29.025 l 43.45 25.9 l 38.075 29.025 l 38.075 35.275 l h f 68.05 38.4 m 73.425 35.275 l 73.425 29.025 l 68.05 25.9 l 62.675 29.025 l 62.675 35.275 l h f 92.65 38.4 m 98.025 35.275 l 98.025 29.025 l 92.65 25.9 l 87.275 29.025 l 87.275 35.275 l h f @@ -414,41 +410,31 @@ q Q q 0 J - -/Fnt0 12.0 Tf 248.64999999999998 203 m 248.64999999999998 227.76997102991106 228.56997102991107 247.85 203.79999999999998 247.85 c 179.0300289700889 247.85 158.95 227.76997102991106 158.95 203 c 158.95 178.2300289700889 179.0300289700889 158.15 203.79999999999998 158.15 c 228.56997102991107 158.15 248.64999999999998 178.2300289700889 248.64999999999998 203 c h f Q q 0 0 0 rg 0 0 0 RG 0 J - -/Fnt0 12.0 Tf 239.3 203 m 239.3 222.60610861899318 223.40610861899316 238.5 203.79999999999998 238.5 c 184.19389138100684 238.5 168.29999999999998 222.60610861899318 168.29999999999998 203 c 168.29999999999998 183.39389138100685 184.19389138100684 167.5 203.79999999999998 167.5 c 223.40610861899316 167.5 239.3 183.39389138100685 239.3 203 c h f Q q 0 J - -/Fnt0 12.0 Tf 229.89999999999998 203 m 229.89999999999998 217.41463197058368 218.2146319705837 229.1 203.79999999999998 229.1 c 189.38536802941627 229.1 177.7 217.41463197058368 177.7 203 c 177.7 188.5853680294163 189.38536802941627 176.9 203.79999999999998 176.9 c 218.2146319705837 176.9 229.89999999999998 188.5853680294163 229.89999999999998 203 c h f Q q 0 0 0 rg 0 0 0 RG 0 J - -/Fnt0 12.0 Tf 220.35 203 m 220.35 212.14031260969963 212.94031260969962 219.55 203.79999999999998 219.55 c 194.65968739030035 219.55 187.24999999999997 212.14031260969963 187.24999999999997 203 c 187.24999999999997 193.85968739030037 194.65968739030035 186.45 203.79999999999998 186.45 c 212.94031260969962 186.45 220.35 193.85968739030037 220.35 203 c h f Q q 0 J - -/Fnt0 12.0 Tf 210.95 203.00000000000003 m 210.95 206.9488359612902 207.74883596129015 210.15000000000003 203.79999999999998 210.15000000000003 c 199.8511640387098 210.15000000000003 196.64999999999998 206.9488359612902 196.64999999999998 203.00000000000003 c 196.64999999999998 199.05116403870986 199.8511640387098 195.85000000000002 203.79999999999998 195.85000000000002 c 207.74883596129015 195.85000000000002 210.95 199.05116403870986 210.95 203.00000000000003 c h f Q Q endstream endobj 5 0 obj -64455 +64350 endobj 6 0 obj << @@ -470,13 +456,13 @@ xref 0000000058 00000 n 0000000115 00000 n 0000000248 00000 n -0000064755 00000 n -0000064776 00000 n +0000064650 00000 n +0000064671 00000 n trailer << /Size 7 /Root 1 0 R >> startxref -64947 +64842 %%EOF diff --git a/graphics-ghostscript/src/main/java/org/xbib/graphics/ghostscript/PDFConverter.java b/graphics-ghostscript/src/main/java/org/xbib/graphics/ghostscript/PDFConverter.java index f62e3f7..94e59ad 100644 --- a/graphics-ghostscript/src/main/java/org/xbib/graphics/ghostscript/PDFConverter.java +++ b/graphics-ghostscript/src/main/java/org/xbib/graphics/ghostscript/PDFConverter.java @@ -91,7 +91,7 @@ public class PDFConverter { this.compatibilityLevel = compatibilityLevel; this.pdfx = pdfx; this.paperSize = paperSize; - this.tmpPath = Paths.get("/var/tmp/" + this); + this.tmpPath = Paths.get(System.getProperty("java.io.tmpdir", "/var/tmp")).resolve(toString()); } /** diff --git a/graphics-ghostscript/src/main/java/org/xbib/graphics/ghostscript/PDFRasterizer.java b/graphics-ghostscript/src/main/java/org/xbib/graphics/ghostscript/PDFRasterizer.java index 65eecf3..87ac49a 100644 --- a/graphics-ghostscript/src/main/java/org/xbib/graphics/ghostscript/PDFRasterizer.java +++ b/graphics-ghostscript/src/main/java/org/xbib/graphics/ghostscript/PDFRasterizer.java @@ -25,6 +25,7 @@ import java.io.OutputStream; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.PathMatcher; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.StandardCopyOption; @@ -46,26 +47,31 @@ public class PDFRasterizer implements Closeable { private static final Logger logger = Logger.getLogger(PDFRasterizer.class.getName()); - private final String creator; + private String creator; - private final String author; + private String author; - private final String subject; + private String subject; private final Map imageReaders; private final Path tmpPath; - public PDFRasterizer(String subject) { - this("org.xbib.graphics.ghostscript/4.0.1", "Jörg Prante", subject); + public PDFRasterizer() { + this.imageReaders = createImageReaders(); + this.tmpPath = Paths.get(System.getProperty("java.io.tmpdir", "/var/tmp")).resolve(toString()); } - public PDFRasterizer(String creator, String author, String subject) { + public void setCreator(String creator) { this.creator = creator; + } + + public void setAuthor(String author) { this.author = author; + } + + public void setSubject(String subject) { this.subject = subject; - this.imageReaders = createImageReaders(); - this.tmpPath = Paths.get("/var/tmp/" + this); } @Override @@ -199,21 +205,33 @@ public class PDFRasterizer implements Closeable { } } - public synchronized int mergeImagesToPDF(Path sourceDir, Path targetFile) throws IOException { - logger.info("mergeImagesToPDF: source=" + sourceDir + " target=" + targetFile); + public int mergeImagesToPDF(Path sourceDir, Path targetFile) throws IOException { + return mergeImagesToPDF(sourceDir, targetFile, "**/*"); + } + + public synchronized int mergeImagesToPDF(Path sourceDir, Path targetFile, String globPattern) throws IOException { + logger.info("mergeImagesToPDF: source=" + sourceDir + " target=" + targetFile + " glob =" + globPattern); int pagecount = 0; + PathMatcher pathMatcher = sourceDir.getFileSystem().getPathMatcher("glob:" + globPattern); List coverPageDocs = new ArrayList<>(); try (Stream files = Files.list(sourceDir); PDDocument pdDocument = new PDDocument(MemoryUsageSetting.setupTempFileOnly()); OutputStream outputStream = new BufferedOutputStream(Files.newOutputStream(targetFile))) { List entries = files.sorted() .filter(PDFRasterizer::checkForRealFile) + .filter(pathMatcher::matches) .collect(Collectors.toList()); pdDocument.getDocumentInformation().setTitle(targetFile.getFileName().toString()); pdDocument.getDocumentInformation().setCreationDate(Calendar.getInstance()); - pdDocument.getDocumentInformation().setCreator(creator); - pdDocument.getDocumentInformation().setSubject(subject); - pdDocument.getDocumentInformation().setAuthor(author); + if (creator != null) { + pdDocument.getDocumentInformation().setCreator(creator); + } + if (subject != null) { + pdDocument.getDocumentInformation().setSubject(subject); + } + if (author != null) { + pdDocument.getDocumentInformation().setAuthor(author); + } for (Path path : entries) { if (path.getFileName().toString().toLowerCase(Locale.ROOT).endsWith(".pdf")) { logger.info("found pdf " + path); @@ -237,26 +255,21 @@ public class PDFRasterizer implements Closeable { logger.log(Level.WARNING, "skipping image because too large: " + path + " size = " + size); } else { BufferedImage bufferedImage = readImage(path); - if (bufferedImage != null) { - PDPage page = new PDPage(new PDRectangle(bufferedImage.getWidth(), bufferedImage.getHeight())); - pdDocument.addPage(page); - PDImageXObject pdImageXObject = LosslessFactory.createFromImage(pdDocument, bufferedImage); - if (pdImageXObject != null) { - // true = use FlateDecode to compress - PDPageContentStream pdPageContentStream = - new PDPageContentStream(pdDocument, page, PDPageContentStream.AppendMode.APPEND, true); - pdPageContentStream.drawImage(pdImageXObject, 0, 0); - pdPageContentStream.close(); - pagecount++; - } else { - logger.log(Level.WARNING, "unable to create PDImageXObject from buffered image from " + path); - throw new IOException("unable to create PDImageXObject from buffered image"); - } - bufferedImage.flush(); + PDPage page = new PDPage(new PDRectangle(bufferedImage.getWidth(), bufferedImage.getHeight())); + pdDocument.addPage(page); + PDImageXObject pdImageXObject = LosslessFactory.createFromImage(pdDocument, bufferedImage); + if (pdImageXObject != null) { + // true = use FlateDecode to compress + PDPageContentStream pdPageContentStream = + new PDPageContentStream(pdDocument, page, PDPageContentStream.AppendMode.APPEND, true); + pdPageContentStream.drawImage(pdImageXObject, 0, 0); + pdPageContentStream.close(); + pagecount++; } else { - logger.log(Level.WARNING, "unable to read into a buffered image frmo " + path); - throw new IOException("unable to read into a buffered image"); + logger.log(Level.WARNING, "unable to create PDImageXObject from buffered image from " + path); + throw new IOException("unable to create PDImageXObject from buffered image"); } + bufferedImage.flush(); } } } @@ -424,7 +437,7 @@ public class PDFRasterizer implements Closeable { imageReader.setInput(imageInputStream); ImageReadParam param = imageReader.getDefaultReadParam(); BufferedImage bufferedImage = imageReader.read(0, param); - logger.log(Level.FINE, "path = " + path + "loaded: width = " + bufferedImage.getWidth() + + logger.log(Level.FINE, "path = " + path + " loaded, width = " + bufferedImage.getWidth() + " height = " + bufferedImage.getHeight() + " color model = " + bufferedImage.getColorModel()); imageInputStream.close(); diff --git a/graphics-ghostscript/src/test/java/org/xbib/graphics/ghostscript/test/PDFRasterizerTest.java b/graphics-ghostscript/src/test/java/org/xbib/graphics/ghostscript/test/PDFRasterizerTest.java index 1e24b24..53ecd8a 100644 --- a/graphics-ghostscript/src/test/java/org/xbib/graphics/ghostscript/test/PDFRasterizerTest.java +++ b/graphics-ghostscript/src/test/java/org/xbib/graphics/ghostscript/test/PDFRasterizerTest.java @@ -22,12 +22,9 @@ public class PDFRasterizerTest { @Test public void testPDFCreation() throws IOException { - String creator = "Xbib PDF"; - String author = "Jörg Prante"; - String subject = "Test"; Path sourceDir = Paths.get("src/test/resources/org/xbib/graphics/ghostscript/test/images-3656573"); Path targetFile = Paths.get("build/3656573.pdf"); - PDFRasterizer pdfRasterizer = new PDFRasterizer(creator, author, subject); + PDFRasterizer pdfRasterizer = new PDFRasterizer(); int pagecount = pdfRasterizer.mergeImagesToPDF(sourceDir, targetFile); logger.info("pagecount = " + pagecount); pdfRasterizer.close(); @@ -35,12 +32,9 @@ public class PDFRasterizerTest { @Test public void testPDFColorImage() throws IOException { - String creator = "Xbib PDF"; - String author = "Jörg Prante"; - String subject = "Test"; Path sourceDir = Paths.get("src/test/resources/org/xbib/graphics/ghostscript/test/images"); Path targetFile = Paths.get("build/color.pdf"); - PDFRasterizer pdfRasterizer = new PDFRasterizer(creator, author, subject); + PDFRasterizer pdfRasterizer = new PDFRasterizer(); int pagecount = pdfRasterizer.mergeImagesToPDF(sourceDir, targetFile); logger.info("pagecount = " + pagecount); pdfRasterizer.close(); @@ -52,7 +46,7 @@ public class PDFRasterizerTest { Path target = Paths.get("build/20200024360-new.pdf"); Path tmp = Files.createTempDirectory("graphics-test"); try { - PDFRasterizer pdfRasterizer = new PDFRasterizer("xbib", "Jörg Prante", "Test"); + PDFRasterizer pdfRasterizer = new PDFRasterizer(); pdfRasterizer.pdfToImage(source, tmp, null, null); Path tmpTarget = tmp.resolve(target.getFileName()); int pagecount = pdfRasterizer.mergeImagesToPDF(tmp, tmpTarget); @@ -74,9 +68,7 @@ public class PDFRasterizerTest { try { delete(target); Files.createDirectories(target); - PDFRasterizer rasterizer = new PDFRasterizer( - "org.xbib.graphics.ghostscript", "Jörg Prante", - "converted from " + p); + PDFRasterizer rasterizer = new PDFRasterizer(); rasterizer.pdfToImage(p, target, "pdf-", "1-"); rasterizer.close(); } catch (IOException e) { @@ -90,7 +82,6 @@ public class PDFRasterizerTest { @Test public void testPDFRasterizerConvert() throws Exception { - logger.log(Level.INFO, "testing java.io.tmpdir = " + System.getProperty("java.io.tmpdir")); Path path = Paths.get("build/resources/test"); try (Stream stream = Files.list(path)) { stream.forEach(p -> { @@ -100,9 +91,7 @@ public class PDFRasterizerTest { try { delete(target); Files.createDirectories(target.getParent()); - PDFRasterizer rasterizer = new PDFRasterizer( - "org.xbib.graphics.ghostscript", "Jörg Prante", - "converted from " + p); + PDFRasterizer rasterizer = new PDFRasterizer(); rasterizer.convert(p, target); rasterizer.close(); } catch (IOException e) { diff --git a/graphics-ghostscript/src/test/java/org/xbib/graphics/ghostscript/test/TiffTest.java b/graphics-ghostscript/src/test/java/org/xbib/graphics/ghostscript/test/TiffTest.java index 5eac769..63cf866 100644 --- a/graphics-ghostscript/src/test/java/org/xbib/graphics/ghostscript/test/TiffTest.java +++ b/graphics-ghostscript/src/test/java/org/xbib/graphics/ghostscript/test/TiffTest.java @@ -32,14 +32,11 @@ public class TiffTest { @Test public void mergeTiff() throws IOException { - String creator = "Malva PDF"; - String author = "Jörg Prante"; - String subject = "Test"; Path sourceDir = Paths.get("src/test/resources/org/xbib/graphics/ghostscript/test/"); Path targetFile = Paths.get("build/tmp.pdf"); - PDFRasterizer pdfRasterizer = new PDFRasterizer(creator, author, subject); - int pagecount = pdfRasterizer.mergeImagesToPDF(sourceDir, targetFile); + PDFRasterizer pdfRasterizer = new PDFRasterizer(); + int pagecount = pdfRasterizer.mergeImagesToPDF(sourceDir, targetFile, "**/*.tif"); logger.info("pagecount = " + pagecount); - assertEquals(3, pagecount); + assertEquals(2, pagecount); } } diff --git a/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/BaseBuilderSpec.groovy b/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/BaseBuilderSpec.groovy index 0004569..65ed631 100644 --- a/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/BaseBuilderSpec.groovy +++ b/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/BaseBuilderSpec.groovy @@ -370,7 +370,7 @@ abstract class BaseBuilderSpec extends Specification { when: List layout = [ [ key: 'Typ', value: 'Online', 'bold':true], - [ key: 'Medea-Nummer', value: 'test'], + [ key: 'Nummer', value: 'test'], [ key: 'Bestelldatum', value: 'test'], [ key: 'Eingangsdatum', value: 'test'], [ key: 'Besteller', value: 'test', line: true], @@ -399,7 +399,7 @@ abstract class BaseBuilderSpec extends Specification { paragraph(margin:[left: 6.cm, right: 1.cm, top: -1.5.cm]) { font.size = 24.pt font.bold = true - text 'Aufsatzbestellung Lieferschein' + text 'Lieferschein' } paragraph { table(margin:[left: 1.cm, top: 2.cm], width: 19.cm, padding: 0.pt, border:[size:0.pt]) { diff --git a/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/FontSpec.groovy b/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/FontSpec.groovy index f122876..e710fb1 100644 --- a/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/FontSpec.groovy +++ b/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/FontSpec.groovy @@ -28,13 +28,13 @@ class FontSpec extends Specification { } def "printable characters"() { - String s = "\u0098 Hello Jörg" + String s = "\u0098 Hello World" when: s = s.replaceAll("\\p{C}", "") then: - s == " Hello Jörg" + s == " Hello World" } def "glyph exists"() { diff --git a/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/PdfDocumentBuilderTest.groovy b/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/PdfDocumentBuilderTest.groovy index 0570853..70b300e 100644 --- a/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/PdfDocumentBuilderTest.groovy +++ b/graphics-pdfbox-groovy/src/test/groovy/org/xbib/graphics/pdfbox/groovy/test/PdfDocumentBuilderTest.groovy @@ -9,6 +9,8 @@ import java.nio.file.Files import java.nio.file.Paths import java.util.regex.Pattern +import static org.junit.Assert.assertTrue + @Log4j2 class PdfDocumentBuilderTest { @@ -48,7 +50,7 @@ class PdfDocumentBuilderTest { PdfDocumentBuilder builder = new PdfDocumentBuilder(outputStream) List layout = [ [key: 'Typ', value: 'Online', 'bold': true], - [key: 'Medea-Nummer', value: 'test'], + [key: 'Nummer', value: 'test'], [key: 'Bestelldatum', value: 'test'], [key: 'Eingangsdatum', value: 'test'], [key: 'Besteller', value: 'test', line: true], @@ -147,7 +149,7 @@ class PdfDocumentBuilderTest { @Test void testPdfWithImage() { - byte[] logo = getClass().getResourceAsStream('/img/logo-print.png').bytes + byte[] logo = getClass().getResourceAsStream('/img/img.png').bytes OutputStream outputStream = Files.newOutputStream(Paths.get("build/testimage.pdf")) outputStream.withCloseable { PdfDocumentBuilder builder = new PdfDocumentBuilder(outputStream) @@ -159,7 +161,7 @@ class PdfDocumentBuilderTest { builder.create { document(font: [family: 'Helvetica'], margin: [top: 1.cm]) { paragraph(margin: [left: 7.mm]) { - image(data: logo, name: 'logo-print.png', width: 125.px, height: 45.px) + image(data: logo, name: 'img.png', width: 125.px, height: 45.px) } paragraph(margin: [left: 6.cm, right: 1.cm, top: 0.cm]) { font.size = 24.pt @@ -229,11 +231,12 @@ class PdfDocumentBuilderTest { Pattern detectHan = Pattern.compile('.*\\p{script=Han}.*') Pattern detectLatin = Pattern.compile('.*\\p{script=Latin}.*') String chinese = "北京 東京大学" - String caron = "Hey Jörg, this is Latin Small Letter C with Caron \u010d" + String caron = "Hey, this is Latin Small Letter C with Caron \u010d" log.info("chinese = ${detectHan.matcher(chinese).matches()}") + assertTrue(detectHan.matcher(chinese).matches()) log.info("caron = ${detectLatin.matcher(caron).matches()}") + assertTrue(detectLatin.matcher(caron).matches()) String normalized = caron.replaceAll("\\P{IsLatin}","") log.info("normalized=${normalized}") - } } diff --git a/graphics-pdfbox-groovy/src/test/resources/img/img.png b/graphics-pdfbox-groovy/src/test/resources/img/img.png new file mode 100644 index 0000000000000000000000000000000000000000..1b58ba10f96d5c7ad7a14067c779df7c2cf17cfc GIT binary patch literal 7700 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 Hu0mjfVoz7( From 11254626e6bc4f6d2305453d078b213b61928e0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Prante?= Date: Wed, 3 Mar 2021 10:39:02 +0100 Subject: [PATCH 2/5] clean up pdfbox layout tables --- graphics-pdfbox-layout/NOTICE.txt | 18 ++- .../pdfbox/layout/table/AbstractCell.java | 115 ------------------ .../pdfbox/layout/table/AbstractTextCell.java | 19 --- .../pdfbox/layout/table/ParagraphCell.java | 54 -------- .../graphics/pdfbox/layout/table/PdfUtil.java | 33 ++--- 5 files changed, 30 insertions(+), 209 deletions(-) diff --git a/graphics-pdfbox-layout/NOTICE.txt b/graphics-pdfbox-layout/NOTICE.txt index 076cb25..2b9a2a7 100644 --- a/graphics-pdfbox-layout/NOTICE.txt +++ b/graphics-pdfbox-layout/NOTICE.txt @@ -4,4 +4,20 @@ https://github.com/ralfstuckert/pdfbox-layout (MIT License) -as of October, 2020 \ No newline at end of file +as of October, 2020 + +and extended by "easytable" + +https://github.com/vandeseer/easytable + +(MIT License) + +as of March, 2021 + +and extended by "boxable" + +https://github.com/dhorions/boxable + +(Apache 2.0 License) + +as of March, 2021 diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/AbstractCell.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/AbstractCell.java index e797803..217c6c8 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/AbstractCell.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/AbstractCell.java @@ -211,119 +211,4 @@ public abstract class AbstractCell { public boolean isVerticallyAligned(VerticalAlignment alignment) { return getSettings().getVerticalAlignment() == alignment; } - - /*public abstract static class AbstractCellBuilder> { - - protected Settings settings = new Settings(); - - // We don't want to expose settings directly! - private void settings(Settings settings) {} - - public B borderWidth(final float borderWidth) { - settings.setBorderWidthTop(borderWidth); - settings.setBorderWidthBottom(borderWidth); - settings.setBorderWidthLeft(borderWidth); - settings.setBorderWidthRight(borderWidth); - return (B) this; - } - - public B borderWidthTop(final float borderWidth) { - settings.setBorderWidthTop(borderWidth); - return (B) this; - } - - public B borderWidthBottom(final float borderWidth) { - settings.setBorderWidthBottom(borderWidth); - return (B) this; - } - - public B borderWidthLeft(final float borderWidth) { - settings.setBorderWidthLeft(borderWidth); - return (B) this; - } - - public B borderWidthRight(final float borderWidth) { - settings.setBorderWidthRight(borderWidth); - return (B) this; - } - - public B borderStyleTop(final BorderStyleInterface style) { - settings.setBorderStyleTop(style); - return (B) this; - } - - public B borderStyleBottom(final BorderStyleInterface style) { - settings.setBorderStyleBottom(style); - return (B) this; - } - - public B borderStyleLeft(final BorderStyleInterface style) { - settings.setBorderStyleLeft(style); - return (B) this; - } - - public B borderStyleRight(final BorderStyleInterface style) { - settings.setBorderStyleRight(style); - return (B) this; - } - - public B borderStyle(final BorderStyleInterface style) { - return this.borderStyleLeft(style) - .borderStyleRight(style) - .borderStyleBottom(style) - .borderStyleTop(style); - } - - public B padding(final float padding) { - return this.paddingTop(padding) - .paddingBottom(padding) - .paddingLeft(padding) - .paddingRight(padding); - } - - public B paddingTop(final float padding) { - settings.setPaddingTop(padding); - return (B) this; - } - - public B paddingBottom(final float padding) { - settings.setPaddingBottom(padding); - return (B) this; - } - - public B paddingLeft(final float padding) { - settings.setPaddingLeft(padding); - return (B) this; - } - - public B paddingRight(final float padding) { - settings.setPaddingRight(padding); - return (B) this; - } - - public B horizontalAlignment(final HorizontalAlignment alignment) { - settings.setHorizontalAlignment(alignment); - return (B) this; - } - - public B verticalAlignment(final VerticalAlignment alignment) { - settings.setVerticalAlignment(alignment); - return (B) this; - } - - public B backgroundColor(final Color backgroundColor) { - settings.setBackgroundColor(backgroundColor); - return (B) this; - } - - public B borderColor(final Color borderColor) { - settings.setBorderColor(borderColor); - return (B) this; - } - - public B wordBreak(final Boolean wordBreak) { - settings.setWordBreak(wordBreak); - return (B) this; - } - }*/ } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/AbstractTextCell.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/AbstractTextCell.java index 3954231..9d0aced 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/AbstractTextCell.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/AbstractTextCell.java @@ -78,23 +78,4 @@ public abstract class AbstractTextCell extends AbstractCell { public float getMaxWidth() { return getMaxWidthOfText() - getHorizontalPadding(); } - - /*public abstract static class AbstractTextCellBuilder> extends AbstractCellBuilder { - - public B font(final Font font) { - settings.setFont(font); - return (B) this; - } - - public B fontSize(final Integer fontSize) { - settings.setFontSize(fontSize); - return (B) this; - } - - public B textColor(final Color textColor) { - settings.setTextColor(textColor); - return (B) this; - } - - }*/ } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/ParagraphCell.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/ParagraphCell.java index 4bad104..bc1dbbe 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/ParagraphCell.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/ParagraphCell.java @@ -76,59 +76,5 @@ public class ParagraphCell extends AbstractCell { public org.xbib.graphics.pdfbox.layout.elements.Paragraph getWrappedParagraph() { return wrappedParagraph; } - - /*public static class ParagraphBuilder { - - private final List processables = new LinkedList<>(); - - private ParagraphBuilder() { - } - - public ParagraphBuilder append(StyledText styledText) { - processables.add(styledText); - return this; - } - - public ParagraphBuilder append(Hyperlink hyperlink) { - processables.add(hyperlink); - return this; - } - - public ParagraphBuilder append(Markup markup) { - processables.add(markup); - return this; - } - - public ParagraphBuilder appendNewLine(Font font, float fontSize) { - processables.add(new NewLine(font, fontSize)); - return this; - } - - public Paragraph build() { - return new Paragraph(processables); - } - } - - public static ParagraphBuilder builder() { - return new ParagraphBuilder(); - }*/ } - - /*public abstract static class ParagraphCellBuilder> extends AbstractCellBuilder { - - public B font(final Font font) { - settings.setFont(font); - return (B) this; - } - - public B fontSize(final Integer fontSize) { - settings.setFontSize(fontSize); - return (B) this; - } - - public B textColor(final Color textColor) { - settings.setTextColor(textColor); - return (B) this; - } - }*/ } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/PdfUtil.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/PdfUtil.java index bdc8b4a..180ccb0 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/PdfUtil.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/PdfUtil.java @@ -26,7 +26,7 @@ public final class PdfUtil { * @param fontSize FontSize of String * @return Width (in points) */ - public static float getStringWidth(final String text, final Font font, final int fontSize) { + public static float getStringWidth(String text, Font font, int fontSize) { return Arrays.stream(text.split(NEW_LINE_REGEX)) .max(Comparator.comparing(String::length)) .map(x -> { @@ -40,25 +40,20 @@ public final class PdfUtil { } private static float getWidthOfStringWithoutNewlines(String text, Font font, int fontSize) throws IOException { - - final List codePointsAsString = text.codePoints() + List codePointsAsString = text.codePoints() .mapToObj(codePoint -> new String(new int[]{codePoint}, 0, 1)) .collect(Collectors.toList()); - List widths = new ArrayList<>(); - - for (final String codepoint : codePointsAsString) { + for (String codepoint : codePointsAsString) { try { widths.add(font.getRegularFont().getStringWidth(codepoint) * fontSize / 1000F); } catch (final IllegalArgumentException | IOException e) { widths.add(font.getRegularFont().getStringWidth("–") * fontSize / 1000F); } } - return widths.stream().reduce(0.0f, Float::sum); } - /** * Computes the height of a font. * @@ -66,7 +61,7 @@ public final class PdfUtil { * @param fontSize FontSize * @return Height of font */ - public static float getFontHeight(Font font, final int fontSize) { + public static float getFontHeight(Font font, int fontSize) { return font.getRegularFont().getFontDescriptor().getCapHeight() * fontSize / 1000F; } @@ -79,21 +74,20 @@ public final class PdfUtil { * @param maxWidth Maximal width of resulting text-lines * @return A list of lines, where all are smaller than maxWidth */ - public static List getOptimalTextBreakLines(final String text, final Font font, final int fontSize, final float maxWidth) { + public static List getOptimalTextBreakLines(String text, Font font, int fontSize, float maxWidth) { List result = new ArrayList<>(); - for (final String line : text.split(NEW_LINE_REGEX)) { + for (String line : text.split(NEW_LINE_REGEX)) { if (PdfUtil.doesTextLineFit(line, font, fontSize, maxWidth)) { result.add(line); } else { result.addAll(PdfUtil.wrapLine(line, font, fontSize, maxWidth)); } } - return result; } - private static List wrapLine(final String line, final Font font, final int fontSize, final float maxWidth) { - if (PdfUtil.doesTextLineFit(line, font, fontSize, maxWidth)) { + private static List wrapLine(String line, Font font, int fontSize, float maxWidth) { + if (doesTextLineFit(line, font, fontSize, maxWidth)) { return Collections.singletonList(line); } List goodLines = new ArrayList<>(); @@ -106,7 +100,7 @@ public final class PdfUtil { return goodLines; } - private static List splitBySize(final String line, final Font font, final int fontSize, final float maxWidth) { + private static List splitBySize(String line, Font font, int fontSize, float maxWidth) { List returnList = new ArrayList<>(); for (int i = line.length() - 1; i > 0; i--) { String fittedNewLine = line.substring(0, i) + "-"; @@ -120,11 +114,10 @@ public final class PdfUtil { return returnList; } - - private static String buildALine(final Stack words, - final Font font, - final int fontSize, - final float maxWidth) { + private static String buildALine(Stack words, + Font font, + int fontSize, + float maxWidth) { StringBuilder line = new StringBuilder(); float width = 0; while (!words.empty()) { 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 3/5] 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' From 2bfb9c1803328339faa4db74babbf4c5f01dac92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Thu, 18 Mar 2021 14:32:42 +0100 Subject: [PATCH 4/5] Windows printing --- build.gradle | 3 +++ gradle/compile/java.gradle | 1 + gradle/publishing/publication.gradle | 18 ++++++++++-------- graphics-pdfbox-print/build.gradle | 3 +++ .../src/main/java/module-info.java | 1 + .../graphics/pdfbox/print/PrintUtility.java | 12 ++++++++++++ .../pdfbox/print/test/PrinterTest.java | 7 +++---- 7 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 graphics-pdfbox-print/build.gradle diff --git a/build.gradle b/build.gradle index 1c498be..41397a3 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,9 @@ ext { subprojects { apply plugin: 'java-library' + repositories { + mavenCentral() + } apply from: rootProject.file('gradle/ide/idea.gradle') apply from: rootProject.file('gradle/compile/java.gradle') apply from: rootProject.file('gradle/test/junit5.gradle') diff --git a/gradle/compile/java.gradle b/gradle/compile/java.gradle index c983c98..971a348 100644 --- a/gradle/compile/java.gradle +++ b/gradle/compile/java.gradle @@ -36,6 +36,7 @@ artifacts { } tasks.withType(JavaCompile) { + options.encoding('UTF-8') options.compilerArgs << '-Xlint:all' } diff --git a/gradle/publishing/publication.gradle b/gradle/publishing/publication.gradle index a0f826e..eead1e0 100644 --- a/gradle/publishing/publication.gradle +++ b/gradle/publishing/publication.gradle @@ -54,13 +54,15 @@ if (project.hasProperty("signing.keyId")) { } } -nexusPublishing { - repositories { - sonatype { - username = project.property('ossrhUsername') - password = project.property('ossrhPassword') - packageGroup = "org.xbib" +if (project.hasProperty('ossrhUsername')) { + nexusPublishing { + repositories { + sonatype { + username = project.property('ossrhUsername') + password = project.property('ossrhPassword') + packageGroup = "org.xbib" + } } + clientTimeout = Duration.ofSeconds(600) } - clientTimeout = Duration.ofSeconds(600) -} +} \ No newline at end of file diff --git a/graphics-pdfbox-print/build.gradle b/graphics-pdfbox-print/build.gradle new file mode 100644 index 0000000..4d7c572 --- /dev/null +++ b/graphics-pdfbox-print/build.gradle @@ -0,0 +1,3 @@ +dependencies { + api "org.apache.pdfbox:pdfbox:${project.property('pdfbox.version')}" +} diff --git a/graphics-pdfbox-print/src/main/java/module-info.java b/graphics-pdfbox-print/src/main/java/module-info.java index 7c4f9f4..4c9a1db 100644 --- a/graphics-pdfbox-print/src/main/java/module-info.java +++ b/graphics-pdfbox-print/src/main/java/module-info.java @@ -2,4 +2,5 @@ module org.xbib.graphics.pdfbox.print { exports org.xbib.graphics.pdfbox.print; requires java.logging; requires transitive java.desktop; + requires org.apache.pdfbox; } diff --git a/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java b/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java index 01ffb58..c6fd23c 100644 --- a/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java +++ b/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java @@ -1,5 +1,8 @@ package org.xbib.graphics.pdfbox.print; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.printing.PDFPageable; + import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; @@ -18,6 +21,7 @@ import javax.print.attribute.standard.PrinterMakeAndModel; import javax.print.attribute.standard.SheetCollate; import javax.print.attribute.standard.Sides; +import java.awt.print.PrinterJob; import java.io.InputStream; import java.util.ArrayList; import java.util.List; @@ -83,6 +87,14 @@ public class PrintUtility { job.print(doc, pas); } + public static void print(InputStream inputStream, Printer printer) throws Exception { + PDDocument document = PDDocument.load(inputStream); + PrinterJob job = PrinterJob.getPrinterJob(); + job.setPageable(new PDFPageable(document)); + job.setPrintService(printer.getService()); + job.print(); + } + public static Printer getPrinter(String printerName, DocFlavor docFlavor) { Printer printer = null; if (printerName != null) { 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 index d9aaadb..aab9cc0 100644 --- 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 @@ -14,15 +14,14 @@ public class PrinterTest { @Test public void testPrinterSelection() { - logger.log(Level.INFO, "printer = " + PrintUtility.findPrinters(DocFlavor.INPUT_STREAM.PDF)); + logger.log(Level.INFO, "printer = " + PrintUtility.findPrinters(DocFlavor.INPUT_STREAM.AUTOSENSE)); } @Test public void print() throws Exception { - Printer printer = PrintUtility.getPrinter("Samsung_ML-1610", DocFlavor.INPUT_STREAM.PDF); + Printer printer = PrintUtility.getPrinter("Samsung ML-1610 (USB001)", DocFlavor.INPUT_STREAM.AUTOSENSE); if (printer != null) { - PrintUtility.print(getClass().getResourceAsStream("/test.pdf"), DocFlavor.INPUT_STREAM.PDF, printer); + PrintUtility.print(getClass().getResourceAsStream("/test.pdf"), printer); } } - } From 46c900ad3e94f57bbc292c043397938dec7d9166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Prante?= Date: Thu, 18 Mar 2021 18:04:33 +0100 Subject: [PATCH 5/5] comment removed --- .../java/org/xbib/graphics/pdfbox/print/PrintUtility.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java b/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java index c6fd23c..5dfc5e4 100644 --- a/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java +++ b/graphics-pdfbox-print/src/main/java/org/xbib/graphics/pdfbox/print/PrintUtility.java @@ -110,13 +110,6 @@ public class PrintUtility { PrintService service = PrintServiceLookup.lookupDefaultPrintService(); printer = createPrinter(service); } - /*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; }