diff --git a/gradle.properties b/gradle.properties index 484a237..00484a0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ group = org.xbib.graphics name = graphics -version = 5.6.1 +version = 5.7.0 diff --git a/graphics-barcode/src/main/java/module-info.java b/graphics-barcode/src/main/java/module-info.java index ec1dc7f..5e67984 100644 --- a/graphics-barcode/src/main/java/module-info.java +++ b/graphics-barcode/src/main/java/module-info.java @@ -46,8 +46,8 @@ module org.xbib.graphics.barcode { exports org.xbib.graphics.barcode; exports org.xbib.graphics.barcode.util; exports org.xbib.graphics.barcode.render; - requires transitive java.desktop; - requires transitive org.xbib.graphics.zxing; + requires java.desktop; + requires org.xbib.graphics.zxing; provides SymbolProvider with AustraliaPost.Provider, AztecCode.Provider, diff --git a/graphics-chart/src/main/java/module-info.java b/graphics-chart/src/main/java/module-info.java index 3e1e1dc..2cb8d2c 100644 --- a/graphics-chart/src/main/java/module-info.java +++ b/graphics-chart/src/main/java/module-info.java @@ -17,5 +17,5 @@ module org.xbib.graphics.chart { requires org.xbib.graphics.io.vector.eps; requires org.xbib.graphics.io.vector.pdf; requires org.xbib.graphics.io.vector.svg; - requires transitive java.desktop; + requires java.desktop; } diff --git a/graphics-fonts-arabic/src/main/java/module-info.java b/graphics-fonts-arabic/src/main/java/module-info.java index 4b6ad3e..01771bc 100644 --- a/graphics-fonts-arabic/src/main/java/module-info.java +++ b/graphics-fonts-arabic/src/main/java/module-info.java @@ -3,6 +3,7 @@ import org.xbib.graphics.fonts.arabic.ArabicFontEmbedder; module org.xbib.graphics.fonts.arabic { requires org.xbib.graphics.fonts; + requires org.apache.pdfbox; exports org.xbib.graphics.fonts.arabic; provides FontEmbedder with ArabicFontEmbedder; } diff --git a/graphics-fonts-cjk/src/main/java/module-info.java b/graphics-fonts-cjk/src/main/java/module-info.java index 967b704..e053471 100644 --- a/graphics-fonts-cjk/src/main/java/module-info.java +++ b/graphics-fonts-cjk/src/main/java/module-info.java @@ -3,6 +3,7 @@ import org.xbib.graphics.fonts.cjk.CJKFontEmbedder; module org.xbib.graphics.fonts.cjk { requires org.xbib.graphics.fonts; + requires org.apache.pdfbox; exports org.xbib.graphics.fonts.cjk; provides FontEmbedder with CJKFontEmbedder; } diff --git a/graphics-fonts-cyrillic/src/main/java/module-info.java b/graphics-fonts-cyrillic/src/main/java/module-info.java index 0d69a72..89466a4 100644 --- a/graphics-fonts-cyrillic/src/main/java/module-info.java +++ b/graphics-fonts-cyrillic/src/main/java/module-info.java @@ -3,5 +3,6 @@ import org.xbib.graphics.fonts.cyrillic.CyrillicFontEmbedder; module org.xbib.graphics.fonts.cyrillic { requires org.xbib.graphics.fonts; + requires org.apache.pdfbox; provides FontEmbedder with CyrillicFontEmbedder; } diff --git a/graphics-fonts-hebrew/src/main/java/module-info.java b/graphics-fonts-hebrew/src/main/java/module-info.java index 2597614..768ee39 100644 --- a/graphics-fonts-hebrew/src/main/java/module-info.java +++ b/graphics-fonts-hebrew/src/main/java/module-info.java @@ -3,5 +3,6 @@ import org.xbib.graphics.fonts.hebrew.HebrewFontEmbedder; module org.xbib.graphics.fonts.hebrew { requires org.xbib.graphics.fonts; + requires org.apache.pdfbox; provides FontEmbedder with HebrewFontEmbedder; } diff --git a/graphics-fonts-latin/src/main/java/module-info.java b/graphics-fonts-latin/src/main/java/module-info.java index 5b62c25..6c72337 100644 --- a/graphics-fonts-latin/src/main/java/module-info.java +++ b/graphics-fonts-latin/src/main/java/module-info.java @@ -5,6 +5,7 @@ import org.xbib.graphics.fonts.latin.SourceSansFontEmbedder; module org.xbib.graphics.fonts.latin { requires org.xbib.graphics.fonts; + requires org.apache.pdfbox; provides FontEmbedder with NotoSansFontEmbedder, OpenSansFontEmbedder, SourceSansFontEmbedder; diff --git a/graphics-fonts/src/main/java/module-info.java b/graphics-fonts/src/main/java/module-info.java index 26e1696..3570881 100644 --- a/graphics-fonts/src/main/java/module-info.java +++ b/graphics-fonts/src/main/java/module-info.java @@ -1,8 +1,8 @@ module org.xbib.graphics.fonts { requires java.logging; - requires transitive java.desktop; - requires transitive org.apache.fontbox; - requires transitive org.apache.pdfbox; + requires java.desktop; + requires org.apache.fontbox; + requires org.apache.pdfbox; requires org.apache.pdfbox.io; exports org.xbib.graphics.fonts; } diff --git a/graphics-ghostscript/src/main/java/module-info.java b/graphics-ghostscript/src/main/java/module-info.java index ef73c3e..3c65cf7 100644 --- a/graphics-ghostscript/src/main/java/module-info.java +++ b/graphics-ghostscript/src/main/java/module-info.java @@ -2,7 +2,7 @@ module org.xbib.graphics.ghostscript { exports org.xbib.graphics.ghostscript; requires com.sun.jna; requires java.logging; - requires transitive java.desktop; - requires transitive org.apache.pdfbox; - requires transitive org.apache.pdfbox.io; + requires java.desktop; + requires org.apache.pdfbox; + requires org.apache.pdfbox.io; } diff --git a/graphics-pdfbox-layout/build.gradle b/graphics-pdfbox-layout/build.gradle index cdf148e..9767372 100644 --- a/graphics-pdfbox-layout/build.gradle +++ b/graphics-pdfbox-layout/build.gradle @@ -3,9 +3,8 @@ dependencies { api project(':graphics-barcode') api project(':graphics-chart') api project(':graphics-fonts') - api libs.datastructures.settings - runtimeOnly libs.datastructures.settings.json - runtimeOnly libs.datastructures.settings.yaml + api libs.settings.api + testImplementation testLibs.settings.json testRuntimeOnly project(':graphics-fonts-arabic') testRuntimeOnly project(':graphics-fonts-latin') testRuntimeOnly project(':graphics-fonts-hebrew') diff --git a/graphics-pdfbox-layout/src/main/java/module-info.java b/graphics-pdfbox-layout/src/main/java/module-info.java index 473c840..129ffdf 100644 --- a/graphics-pdfbox-layout/src/main/java/module-info.java +++ b/graphics-pdfbox-layout/src/main/java/module-info.java @@ -13,10 +13,12 @@ module org.xbib.graphics.layout.pdfbox { exports org.xbib.graphics.pdfbox.layout.text.annotations; exports org.xbib.graphics.pdfbox.layout.util; exports org.xbib.graphics.pdfbox.layout.position; - requires transitive org.xbib.graphics.barcode; - requires transitive org.xbib.graphics.pdfbox; - requires transitive org.xbib.settings.api; - requires org.xbib.settings.datastructures; + requires org.xbib.graphics.barcode; + requires org.xbib.graphics.pdfbox; + requires org.xbib.settings.api; requires org.xbib.graphics.chart; requires org.xbib.graphics.fonts; + requires org.apache.pdfbox; + requires java.desktop; + requires java.logging; } diff --git a/graphics-pdfbox-layout/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader b/graphics-pdfbox-layout/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader deleted file mode 100644 index d3ebb87..0000000 --- a/graphics-pdfbox-layout/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader +++ /dev/null @@ -1 +0,0 @@ -org.xbib.settings.datastructures.PropertiesSettingsLoader diff --git a/graphics-pdfbox-layout/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader b/graphics-pdfbox-layout/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader index 5cbf3d5..a46de0f 100644 --- a/graphics-pdfbox-layout/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader +++ b/graphics-pdfbox-layout/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader @@ -1,2 +1 @@ -org.xbib.settings.datastructures.PropertiesSettingsLoader org.xbib.settings.datastructures.json.JsonSettingsLoader \ No newline at end of file diff --git a/graphics-pdfbox-print/src/main/java/module-info.java b/graphics-pdfbox-print/src/main/java/module-info.java index 4c9a1db..54d34d5 100644 --- a/graphics-pdfbox-print/src/main/java/module-info.java +++ b/graphics-pdfbox-print/src/main/java/module-info.java @@ -1,6 +1,6 @@ module org.xbib.graphics.pdfbox.print { exports org.xbib.graphics.pdfbox.print; requires java.logging; - requires transitive java.desktop; + requires java.desktop; requires org.apache.pdfbox; } diff --git a/graphics-pdfbox/src/main/java/module-info.java b/graphics-pdfbox/src/main/java/module-info.java index 7a61e17..a7bc614 100644 --- a/graphics-pdfbox/src/main/java/module-info.java +++ b/graphics-pdfbox/src/main/java/module-info.java @@ -7,8 +7,8 @@ module org.xbib.graphics.pdfbox { exports org.xbib.graphics.pdfbox.paint; requires org.xbib.graphics.fonts; requires org.xbib.graphics.zxing; - requires transitive org.apache.pdfbox; - requires transitive org.apache.pdfbox.io; - requires transitive java.desktop; + requires org.apache.pdfbox; + requires org.apache.pdfbox.io; + requires java.desktop; requires java.logging; } diff --git a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontTest.java b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontTest.java index a4e8d44..4c12e62 100644 --- a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontTest.java +++ b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontTest.java @@ -11,7 +11,7 @@ import java.io.InputStream; public class FontTest extends PdfBoxGraphics2DTestBase { @Test - public void testAntonioFont() throws IOException, FontFormatException { + public void testAntonioFont() throws Exception { InputStream inputStream = PdfBoxGraphics2dTest.class.getResourceAsStream("antonio/Antonio-Regular.ttf"); if (inputStream != null) { final Font antonioRegular = Font.createFont(Font.TRUETYPE_FONT, inputStream).deriveFont(15f); diff --git a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontWidthDiscrepancyTest.java b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontWidthDiscrepancyTest.java index 26ce2bc..1b24280 100644 --- a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontWidthDiscrepancyTest.java +++ b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontWidthDiscrepancyTest.java @@ -19,7 +19,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; public class FontWidthDiscrepancyTest extends PdfBoxGraphics2DTestBase { @Test - public void testAntonioFontWidth() throws IOException, FontFormatException { + public void testAntonioFontWidth() throws Exception { final String testString = "MMMMMMMMMMMMMMMMMMMMMM"; final float fontSize = 20f; InputStream inputStream = PdfBoxGraphics2dTest.class.getResourceAsStream("antonio/Antonio-Regular.ttf"); diff --git a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2DTestBase.java b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2DTestBase.java index ae17e4e..63cfe5f 100644 --- a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2DTestBase.java +++ b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2DTestBase.java @@ -13,6 +13,7 @@ import org.xbib.graphics.pdfbox.PdfBoxGraphics2D; import org.xbib.graphics.fonts.CoreFontDrawer; import org.xbib.graphics.fonts.DefaultFontDrawer; import org.xbib.graphics.fonts.ForcedFontDrawer; +import org.xbib.graphics.svg.SVGException; import java.awt.FontFormatException; import java.awt.Graphics2D; @@ -29,70 +30,66 @@ class PdfBoxGraphics2DTestBase { DefaultVectorized, FontTextIfPossible, ForceFontText, DefaultFontText } - void exportGraphic(String dir, String name, GraphicsExporter exporter) { - try { - PDDocument document = new PDDocument(); - PDFont helvetica = new PDType1Font(HELVETICA); - File parentDir = new File("build/test/" + dir); - parentDir.mkdirs(); - BufferedImage image = new BufferedImage(400, 400, BufferedImage.TYPE_4BYTE_ABGR); - Graphics2D imageGraphics = image.createGraphics(); - exporter.draw(imageGraphics); - imageGraphics.dispose(); - ImageIO.write(image, "PNG", new File(parentDir, name + ".png")); - for (Mode m : Mode.values()) { - PDPage page = new PDPage(PDRectangle.A4); - document.addPage(page); - PDPageContentStream contentStream = new PDPageContentStream(document, page); - PdfBoxGraphics2D pdfBoxGraphics2D = new PdfBoxGraphics2D(document, 400, 400); - contentStream.beginText(); - contentStream.setStrokingColor(0f, 0f, 0f); - contentStream.setNonStrokingColor(0f, 0f, 0f); - contentStream.setFont(new PDType1Font(HELVETICA_BOLD), 15); - contentStream.setTextMatrix(Matrix.getTranslateInstance(10, 800)); - contentStream.showText("Mode " + m); - contentStream.endText(); - DefaultFontDrawer fontTextDrawer = null; - switch (m) { - case FontTextIfPossible: - fontTextDrawer = new DefaultFontDrawer(); - registerFonts(fontTextDrawer); - break; - case DefaultFontText: { - fontTextDrawer = new CoreFontDrawer(); - registerFonts(fontTextDrawer); - break; - } - case ForceFontText: - fontTextDrawer = new ForcedFontDrawer(); - registerFonts(fontTextDrawer); - fontTextDrawer.registerFont("Arial", helvetica); - break; - case DefaultVectorized: - default: - break; + void exportGraphic(String dir, String name, GraphicsExporter exporter) throws Exception { + PDDocument document = new PDDocument(); + PDFont helvetica = new PDType1Font(HELVETICA); + File parentDir = new File("build/test/" + dir); + parentDir.mkdirs(); + BufferedImage image = new BufferedImage(400, 400, BufferedImage.TYPE_4BYTE_ABGR); + Graphics2D imageGraphics = image.createGraphics(); + exporter.draw(imageGraphics); + imageGraphics.dispose(); + ImageIO.write(image, "PNG", new File(parentDir, name + ".png")); + for (Mode m : Mode.values()) { + PDPage page = new PDPage(PDRectangle.A4); + document.addPage(page); + PDPageContentStream contentStream = new PDPageContentStream(document, page); + PdfBoxGraphics2D pdfBoxGraphics2D = new PdfBoxGraphics2D(document, 400, 400); + contentStream.beginText(); + contentStream.setStrokingColor(0f, 0f, 0f); + contentStream.setNonStrokingColor(0f, 0f, 0f); + contentStream.setFont(new PDType1Font(HELVETICA_BOLD), 15); + contentStream.setTextMatrix(Matrix.getTranslateInstance(10, 800)); + contentStream.showText("Mode " + m); + contentStream.endText(); + DefaultFontDrawer fontTextDrawer = null; + switch (m) { + case FontTextIfPossible: + fontTextDrawer = new DefaultFontDrawer(); + registerFonts(fontTextDrawer); + break; + case DefaultFontText: { + fontTextDrawer = new CoreFontDrawer(); + registerFonts(fontTextDrawer); + break; } - if (fontTextDrawer != null) { - pdfBoxGraphics2D.setFontTextDrawer(fontTextDrawer); - } - exporter.draw(pdfBoxGraphics2D); - pdfBoxGraphics2D.dispose(); - PDFormXObject xFormObject = pdfBoxGraphics2D.getXFormObject(); - Matrix matrix = new Matrix(); - matrix.translate(0, 20); - contentStream.transform(matrix); - contentStream.drawForm(xFormObject); - matrix.scale(1.5f, 1.5f); - matrix.translate(0, 100); - contentStream.transform(matrix); - contentStream.drawForm(xFormObject); - contentStream.close(); + case ForceFontText: + fontTextDrawer = new ForcedFontDrawer(); + registerFonts(fontTextDrawer); + fontTextDrawer.registerFont("Arial", helvetica); + break; + case DefaultVectorized: + default: + break; } - document.save(new File(parentDir, name + ".pdf")); - document.close(); - } catch (Exception e) { - throw new RuntimeException(e); + if (fontTextDrawer != null) { + pdfBoxGraphics2D.setFontTextDrawer(fontTextDrawer); + } + exporter.draw(pdfBoxGraphics2D); + pdfBoxGraphics2D.dispose(); + PDFormXObject xFormObject = pdfBoxGraphics2D.getXFormObject(); + Matrix matrix = new Matrix(); + matrix.translate(0, 20); + contentStream.transform(matrix); + contentStream.drawForm(xFormObject); + matrix.scale(1.5f, 1.5f); + matrix.translate(0, 100); + contentStream.transform(matrix); + contentStream.drawForm(xFormObject); + contentStream.close(); } + document.save(new File(parentDir, name + ".pdf")); + document.close(); } private void registerFonts(DefaultFontDrawer fontTextDrawer) { @@ -102,7 +99,7 @@ class PdfBoxGraphics2DTestBase { } interface GraphicsExporter { - void draw(Graphics2D gfx) throws IOException, FontFormatException; + void draw(Graphics2D gfx) throws IOException, FontFormatException, SVGException; } } diff --git a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2dTest.java b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2dTest.java index b08c289..a7c92b2 100644 --- a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2dTest.java +++ b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2dTest.java @@ -29,11 +29,10 @@ import java.util.Iterator; public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase { @Test - public void testNegativeShapesAndComposite() { + public void testNegativeShapesAndComposite() throws Exception { exportGraphic("simple", "negativeWithComposite", gfx -> { RoundRectangle2D.Float rect = new RoundRectangle2D.Float(10f, 10f, 20f, 20f, 5f, 6f); - AffineTransform transformIdentity = new AffineTransform(); AffineTransform transformMirrored = AffineTransform.getTranslateInstance(0, 100); transformMirrored.scale(1, -0.5); @@ -69,7 +68,7 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase { } @Test - public void testGradients() { + public void testGradients() throws Exception { exportGraphic("simple", "gradients", gfx -> { LinearGradientPaint linearGradientPaint = new LinearGradientPaint(0, 0, 100, 200, new float[]{0.0f, .2f, .4f, .9f, 1f}, @@ -91,7 +90,7 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase { } @Test - public void testBuildPatternFill() { + public void testBuildPatternFill() throws Exception { exportGraphic("simple", "patternfill", gfx -> { Composite composite = gfx.getComposite(); RadialGradientPaint radialGradientPaint = new RadialGradientPaint(200, 200, 200, @@ -109,7 +108,7 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase { } @Test - public void testDifferentFonts() { + public void testDifferentFonts() throws Exception { exportGraphic("simple", "fonts", gfx -> { Font sansSerif = new Font(Font.SANS_SERIF, Font.PLAIN, 15); Font embeddedFont = Font.createFont(Font.TRUETYPE_FONT, @@ -147,15 +146,13 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase { gfx.setFont(f.deriveFont(Font.ITALIC | Font.BOLD)); gfx.drawString(txt, x, y); gfx.getFontMetrics().stringWidth(txt); - y += 30; } - }); } @Test - public void testImageEncoding() { + public void testImageEncoding() throws Exception { exportGraphic("imageenc", "imageenc", gfx -> { BufferedImage img2 = ImageIO .read(PdfBoxGraphics2dTest.class.getResourceAsStream("pixeltest.png")); @@ -178,8 +175,7 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase { } @Test - public void testEvenOddRules() { - + public void testEvenOddRules() throws Exception { exportGraphic("simple", "evenOdd", gfx -> { gfx.setColor(Color.YELLOW); gfx.fillPolygon(new int[]{80, 129, 0, 160, 31}, @@ -202,7 +198,7 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase { } @Test - public void testSimpleGraphics2d() { + public void testSimpleGraphics2d() throws Exception { Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("JPEG"); while (readers.hasNext()) { readers.next(); diff --git a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/RenderSVGsTest.java b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/RenderSVGsTest.java index 46d9265..a32b348 100644 --- a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/RenderSVGsTest.java +++ b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/RenderSVGsTest.java @@ -1,35 +1,35 @@ package org.xbib.graphics.pdfbox.test; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.xbib.graphics.svg.SVGDiagram; -import org.xbib.graphics.svg.SVGException; import org.xbib.graphics.svg.SVGUniverse; -import java.io.IOException; import java.net.URL; +import java.util.logging.Level; +import java.util.logging.Logger; public class RenderSVGsTest extends PdfBoxGraphics2DTestBase { + private static final Logger logger = Logger.getLogger(RenderSVGsTest.class.getName()); + @Test - public void testSVGs() throws IOException { + public void testSVGs() throws Exception { renderSVG("barChart.svg", 0.45); renderSVG("gump-bench.svg", 1); renderSVG("json.svg", 150); renderSVG("heart.svg", 200); renderSVG("displayWebStats.svg", 200); - renderSVG("compuserver_msn_Ford_Focus.svg", 0.7); - renderSVG("watermark.svg", 0.4); + //renderSVG("compuserver_msn_Ford_Focus.svg", 0.7); + //renderSVG("watermark.svg", 0.4); } @Test - public void renderFailureCases() throws IOException { - // renderSVG("openhtml_536.svg", 1); + public void renderFailureCases() throws Exception { renderSVG("openhtml_538_gradient.svg", .5); } @Test - public void testGradientSVGEmulateObjectBoundingBox() throws IOException { + public void testGradientSVGEmulateObjectBoundingBox() throws Exception { renderSVG("long-gradient.svg", 0.55); renderSVG("tall-gradient.svg", 0.33); renderSVG("near-square-gradient.svg", 0.30); @@ -38,22 +38,15 @@ public class RenderSVGsTest extends PdfBoxGraphics2DTestBase { renderSVG("horizontal-gradient.svg", 0.55); } - @Disabled - @Test - public void testSVGinCMYKColorspace() throws IOException { - //renderSVGCMYK("atmospheric-composiition.svg", 0.7); - } - - private void renderSVG(String name, final double scale) { + private void renderSVG(String name, final double scale) throws Exception { + logger.log(Level.INFO, "name = " + name); URL url = getClass().getResource(name); SVGUniverse svgUniverse = new SVGUniverse(); SVGDiagram diagram = svgUniverse.getDiagram(svgUniverse.loadSVG(url)); exportGraphic("xbibsvg", name.replace(".svg", ""), gfx -> { gfx.scale(scale, scale); - try { + if (diagram != null) { diagram.render(gfx); - } catch (SVGException e) { - throw new IllegalArgumentException(e); } }); } diff --git a/graphics-pdfbox/src/test/resources/org/xbib/graphics/pdfbox/test/json.svg b/graphics-pdfbox/src/test/resources/org/xbib/graphics/pdfbox/test/json.svg index 7ec7a92..b02b633 100644 --- a/graphics-pdfbox/src/test/resources/org/xbib/graphics/pdfbox/test/json.svg +++ b/graphics-pdfbox/src/test/resources/org/xbib/graphics/pdfbox/test/json.svg @@ -1,6 +1,6 @@ <!-- Taken from https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/ --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 102"> <radialGradient id="jsongrad" cx="65" cy="90" r="100" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#EEF"/><stop offset="1"/></radialGradient> - <path d="M61,02 A 49,49 0,0,0 39,98 C 9,79 10,24 45,25 C 72,24 65,75 50,75 C 93,79 91,21 62,02" id="jsonswirl" fill="url(#jsongrad)"/> + <path d="M 61,02 A 49,49 0,0,0 39,98 C 9,79 10,24 45,25 C 72,24 65,75 50,75 C 93,79 91,21 62,02" id="jsonswirl" fill="url(#jsongrad)"/> <use xlink:href="#jsonswirl" transform="rotate(180 50,50)"/> </svg> diff --git a/graphics-png/src/main/java/module-info.java b/graphics-png/src/main/java/module-info.java index 62a6858..f8156d2 100644 --- a/graphics-png/src/main/java/module-info.java +++ b/graphics-png/src/main/java/module-info.java @@ -3,5 +3,5 @@ module org.xbib.graphics.png { exports org.xbib.graphics.imageio.plugins.png.pngj; exports org.xbib.graphics.imageio.plugins.png.pngj.chunks; exports org.xbib.graphics.imageio.plugins.png.pngj.pixels; - requires transitive java.desktop; + requires java.desktop; } diff --git a/graphics-svg/src/main/java/module-info.java b/graphics-svg/src/main/java/module-info.java index 3a03a17..d5b07cd 100644 --- a/graphics-svg/src/main/java/module-info.java +++ b/graphics-svg/src/main/java/module-info.java @@ -1,6 +1,4 @@ module org.xbib.graphics.svg { - requires transitive java.desktop; - requires java.logging; exports org.xbib.graphics.svg; exports org.xbib.graphics.svg.element; exports org.xbib.graphics.svg.element.filtereffects; @@ -10,4 +8,6 @@ module org.xbib.graphics.svg { exports org.xbib.graphics.svg.pathcmd; exports org.xbib.graphics.svg.xml; exports org.xbib.graphics.svg.util; -} \ No newline at end of file + requires java.desktop; + requires java.logging; +} diff --git a/graphics-svg/src/main/java/org/xbib/graphics/svg/SVGUniverse.java b/graphics-svg/src/main/java/org/xbib/graphics/svg/SVGUniverse.java index d749655..6b6d8b7 100644 --- a/graphics-svg/src/main/java/org/xbib/graphics/svg/SVGUniverse.java +++ b/graphics-svg/src/main/java/org/xbib/graphics/svg/SVGUniverse.java @@ -113,7 +113,7 @@ public class SVGUniverse { loadedImages.put(url, ref); return url; } catch (IOException ex) { - logger.log(Level.SEVERE, "Could not decode inline image", ex); + logger.log(Level.WARNING, "could not decode inline image: " + ex.getMessage()); } } return null; @@ -123,7 +123,7 @@ public class SVGUniverse { registerImage(url); return url; } catch (MalformedURLException ex) { - logger.log(Level.SEVERE, "Bad url", ex); + logger.log(Level.WARNING, "Bad url: " + ex.getMessage()); } return null; } @@ -150,7 +150,7 @@ public class SVGUniverse { } loadedImages.put(imageURL, ref); } catch (Exception e) { - logger.log(Level.SEVERE, "Could not load image: " + imageURL, e); + logger.log(Level.WARNING, "Could not load image: " + imageURL + " : " + e.getMessage()); } } @@ -177,7 +177,7 @@ public class SVGUniverse { URI uri = new URI(path.toString()); return getElement(uri, true); } catch (Exception e) { - logger.log(Level.SEVERE, "Could not parse url " + path, e); + logger.log(Level.WARNING, "Could not parse URL: " + path); } return null; } @@ -194,7 +194,7 @@ public class SVGUniverse { try { return new URI(scheme, schemeSpecific, frag); } catch (URISyntaxException ex) { - Logger.getLogger(SVGUniverse.class.getName()).log(Level.SEVERE, null, ex); + logger.log(Level.WARNING, ex.getMessage()); } return null; } @@ -216,7 +216,7 @@ public class SVGUniverse { String fragment = path.getFragment(); return fragment == null ? dia.getRoot() : dia.getElement(fragment); } catch (MalformedURLException | URISyntaxException e) { - logger.log(Level.SEVERE, "Could not parse path " + path, e); + logger.log(Level.WARNING, "Could not parse path " + path); return null; } } @@ -244,7 +244,7 @@ public class SVGUniverse { dia = loadedDocs.get(xmlBase); return dia; } catch (Exception e) { - logger.log(Level.SEVERE, "Could not parse", e); + logger.log(Level.WARNING, e.getMessage()); } return null; } @@ -292,7 +292,7 @@ public class SVGUniverse { is.close(); return result; } catch (URISyntaxException | IOException ex) { - logger.log(Level.SEVERE, "Could not parse", ex); + logger.log(Level.WARNING, ex.getMessage()); } return null; } @@ -324,7 +324,7 @@ public class SVGUniverse { try { return new URI("svg", name, null); } catch (Exception e) { - logger.log(Level.SEVERE, "Could not parse", e); + logger.log(Level.WARNING, e.getMessage()); return null; } } @@ -354,11 +354,11 @@ public class SVGUniverse { handler.getLoadedDiagram().updateTime(curTime); return xmlBase; } catch (SAXParseException sex) { - logger.log(Level.SEVERE, "Error processing " + xmlBase, sex); + logger.log(Level.WARNING, "error processing " + xmlBase); loadedDocs.remove(xmlBase); return null; } catch (Throwable e) { - logger.log(Level.SEVERE, "Could not load SVG " + xmlBase, e); + logger.log(Level.WARNING, "could not load SVG " + xmlBase); } return null; } diff --git a/graphics-vector-eps/src/main/java/module-info.java b/graphics-vector-eps/src/main/java/module-info.java index e399390..43a2db7 100644 --- a/graphics-vector-eps/src/main/java/module-info.java +++ b/graphics-vector-eps/src/main/java/module-info.java @@ -1,6 +1,7 @@ module org.xbib.graphics.io.vector.eps { exports org.xbib.graphics.io.vector.eps; - requires transitive org.xbib.graphics.io.vector; + requires org.xbib.graphics.io.vector; + requires java.desktop; provides org.xbib.graphics.io.vector.VectorGraphics2DProvider with org.xbib.graphics.io.vector.eps.EPSGraphics2DProvider; } diff --git a/graphics-vector-pdf/src/main/java/module-info.java b/graphics-vector-pdf/src/main/java/module-info.java index 42fa0c2..7f6c08a 100644 --- a/graphics-vector-pdf/src/main/java/module-info.java +++ b/graphics-vector-pdf/src/main/java/module-info.java @@ -1,6 +1,7 @@ module org.xbib.graphics.io.vector.pdf { exports org.xbib.graphics.io.vector.pdf; - requires transitive org.xbib.graphics.io.vector; + requires org.xbib.graphics.io.vector; + requires java.desktop; provides org.xbib.graphics.io.vector.VectorGraphics2DProvider with org.xbib.graphics.io.vector.pdf.PDFGraphics2DProvider; } diff --git a/graphics-vector-svg/src/main/java/module-info.java b/graphics-vector-svg/src/main/java/module-info.java index 2a3d589..958a815 100644 --- a/graphics-vector-svg/src/main/java/module-info.java +++ b/graphics-vector-svg/src/main/java/module-info.java @@ -1,6 +1,7 @@ module org.xbib.graphics.io.vector.svg { exports org.xbib.graphics.io.vector.svg; - requires transitive org.xbib.graphics.io.vector; + requires org.xbib.graphics.io.vector; + requires java.desktop; provides org.xbib.graphics.io.vector.VectorGraphics2DProvider with org.xbib.graphics.io.vector.svg.SVGGraphics2DProvider; } diff --git a/graphics-vector/src/main/java/module-info.java b/graphics-vector/src/main/java/module-info.java index cfb2ba2..632bd05 100644 --- a/graphics-vector/src/main/java/module-info.java +++ b/graphics-vector/src/main/java/module-info.java @@ -2,5 +2,5 @@ module org.xbib.graphics.io.vector { exports org.xbib.graphics.io.vector; exports org.xbib.graphics.io.vector.commands; exports org.xbib.graphics.io.vector.filters; - requires transitive java.desktop; + requires java.desktop; } \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 35d145f..80620ac 100644 --- a/settings.gradle +++ b/settings.gradle @@ -16,11 +16,11 @@ dependencyResolutionManagement { versionCatalogs { libs { version('gradle', '8.7') - version('groovy', '4.0.21') - version('datastructures', '5.1.1') + version('groovy', '4.0.26') + version('datastructures', '5.2.4') library('groovy', 'org.apache.groovy', 'groovy').versionRef('groovy') library('groovy-xml', 'org.apache.groovy', 'groovy-xml').versionRef('groovy') - library('jna', 'net.java.dev.jna', 'jna').version('5.14.0') + library('jna', 'net.java.dev.jna', 'jna').version('5.16.0') library('pdfbox', 'org.apache.pdfbox', 'pdfbox').version('4.0.0-SNAPSHOT') library('pdfbox.jbig2', 'org.apache.pdfbox', 'jbig2-imageio').version('3.0.4') library('jai-jpeg2000', 'com.github.jai-imageio', 'jai-imageio-jpeg2000').version('1.4.0') @@ -30,22 +30,23 @@ dependencyResolutionManagement { library('asm', 'org.ow2.asm', 'asm').version('9.6') library('asm-commons', 'org.ow2.asm', 'asm-commons').version('9.6') library('asm-util', 'org.ow2.asm', 'asm-util').version('9.6') - library('datastructures-settings', 'org.xbib', 'settings-datastructures').versionRef('datastructures') - library('datastructures-settings-json', 'org.xbib', 'settings-datastructures-json').versionRef('datastructures') - library('datastructures-settings-yaml', 'org.xbib', 'settings-datastructures-yaml').versionRef('datastructures') + library('settings-api', 'org.xbib', 'settings-api').versionRef('datastructures') + library('settings', 'org.xbib', 'settings-datastructures').versionRef('datastructures') + //library('settings-yaml', 'org.xbib', 'settings-datastructures-yaml').versionRef('datastructures') } testLibs { - version('groovy', '4.0.21') - version('junit', '5.10.2') + version('groovy', '4.0.26') + version('junit', '5.12.0') version('junit4', '4.13.2') version('spock', '2.4-M1-groovy-4.0') + version('datastructures', '5.2.4') library('junit-jupiter-api', 'org.junit.jupiter', 'junit-jupiter-api').versionRef('junit') library('junit-jupiter-params', 'org.junit.jupiter', 'junit-jupiter-params').versionRef('junit') library('junit-jupiter-engine', 'org.junit.jupiter', 'junit-jupiter-engine').versionRef('junit') library('junit-jupiter-vintage', 'org.junit.vintage', 'junit-vintage-engine').versionRef('junit') - library('junit-jupiter-platform-launcher', 'org.junit.platform', 'junit-platform-launcher').version('1.10.1') + library('junit-jupiter-platform-launcher', 'org.junit.platform', 'junit-platform-launcher').version('1.12.0') library('junit4', 'junit', 'junit').versionRef('junit4') - library('hamcrest', 'org.hamcrest', 'hamcrest-library').version('2.2') + library('hamcrest', 'org.hamcrest', 'hamcrest-library').version('3.0') library('groovy', 'org.apache.groovy', 'groovy').versionRef('groovy') library('groovy-json', 'org.apache.groovy', 'groovy-json').versionRef('groovy') library('groovy-nio', 'org.apache.groovy', 'groovy-nio').versionRef('groovy') @@ -59,6 +60,7 @@ dependencyResolutionManagement { library('reflections', 'org.reflections', 'reflections').version('0.9.11') library('jfreechart', 'org.jfree', 'jfreechart').version('1.5.2') library('assertj', 'org.assertj', 'assertj-core').version('3.25.3') + library('settings-json', 'org.xbib', 'settings-datastructures-json').versionRef('datastructures') } } }