diff --git a/gradle.properties b/gradle.properties index 09cd9c8..d907a09 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = org.xbib.graphics name = graphics -version = 4.5.1 +version = 4.5.2 org.gradle.warning.mode = ALL diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/Document.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/Document.java index 6100b46..693a9f6 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/Document.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/Document.java @@ -157,6 +157,14 @@ public class Document implements Element, Closeable, RenderListener { "NotoSans-BoldItalic.ttf"); } + public void registerNotoSansHebrewFont() throws IOException { + registerFont("notosanshebrew", + "NotoSansHebrew-Regular.ttf", + "NotoSansHebrew-Bold.ttf", + "NotoSansHebrew-Regular.ttf", + "NotoSansHebrew-Bold.ttf"); + } + public void registerNotoSansCJKSCFont() throws IOException { registerFont("notosanscjksc", "NotoSansCJKsc-Regular.ttf", diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/DocumentCommand.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/DocumentCommand.java index 133d934..4b99de3 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/DocumentCommand.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/DocumentCommand.java @@ -78,6 +78,7 @@ public class DocumentCommand implements Command { case "times" -> document.registerFont("times", BaseFont.TIMES); case "courier" -> document.registerFont("courier", BaseFont.COURIER); case "notosans" -> document.registerNotoSansFont(); + case "notosanshebrew" -> document.registerNotoSansHebrewFont(); case "notosanscjksc" -> document.registerNotoSansCJKSCFont(); case "opensans" -> document.registerOpenSansFont(); case "sourcesans" -> document.registerSourceSansFont(); diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/MarkupCommand.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/MarkupCommand.java index 3992346..ea13759 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/MarkupCommand.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/MarkupCommand.java @@ -20,6 +20,9 @@ public class MarkupCommand implements Command { @Override public void execute(Engine engine, State state, Settings settings) { String text = settings.get("text"); + if (text == null) { + text = settings.get("value"); + } TextElement textElement = new TextElement(true, text); String[] fonts = settings.getAsArray("font"); float fontsize = settings.getAsFloat("fontsize", 10.0f); diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/TextCommand.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/TextCommand.java index 9145854..8535982 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/TextCommand.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/TextCommand.java @@ -17,9 +17,15 @@ import static org.xbib.graphics.pdfbox.layout.util.PdfUtil.mmToPt; public class TextCommand implements Command { + public TextCommand() { + } + @Override public void execute(Engine engine, State state, Settings settings) { String text = settings.get("text"); + if (text == null) { + text = settings.get("value"); + } TextElement textElement = new TextElement(false, text); String[] fonts = settings.getAsArray("font"); float fontsize = settings.getAsFloat("fontsize", 10.0f); diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/FontDescriptor.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/FontDescriptor.java index f1fa5aa..a52c8ec 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/FontDescriptor.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/FontDescriptor.java @@ -68,7 +68,7 @@ public class FontDescriptor { } } } - throw new IllegalStateException(); + throw new IllegalStateException("while searching a font for text = '" + text + "'"); } @Override diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/text/StyledText.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/text/StyledText.java index 80d08a1..b6268fc 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/text/StyledText.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/text/StyledText.java @@ -124,6 +124,9 @@ public class StyledText implements TextFragment { * @throws IOException by pdfbox. */ public float getAscent() throws IOException { + if (text == null || text.isEmpty()) { + return 0f; + } return getFontDescriptor().getSize() * getFontDescriptor().getSelectedFont(text).getFontDescriptor().getAscent() / 1000; } @@ -179,6 +182,9 @@ public class StyledText implements TextFragment { } private static float getWidth(FontDescriptor fontDescriptor, String text) { + if (text == null || text.isEmpty()) { + return 0f; + } try { return fontDescriptor.getSize() * fontDescriptor.getSelectedFont(text).getStringWidth(text) / 1000; } catch (Exception e) { diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/text/TextLine.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/text/TextLine.java index e4e32c2..b7ba3bd 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/text/TextLine.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/text/TextLine.java @@ -203,20 +203,20 @@ public class TextLine implements TextSequence { if (transform != null) { matrix = matrix.multiply(transform.getMatrix()); } - contentStream.beginText(); - contentStream.setTextMatrix(matrix); - if (!styledText.getFontDescriptor().equals(lastFontDesc)) { - lastFontDesc = styledText.getFontDescriptor(); - contentStream.setFont(lastFontDesc.getSelectedFont(styledText.getText()), lastFontDesc.getSize()); - } - if (!styledText.getColor().equals(lastColor)) { - lastColor = styledText.getColor(); - contentStream.setNonStrokingColor(lastColor); - } if (!styledText.getText().isEmpty()) { + contentStream.beginText(); + contentStream.setTextMatrix(matrix); + if (!styledText.getFontDescriptor().equals(lastFontDesc)) { + lastFontDesc = styledText.getFontDescriptor(); + contentStream.setFont(lastFontDesc.getSelectedFont(styledText.getText()), lastFontDesc.getSize()); + } + if (!styledText.getColor().equals(lastColor)) { + lastColor = styledText.getColor(); + contentStream.setNonStrokingColor(lastColor); + } contentStream.showText(styledText.getText()); + contentStream.endText(); } - contentStream.endText(); if (drawListener != null) { drawListener.drawn(styledText, new Position(x, y + styledText.getAscent()), diff --git a/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansHebrew-Bold.ttf b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansHebrew-Bold.ttf new file mode 100644 index 0000000..04e5eb0 Binary files /dev/null and b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansHebrew-Bold.ttf differ diff --git a/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansHebrew-Regular.ttf b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansHebrew-Regular.ttf new file mode 100644 index 0000000..ca7a0fd Binary files /dev/null and b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansHebrew-Regular.ttf differ