From b62aacfe593e7aa8ef361140bacc273217162370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Prante?= Date: Sat, 26 Aug 2023 09:38:03 +0200 Subject: [PATCH] table cells use font descriptor now --- gradle.properties | 2 +- .../scripting/command/CellCommand.java | 26 ++++-- .../element/scripting/command/RowCommand.java | 20 ++++- .../pdfbox/layout/font/FontDescriptor.java | 4 + .../pdfbox/layout/table/AbstractTextCell.java | 20 ++--- .../pdfbox/layout/table/Hyperlink.java | 25 ++---- .../graphics/pdfbox/layout/table/Markup.java | 28 ++----- .../pdfbox/layout/table/Parameters.java | 36 ++++---- .../graphics/pdfbox/layout/table/Row.java | 11 +-- .../pdfbox/layout/table/StyledText.java | 32 ++----- .../graphics/pdfbox/layout/table/Table.java | 27 ++---- .../pdfbox/layout/table/TextCell.java | 11 +-- .../table/render/PositionedStyledText.java | 19 ++--- .../layout/table/render/TextCellRenderer.java | 27 +++--- .../render/VerticalTextCellRenderer.java | 51 +++++++----- .../graphics/pdfbox/layout/util/PdfUtil.java | 83 +++++++++++-------- .../pdfbox/layout/util/RenderUtil.java | 27 +++--- .../pdfbox/layout/test/table/TableTest.java | 13 +-- .../pdfbox/layout/test/scripting.json | 42 ++++++++-- .../pdfbox/layout/test/scriptingtable.json | 51 +++++++++--- 20 files changed, 289 insertions(+), 266 deletions(-) diff --git a/gradle.properties b/gradle.properties index cb6e5c5..bb13e2b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = org.xbib.graphics name = graphics -version = 4.5.4 +version = 4.5.6 org.gradle.warning.mode = ALL diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/CellCommand.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/CellCommand.java index 49735c7..ab5af91 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/CellCommand.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/CellCommand.java @@ -6,6 +6,7 @@ import org.xbib.graphics.pdfbox.layout.element.Paragraph; import org.xbib.graphics.pdfbox.layout.font.Font; import org.xbib.graphics.pdfbox.layout.element.scripting.Engine; import org.xbib.graphics.pdfbox.layout.element.scripting.State; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import org.xbib.graphics.pdfbox.layout.table.BorderStyle; import org.xbib.graphics.pdfbox.layout.table.BorderStyleInterface; import org.xbib.graphics.pdfbox.layout.table.HorizontalAlignment; @@ -19,6 +20,8 @@ import org.xbib.settings.Settings; import java.awt.Color; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; import static org.xbib.graphics.pdfbox.layout.util.PdfUtil.mmToPt; @@ -39,10 +42,18 @@ public class CellCommand implements Command { cell.padding(paddingLeft, paddingRight, paddingTop, paddingBottom); } cell.text(settings.get("text")); - cell.fontSize(settings.getAsFloat("fontsize", 11.0f)); Document document = state.getDocument(); - Font font = document.getFont(settings.get("font", "helvetica").toUpperCase(Locale.ROOT)); - cell.font(font); + List list = new ArrayList<>(); + for (String fontName : settings.getAsArray("font")) { + Font font = document.getFont(fontName); + if (font == null) { + throw new IllegalArgumentException("font not specified in document: " + fontName); + } else { + list.add(font); + } + } + float fontSize = settings.getAsFloat("fontsize", 11.0f); + cell.fontDescriptor(new FontDescriptor(list, fontSize)); Color color = ColorFactory.web(settings.get("color", "black")); cell.textColor(color); if (settings.containsSetting("backgroundcolor")) { @@ -84,10 +95,11 @@ public class CellCommand implements Command { paragraph.setLineSpacing(linespacing); cell.paragraph(paragraph); String value = settings.get("markup"); - float size = settings.getAsFloat("fontsize", 11.0f); - Document document = state.getDocument(); - Font font = document.getFont(settings.get("font", "helvetica")); - cell.add(new Markup().setValue(value).setFont(font).setFontSize(size)); + List list = new ArrayList<>(); + for (String fontName : settings.getAsArray("font")) { + list.add(state.getDocument().getFont(fontName)); + } + cell.add(new Markup().setValue(value).setFontDescriptor(new FontDescriptor(list, settings.getAsFloat("fontsize", 11.0f)))); cell.lineSpacing(linespacing); state.getElements().peek().add(cell.build()); } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/RowCommand.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/RowCommand.java index 0e9991d..c963bdf 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/RowCommand.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/element/scripting/command/RowCommand.java @@ -1,9 +1,10 @@ package org.xbib.graphics.pdfbox.layout.element.scripting.command; import org.xbib.graphics.pdfbox.layout.color.ColorFactory; -import org.xbib.graphics.pdfbox.layout.element.Document; import org.xbib.graphics.pdfbox.layout.element.scripting.Engine; import org.xbib.graphics.pdfbox.layout.element.scripting.State; +import org.xbib.graphics.pdfbox.layout.font.Font; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import org.xbib.graphics.pdfbox.layout.table.BorderStyle; import org.xbib.graphics.pdfbox.layout.table.BorderStyleInterface; import org.xbib.graphics.pdfbox.layout.table.HorizontalAlignment; @@ -13,6 +14,8 @@ import org.xbib.settings.Settings; import java.awt.Color; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; public class RowCommand implements Command { @@ -29,9 +32,18 @@ public class RowCommand implements Command { float paddingBottom = Float.parseFloat(paddings[3]); row.padding(paddingLeft, paddingRight, paddingTop, paddingBottom); } - row.fontSize(settings.getAsFloat("fontsize", 11.0f)); - Document document = state.getDocument(); - row.font(document.getFont(settings.get("font", "helvetica"))); + List list = new ArrayList<>(); + for (String fontName : settings.getAsArray("font")) { + Font font = state.getDocument().getFont(fontName); + if (font == null) { + throw new IllegalArgumentException("font not specified in document: " + fontName); + } else { + list.add(font); + } + list.add(font); + } + float fontSize = settings.getAsFloat("fontsize", 11.0f); + row.fontDescriptor(new FontDescriptor(list, fontSize)); Color color = ColorFactory.web(settings.get("color", "black")); row.textColor(color); if (settings.containsSetting("backgroundcolor")) { 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 a52c8ec..242a6fd 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 @@ -26,6 +26,10 @@ public class FontDescriptor { public FontDescriptor(List fonts, float size, boolean bold, boolean italic) { this.fonts = fonts; + // we do not accept null fonts + for (Font font : fonts) { + Objects.requireNonNull(font, "no null font allowed"); + } this.size = size; this.bold = bold; this.italic = italic; 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 172e353..fc18ec8 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 @@ -1,6 +1,6 @@ package org.xbib.graphics.pdfbox.layout.table; -import org.xbib.graphics.pdfbox.layout.font.Font; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import org.xbib.graphics.pdfbox.layout.util.PdfUtil; import java.awt.Color; @@ -18,12 +18,8 @@ public abstract class AbstractTextCell extends AbstractCell { return Math.max((getVerticalPadding() + getTextHeight()), super.getMinHeight()); } - public Font getFont() { - return parameters.getFont(); - } - - public Float getFontSize() { - return parameters.getFontSize(); + public FontDescriptor getFontDescriptor() { + return parameters.getFontDescriptor(); } public Color getTextColor() { @@ -44,9 +40,9 @@ public abstract class AbstractTextCell extends AbstractCell { if (this.textHeight != null) { return this.textHeight; } - this.textHeight = PdfUtil.getFontHeight(getFont(), getFontSize()); + this.textHeight = PdfUtil.getFontHeight(getText(), getFontDescriptor()); if (parameters.isWordBreak()) { - final int size = PdfUtil.getOptimalTextBreakLines(getText(), getFont(), getFontSize(), getMaxWidth()).size(); + final int size = PdfUtil.getOptimalTextBreakLines(getText(), getFontDescriptor(), getMaxWidth()).size(); final float heightOfTextLines = size * this.textHeight; final float heightOfLineSpacing = (size - 1) * this.textHeight * getLineSpacing(); this.textHeight = heightOfTextLines + heightOfLineSpacing; @@ -56,12 +52,12 @@ public abstract class AbstractTextCell extends AbstractCell { public float getWidthOfText() { assertIsRendered(); - final float notBrokenTextWidth = PdfUtil.getStringWidth(getText(), getFont(), getFontSize()); + final float notBrokenTextWidth = PdfUtil.getStringWidth(getText(), getFontDescriptor()); if (parameters.isWordBreak()) { final float maxWidth = getMaxWidthOfText() - getHorizontalPadding(); - List textLines = PdfUtil.getOptimalTextBreakLines(getText(), getFont(), getFontSize(), maxWidth); + List textLines = PdfUtil.getOptimalTextBreakLines(getText(), getFontDescriptor(), maxWidth); return textLines.stream() - .map(line -> PdfUtil.getStringWidth(line, getFont(), getFontSize())) + .map(line -> PdfUtil.getStringWidth(line, getFontDescriptor())) .max(Comparator.naturalOrder()) .orElse(notBrokenTextWidth); } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Hyperlink.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Hyperlink.java index 2a0c687..fcfdaeb 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Hyperlink.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Hyperlink.java @@ -1,14 +1,12 @@ package org.xbib.graphics.pdfbox.layout.table; import org.xbib.graphics.pdfbox.layout.element.Paragraph; -import org.xbib.graphics.pdfbox.layout.font.Font; import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import org.xbib.graphics.pdfbox.layout.text.annotations.AnnotatedStyledText; import org.xbib.graphics.pdfbox.layout.text.annotations.Annotations; import java.awt.Color; import java.util.Collections; -import java.util.List; public class Hyperlink implements ParagraphProcessor { @@ -16,24 +14,18 @@ public class Hyperlink implements ParagraphProcessor { private String url; - private Font font; - - private Float fontSize; + private FontDescriptor fontDescriptor; private Color color = Color.BLUE; private float baselineOffset = 1f; - public void setFontSize(Float fontSize) { - this.fontSize = fontSize; + public void setFontDescriptor(FontDescriptor fontDescriptor) { + this.fontDescriptor = fontDescriptor; } - public void setFont(Font font) { - this.font = font; - } - - public Font getFont() { - return font; + public FontDescriptor getFontDescriptor() { + return fontDescriptor; } public void setText(String text) { @@ -68,16 +60,11 @@ public class Hyperlink implements ParagraphProcessor { return url; } - public Float getFontSize() { - return fontSize; - } - @Override public void process(Paragraph paragraph, Parameters parameters) { Annotations.HyperlinkAnnotation hyperlink = new Annotations.HyperlinkAnnotation(getUrl(), Annotations.HyperlinkAnnotation.LinkStyle.ul); - FontDescriptor fontDescriptor = new FontDescriptor(List.of(getFont() != null ? getFont() : parameters.getFont()), - getFontSize() != null ? getFontSize() : parameters.getFontSize()); + FontDescriptor fontDescriptor = getFontDescriptor() != null ? getFontDescriptor() : parameters.getFontDescriptor(); paragraph.add(new AnnotatedStyledText(getText(), fontDescriptor, getColor(), getBaselineOffset(), 0, 0, Collections.singleton(hyperlink))); } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Markup.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Markup.java index c63af85..58dee22 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Markup.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Markup.java @@ -1,17 +1,13 @@ package org.xbib.graphics.pdfbox.layout.table; import org.xbib.graphics.pdfbox.layout.element.Paragraph; -import org.xbib.graphics.pdfbox.layout.font.Font; - -import java.util.List; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; public class Markup implements ParagraphProcessor { private String value; - private Font font; - - private Float fontSize; + private FontDescriptor fontDescriptor; public Markup setValue(String value) { this.value = value; @@ -22,27 +18,17 @@ public class Markup implements ParagraphProcessor { return value; } - public Markup setFont(Font font) { - this.font = font; + public Markup setFontDescriptor(FontDescriptor fontDescriptor) { + this.fontDescriptor = fontDescriptor; return this; } - public Font getFont() { - return font; - } - - public Markup setFontSize(Float fontSize) { - this.fontSize = fontSize; - return this; - } - - public Float getFontSize() { - return fontSize; + public FontDescriptor getFontDescriptor() { + return fontDescriptor; } @Override public void process(Paragraph paragraph, Parameters parameters) { - float fontSize = getFontSize() != null ? getFontSize() : parameters.getFontSize(); - paragraph.addMarkup(getValue(), fontSize, List.of(font)); + paragraph.addMarkup(getValue(), fontDescriptor); } } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Parameters.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Parameters.java index 0989711..985deb9 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Parameters.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Parameters.java @@ -1,13 +1,14 @@ package org.xbib.graphics.pdfbox.layout.table; -import org.xbib.graphics.pdfbox.layout.font.Font; +import org.xbib.graphics.pdfbox.layout.font.BaseFont; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; + import java.awt.Color; +import java.util.List; public class Parameters { - private Font font; - - private Float fontSize; + private FontDescriptor fontDescriptor; private Color textColor; @@ -47,6 +48,10 @@ public class Parameters { // For callers outside it should expose only the primitive though. private Boolean wordBreak; + public Parameters() { + setFontDescriptor(new FontDescriptor(List.of(BaseFont.HELVETICA), 11.0f)); + } + public boolean isWordBreak() { return wordBreak != null && wordBreak; } @@ -133,12 +138,8 @@ public class Parameters { return horizontalAlignment; } - public Float getFontSize() { - return fontSize; - } - - public Font getFont() { - return font; + public FontDescriptor getFontDescriptor() { + return fontDescriptor; } public VerticalAlignment getVerticalAlignment() { @@ -185,12 +186,8 @@ public class Parameters { this.borderWidthTop = borderWidthTop; } - public void setFont(Font font) { - this.font = font; - } - - public void setFontSize(Float fontSize) { - this.fontSize = fontSize; + public void setFontDescriptor(FontDescriptor fontDescriptor) { + this.fontDescriptor = fontDescriptor; } public void setHorizontalAlignment(HorizontalAlignment horizontalAlignment) { @@ -311,11 +308,8 @@ public class Parameters { } private void fillingMergeFontSettings(Parameters parameters) { - if (getFont() == null && parameters.getFont() != null) { - font = parameters.getFont(); - } - if (getFontSize() == null && parameters.getFontSize() != null) { - fontSize = parameters.getFontSize(); + if (getFontDescriptor() == null && parameters.getFontDescriptor() != null) { + setFontDescriptor(parameters.getFontDescriptor()); } } } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Row.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Row.java index 7f443b7..5e744f8 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Row.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Row.java @@ -3,7 +3,7 @@ package org.xbib.graphics.pdfbox.layout.table; import org.xbib.graphics.pdfbox.layout.element.Drawable; import org.xbib.graphics.pdfbox.layout.element.Element; import org.xbib.graphics.pdfbox.layout.element.HorizontalRuler; -import org.xbib.graphics.pdfbox.layout.font.Font; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import java.awt.Color; import java.util.ArrayList; @@ -112,13 +112,8 @@ public class Row { return this; } - public Builder font(Font font) { - parameters.setFont(font); - return this; - } - - public Builder fontSize(float fontSize) { - parameters.setFontSize(fontSize); + public Builder fontDescriptor(FontDescriptor fontDescriptor) { + parameters.setFontDescriptor(fontDescriptor); return this; } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/StyledText.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/StyledText.java index 2f49396..67c81fa 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/StyledText.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/StyledText.java @@ -1,20 +1,16 @@ package org.xbib.graphics.pdfbox.layout.table; import org.xbib.graphics.pdfbox.layout.element.Paragraph; -import org.xbib.graphics.pdfbox.layout.font.Font; import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import org.xbib.graphics.pdfbox.layout.util.PdfUtil; import java.awt.Color; -import java.util.List; public class StyledText implements ParagraphProcessor { private String text; - private Float fontSize; - - private Font font; + private FontDescriptor fontDescriptor; private Color color; @@ -26,20 +22,12 @@ public class StyledText implements ParagraphProcessor { return text; } - public void setFontSize(Float fontSize) { - this.fontSize = fontSize; + public void setFontDescriptor(FontDescriptor fontDescriptor) { + this.fontDescriptor = fontDescriptor; } - public Float getFontSize() { - return fontSize; - } - - public void setFont(Font font) { - this.font = font; - } - - public Font getFont() { - return font; + public FontDescriptor getFontDescriptor() { + return fontDescriptor; } public void setColor(Color color) { @@ -52,16 +40,14 @@ public class StyledText implements ParagraphProcessor { @Override public void process(Paragraph paragraph, Parameters parameters) { - final float actualFontSize = getFontSize() != null ? getFontSize() : parameters.getFontSize(); - final Font actualFont = getFont() != null ? getFont() : parameters.getFont(); + final FontDescriptor fontDescriptor = getFontDescriptor() != null ? getFontDescriptor() : parameters.getFontDescriptor(); final Color actualColor = getColor() != null ? getColor() : parameters.getTextColor(); - // TODO this is a complete mess to handle new lines!!! String[] lines = getText().split(PdfUtil.NEW_LINE_REGEX); for (int i = 0; i < lines.length; i++) { - FontDescriptor fontDescriptor = new FontDescriptor(List.of(actualFont), actualFontSize); - paragraph.add(new org.xbib.graphics.pdfbox.layout.text.StyledText(lines[i], fontDescriptor, actualColor, 0f, 0, 0, 0)); + paragraph.add(new org.xbib.graphics.pdfbox.layout.text.StyledText(lines[i], + fontDescriptor, actualColor, 0f, 0, 0, 0)); if (i < lines.length - 1) { - paragraph.add(new org.xbib.graphics.pdfbox.layout.text.NewLine(new FontDescriptor(List.of(actualFont), actualFontSize))); + paragraph.add(new org.xbib.graphics.pdfbox.layout.text.NewLine(fontDescriptor)); } } } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Table.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Table.java index c7e2cff..4b9c1f6 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Table.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/Table.java @@ -1,7 +1,7 @@ package org.xbib.graphics.pdfbox.layout.table; import org.xbib.graphics.pdfbox.layout.font.BaseFont; -import org.xbib.graphics.pdfbox.layout.font.Font; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import java.awt.Color; import java.awt.Point; @@ -14,9 +14,8 @@ import java.util.Set; public class Table { - private static final Font DEFAULT_FONT = BaseFont.HELVETICA; - - private static final Float DEFAULT_FONT_SIZE = 11f; + private static final FontDescriptor DEFAULT_FONT_DESCRIPTOR = + new FontDescriptor(List.of(BaseFont.HELVETICA), 11.0f); private static final Color DEFAULT_TEXT_COLOR = Color.BLACK; @@ -94,10 +93,6 @@ public class Table { return DEFAULT_HORIZONTAL_ALIGNMENT; } - public static float getDefaultFontSize() { - return DEFAULT_FONT_SIZE; - } - public int getNumberOfColumns() { return numberOfColumns; } @@ -110,10 +105,6 @@ public class Table { return rows; } - public static Font getDefaultFont() { - return DEFAULT_FONT; - } - public Set getRowSpanCells() { return rowSpanCells; } @@ -155,8 +146,7 @@ public class Table { private float maximumHeight; private Builder() { - parameters.setFont(DEFAULT_FONT); - parameters.setFontSize(DEFAULT_FONT_SIZE); + parameters.setFontDescriptor(DEFAULT_FONT_DESCRIPTOR); parameters.setTextColor(DEFAULT_TEXT_COLOR); parameters.setBorderColor(DEFAULT_BORDER_COLOR); parameters.setBorderStyleTop(DEFAULT_BORDER_STYLE); @@ -228,13 +218,8 @@ public class Table { return this; } - public Builder font(Font font) { - parameters.setFont(font); - return this; - } - - public Builder fontSize(Float fontSize) { - parameters.setFontSize(fontSize); + public Builder fontDescriptor(FontDescriptor fontDescriptor) { + parameters.setFontDescriptor(fontDescriptor); return this; } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/TextCell.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/TextCell.java index 31ccfd9..d986980 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/TextCell.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/TextCell.java @@ -1,6 +1,6 @@ package org.xbib.graphics.pdfbox.layout.table; -import org.xbib.graphics.pdfbox.layout.font.Font; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import org.xbib.graphics.pdfbox.layout.table.render.Renderer; import org.xbib.graphics.pdfbox.layout.table.render.TextCellRenderer; import java.awt.Color; @@ -48,13 +48,8 @@ public class TextCell extends AbstractTextCell { return this; } - public Builder font(Font font) { - parameters.setFont(font); - return this; - } - - public Builder fontSize(Float fontSize) { - parameters.setFontSize(fontSize); + public Builder fontDescriptor(FontDescriptor fontDescriptor) { + parameters.setFontDescriptor(fontDescriptor); return this; } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/PositionedStyledText.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/PositionedStyledText.java index 8889a74..95f3acf 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/PositionedStyledText.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/PositionedStyledText.java @@ -1,6 +1,6 @@ package org.xbib.graphics.pdfbox.layout.table.render; -import org.xbib.graphics.pdfbox.layout.font.Font; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import java.awt.Color; @@ -12,18 +12,15 @@ public class PositionedStyledText { private final String text; - private final Font font; - - private final float fontSize; + private final FontDescriptor fontDescriptor; private final Color color; - public PositionedStyledText(float x, float y, String text, Font font, float fontSize, Color color) { + public PositionedStyledText(float x, float y, String text, FontDescriptor fontDescriptor, Color color) { this.x = x; this.y = y; this.text = text; - this.font = font; - this.fontSize = fontSize; + this.fontDescriptor = fontDescriptor; this.color = color; } @@ -39,12 +36,8 @@ public class PositionedStyledText { return text; } - public Font getFont() { - return font; - } - - public float getFontSize() { - return fontSize; + public FontDescriptor getFontDescriptor() { + return fontDescriptor; } public Color getColor() { diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/TextCellRenderer.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/TextCellRenderer.java index c003ab0..564e728 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/TextCellRenderer.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/TextCellRenderer.java @@ -3,7 +3,7 @@ package org.xbib.graphics.pdfbox.layout.table.render; import static org.xbib.graphics.pdfbox.layout.table.HorizontalAlignment.CENTER; import static org.xbib.graphics.pdfbox.layout.table.HorizontalAlignment.JUSTIFY; import static org.xbib.graphics.pdfbox.layout.table.HorizontalAlignment.RIGHT; -import org.xbib.graphics.pdfbox.layout.font.Font; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import org.xbib.graphics.pdfbox.layout.table.AbstractTextCell; import org.xbib.graphics.pdfbox.layout.util.PdfUtil; import org.xbib.graphics.pdfbox.layout.util.RenderUtil; @@ -23,16 +23,15 @@ public class TextCellRenderer extends AbstractCellRe @Override public void renderContent(TableRenderContext tableRenderContext) { float startX = tableRenderContext.getStartingPoint().x; - Font currentFont = cell.getFont(); - float currentFontSize = cell.getFontSize(); + FontDescriptor fontDescriptor = cell.getFontDescriptor(); Color currentTextColor = cell.getTextColor(); float yOffset = tableRenderContext.getStartingPoint().y + getAdaptionForVerticalAlignment(); float xOffset = startX + cell.getPaddingLeft(); - final List lines = calculateAndGetLines(currentFont, currentFontSize, cell.getMaxWidth()); + final List lines = calculateAndGetLines(fontDescriptor, cell.getMaxWidth()); for (int i = 0; i < lines.size(); i++) { final String line = lines.get(i); - yOffset -= calculateYOffset(currentFont, currentFontSize, i); - final float textWidth = PdfUtil.getStringWidth(line, currentFont, currentFontSize); + yOffset -= calculateYOffset(line, fontDescriptor, i); + final float textWidth = PdfUtil.getStringWidth(line, fontDescriptor); if (cell.isHorizontallyAligned(RIGHT)) { xOffset = startX + (cell.getWidth() - (textWidth + cell.getPaddingRight())); } else if (cell.isHorizontallyAligned(CENTER)) { @@ -44,8 +43,8 @@ public class TextCellRenderer extends AbstractCellRe throw new UncheckedIOException(exception); } } - PositionedStyledText positionedStyledText = new PositionedStyledText(xOffset, yOffset, line, - currentFont, currentFontSize, currentTextColor); + PositionedStyledText positionedStyledText = + new PositionedStyledText(xOffset, yOffset, line, fontDescriptor, currentTextColor); RenderUtil.drawText(tableRenderContext.getContentStream(), positionedStyledText); } } @@ -55,9 +54,9 @@ public class TextCellRenderer extends AbstractCellRe return cell.getTextHeight(); } - private float calculateYOffset(Font currentFont, float currentFontSize, int lineIndex) { - return PdfUtil.getFontHeight(currentFont, currentFontSize) + - (lineIndex > 0 ? PdfUtil.getFontHeight(currentFont, currentFontSize) * cell.getLineSpacing() : 0f); + private float calculateYOffset(String text, FontDescriptor fontDescriptor, int lineIndex) { + return PdfUtil.getFontHeight(text, fontDescriptor) + + (lineIndex > 0 ? PdfUtil.getFontHeight(text, fontDescriptor) * cell.getLineSpacing() : 0f); } private static boolean isNotLastLine(List lines, int i) { @@ -67,7 +66,7 @@ public class TextCellRenderer extends AbstractCellRe private float calculateCharSpacingFor(String line) { float charSpacing = 0; if (line.length() > 1) { - float size = PdfUtil.getStringWidth(line, cell.getFont(), cell.getFontSize()); + float size = PdfUtil.getStringWidth(line, cell.getFontDescriptor()); float free = cell.getWidthOfText() - size; if (free > 0) { charSpacing = free / (line.length() - 1); @@ -76,9 +75,9 @@ public class TextCellRenderer extends AbstractCellRe return charSpacing; } - private List calculateAndGetLines(Font currentFont, float currentFontSize, float maxWidth) { + private List calculateAndGetLines(FontDescriptor fontDescriptor, float maxWidth) { return cell.isWordBreak() - ? PdfUtil.getOptimalTextBreakLines(cell.getText(), currentFont, currentFontSize, maxWidth) + ? PdfUtil.getOptimalTextBreakLines(cell.getText(), fontDescriptor, maxWidth) : Collections.singletonList(cell.getText()); } } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/VerticalTextCellRenderer.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/VerticalTextCellRenderer.java index 6de5349..731fed1 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/VerticalTextCellRenderer.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/table/render/VerticalTextCellRenderer.java @@ -3,6 +3,7 @@ package org.xbib.graphics.pdfbox.layout.table.render; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.util.Matrix; import org.xbib.graphics.pdfbox.layout.font.Font; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import org.xbib.graphics.pdfbox.layout.util.PdfUtil; import org.xbib.graphics.pdfbox.layout.table.VerticalTextCell; @@ -27,8 +28,7 @@ public class VerticalTextCellRenderer extends AbstractCellRenderer lines = cell.isWordBreak() - ? PdfUtil.getOptimalTextBreakLines(cell.getText(), currentFont, currentFontSize, (height - cell.getVerticalPadding())) + ? PdfUtil.getOptimalTextBreakLines(cell.getText(), fontDescriptor, (height - cell.getVerticalPadding())) : Collections.singletonList(cell.getText()); - float xOffset = startX + cell.getPaddingLeft() - PdfUtil.getFontHeight(currentFont, currentFontSize); + float xOffset = startX + cell.getPaddingLeft(); /* - PdfUtil.getFontHeight(currentFont, currentFontSize)*/; for (int i = 0; i < lines.size(); i++) { final String line = lines.get(i); - xOffset += (PdfUtil.getFontHeight(currentFont, currentFontSize) + (i > 0 ? PdfUtil.getFontHeight(currentFont, currentFontSize) * cell.getLineSpacing() : 0f)); - drawText(line, currentFont, currentFontSize, currentTextColor, xOffset, yOffset, tableRenderContext.getContentStream()); + xOffset += (PdfUtil.getFontHeight(line, fontDescriptor) + (i > 0 ? PdfUtil.getFontHeight(line, fontDescriptor) * cell.getLineSpacing() : 0f)); + drawText(line, fontDescriptor, currentTextColor, xOffset, yOffset, tableRenderContext.getContentStream()); } } @@ -54,22 +54,31 @@ public class VerticalTextCellRenderer extends AbstractCellRenderer { try { - return getWidthOfStringWithoutNewlines(x, font, fontSize); + return getWidthOfStringWithoutNewlines(x, fontDescriptor); } catch (IOException exception) { return 0f; } @@ -46,16 +45,25 @@ public final class PdfUtil { .orElseThrow(CouldNotDetermineStringWidthException::new); } - private static float getWidthOfStringWithoutNewlines(String text, Font font, float fontSize) throws IOException { + private static float getWidthOfStringWithoutNewlines(String text, FontDescriptor fontDescriptor) throws IOException { List codePointsAsString = text.codePoints() .mapToObj(codePoint -> new String(new int[]{codePoint}, 0, 1)) - .collect(Collectors.toList()); + .toList(); List widths = new ArrayList<>(); 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); + boolean found = false; + for (Font font : fontDescriptor.getFonts()) { + if (font.canWrite(codepoint)) { + try { + widths.add(font.getRegularFont().getStringWidth(codepoint) * fontDescriptor.getSize() / 1000F); + } catch (IllegalArgumentException | IOException e) { + widths.add(font.getRegularFont().getStringWidth("–") * fontDescriptor.getSize() / 1000F); + } + found = true; + } + } + if (!found) { + throw new IllegalArgumentException("unable to get width of string " + codepoint); } } return widths.stream().reduce(0.0f, Float::sum); @@ -64,37 +72,40 @@ public final class PdfUtil { /** * Computes the height of a font. * - * @param font Font - * @param fontSize FontSize - * @return Height of font + * @param fontDescriptor font + * @return height of font */ - public static float getFontHeight(Font font, float fontSize) { - return font.getRegularFont().getFontDescriptor().getCapHeight() * fontSize / 1000F; + public static float getFontHeight(String text, FontDescriptor fontDescriptor) { + for (Font font : fontDescriptor.getFonts()) { + if (font.canWrite(text)) { + return font.getRegularFont().getFontDescriptor().getCapHeight() * fontDescriptor.getSize() / 1000F; + } + } + throw new IllegalArgumentException("unable to get font height for text " + text + ", fonts = " + fontDescriptor.getFonts()); } /** * Split a text into multiple lines to prevent a text-overflow. * * @param text Text - * @param font Used font - * @param fontSize Used fontSize + * @param fontDescriptor Used font * @param maxWidth Maximal width of resulting text-lines * @return A list of lines, where all are smaller than maxWidth */ - public static List getOptimalTextBreakLines(String text, Font font, float fontSize, float maxWidth) { + public static List getOptimalTextBreakLines(String text, FontDescriptor fontDescriptor, float maxWidth) { List result = new ArrayList<>(); for (String line : text.split(NEW_LINE_REGEX)) { - if (PdfUtil.doesTextLineFit(line, font, fontSize, maxWidth)) { + if (doesTextLineFit(line, fontDescriptor, maxWidth)) { result.add(line); } else { - result.addAll(PdfUtil.wrapLine(line, font, fontSize, maxWidth)); + result.addAll(wrapLine(line, fontDescriptor, maxWidth)); } } return result; } - private static List wrapLine(String line, Font font, float fontSize, float maxWidth) { - if (doesTextLineFit(line, font, fontSize, maxWidth)) { + private static List wrapLine(String line, FontDescriptor fontDescriptor, float maxWidth) { + if (doesTextLineFit(line, fontDescriptor, maxWidth)) { return Collections.singletonList(line); } List goodLines = new ArrayList<>(); @@ -102,30 +113,30 @@ public final class PdfUtil { Arrays.asList(line.split("(?<=[\\\\. ,-])")).forEach(allWords::push); Collections.reverse(allWords); while (!allWords.empty()) { - goodLines.add(buildALine(allWords, font, fontSize, maxWidth)); + goodLines.add(buildALine(allWords, fontDescriptor, maxWidth)); } return goodLines; } - private static List splitBySize(String line, Font font, float fontSize, float maxWidth) { + private static List splitBySize(String line, FontDescriptor fontDescriptor, float maxWidth) { List returnList = new ArrayList<>(); for (int i = line.length() - 1; i > 0; i--) { String fittedNewLine = line.substring(0, i) + "-"; String remains = line.substring(i); - if (PdfUtil.doesTextLineFit(fittedNewLine, font, fontSize, maxWidth)) { + if (PdfUtil.doesTextLineFit(fittedNewLine, fontDescriptor, maxWidth)) { returnList.add(fittedNewLine); - returnList.addAll(PdfUtil.wrapLine(remains, font, fontSize, maxWidth)); + returnList.addAll(PdfUtil.wrapLine(remains, fontDescriptor, maxWidth)); break; } } return returnList; } - private static String buildALine(Stack words, Font font, float fontSize, float maxWidth) { + private static String buildALine(Stack words, FontDescriptor fontDescriptor, float maxWidth) { StringBuilder line = new StringBuilder(); float width = 0; while (!words.empty()) { - float nextWordWidth = getStringWidth(words.peek(), font, fontSize); + float nextWordWidth = getStringWidth(words.peek(), fontDescriptor); if (line.length() == 0 && words.peek().length() == 1 && nextWordWidth > maxWidth) { return words.pop(); } @@ -137,23 +148,23 @@ public final class PdfUtil { } } if (width == 0 && !words.empty()) { - List cutBySize = splitBySize(words.pop(), font, fontSize, maxWidth); + List cutBySize = splitBySize(words.pop(), fontDescriptor, maxWidth); Collections.reverse(cutBySize); cutBySize.forEach(words::push); - return buildALine(words, font, fontSize, maxWidth); + return buildALine(words, fontDescriptor, maxWidth); } return line.toString().trim(); } - private static boolean doesTextLineFit(String textLine, Font font, float fontSize, float maxWidth) { - return doesTextLineFit(PdfUtil.getStringWidth(textLine, font, fontSize), maxWidth); + private static boolean doesTextLineFit(String textLine, FontDescriptor fontDescriptor, float maxWidth) { + return doesTextLineFit(getStringWidth(textLine, fontDescriptor), maxWidth); } - private static boolean doesTextLineFit(float stringWidth, float maxWidth) { - if (isEqualInEpsilon(stringWidth, maxWidth)) { + private static boolean doesTextLineFit(float stringWidth, float max) { + if (isEqualInEpsilon(stringWidth, max)) { return true; } - return maxWidth > stringWidth; + return max > stringWidth; } private static boolean isEqualInEpsilon(float x, float y) { diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/util/RenderUtil.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/util/RenderUtil.java index e22c0b0..96e244d 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/util/RenderUtil.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/util/RenderUtil.java @@ -2,6 +2,7 @@ package org.xbib.graphics.pdfbox.layout.util; import static org.xbib.graphics.pdfbox.layout.table.BorderStyle.SOLID; import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.xbib.graphics.pdfbox.layout.font.Font; import org.xbib.graphics.pdfbox.layout.table.render.PositionedLine; import org.xbib.graphics.pdfbox.layout.table.render.PositionedRectangle; import org.xbib.graphics.pdfbox.layout.table.render.PositionedStyledText; @@ -16,17 +17,21 @@ public class RenderUtil { } public static void drawText(PDPageContentStream contentStream, PositionedStyledText styledText) { - try { - contentStream.beginText(); - contentStream.setNonStrokingColor(styledText.getColor()); - // TODO select correct font - contentStream.setFont(styledText.getFont().getRegularFont(), styledText.getFontSize()); - contentStream.newLineAtOffset(styledText.getX(), styledText.getY()); - contentStream.showText(styledText.getText()); - contentStream.endText(); - contentStream.setCharacterSpacing(0); - } catch (IOException e) { - throw new UncheckedIOException(e); + for (Font font : styledText.getFontDescriptor().getFonts()) { + if (font.canWrite(styledText.getText())) { + try { + contentStream.beginText(); + contentStream.setNonStrokingColor(styledText.getColor()); + // TODO select correct font style + contentStream.setFont(font.getRegularFont(), styledText.getFontDescriptor().getSize()); + contentStream.newLineAtOffset(styledText.getX(), styledText.getY()); + contentStream.showText(styledText.getText()); + contentStream.endText(); + contentStream.setCharacterSpacing(0); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } } } diff --git a/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/table/TableTest.java b/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/table/TableTest.java index 7efb199..855592c 100644 --- a/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/table/TableTest.java +++ b/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/table/TableTest.java @@ -12,6 +12,7 @@ import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.xbib.graphics.pdfbox.layout.font.BaseFont; +import org.xbib.graphics.pdfbox.layout.font.FontDescriptor; import org.xbib.graphics.pdfbox.layout.table.AbstractCell; import org.xbib.graphics.pdfbox.layout.table.BorderStyle; import org.xbib.graphics.pdfbox.layout.table.Column; @@ -26,6 +27,7 @@ import org.xbib.graphics.pdfbox.layout.table.TextCell; import java.awt.Color; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; public class TableTest { @@ -104,13 +106,13 @@ public class TableTest { final Table table = Table.builder() .addColumnOfWidth(12) .addColumnOfWidth(34) - .fontSize(12f) + .fontDescriptor(new FontDescriptor(List.of(BaseFont.HELVETICA), 12f)) .addRow(Row.builder() .add(TextCell.builder().text("11").paddingTop(35).paddingBottom(15).build()) .add(TextCell.builder().text("12").paddingTop(15).paddingBottom(25).build()) .build()) .build(); - final float actualFontHeight = PdfUtil.getFontHeight(table.getSettings().getFont(), 12); + final float actualFontHeight = PdfUtil.getFontHeight("test", table.getSettings().getFontDescriptor()); assertThat(table.getHeight(), equalTo(50 + actualFontHeight)); } @@ -137,7 +139,7 @@ public class TableTest { .add(TextCell.builder().text("This text should break because too long").colSpan(2).borderWidth(1).build()) .add(TextCell.builder().text("Booz").build()) .wordBreak(true) - .font(BaseFont.COURIER).fontSize(8) + .fontDescriptor(new FontDescriptor(List.of(BaseFont.COURIER), 8.0f)) .build(); row.getHeight(); }); @@ -148,13 +150,12 @@ public class TableTest { Table.Builder tableBuilder = Table.builder() .addColumnsOfWidth(10, 10, 10) .horizontalAlignment(HorizontalAlignment.CENTER) - .fontSize(10f) - .font(BaseFont.HELVETICA) + .fontDescriptor(new FontDescriptor(List.of(BaseFont.HELVETICA), 10.0f)) .wordBreak(false); Row row = Row.builder() .add(TextCell.builder().text("iVgebALheQlBkxtDyNDrhKv").colSpan(2).borderWidth(1).build()) .add(TextCell.builder().text("Booz").build()) - .font(BaseFont.COURIER).fontSize(8) + .fontDescriptor(new FontDescriptor(List.of(BaseFont.COURIER), 8.0f)) .build(); tableBuilder.addRow(row); tableBuilder.build(); diff --git a/graphics-pdfbox-layout/src/test/resources/org/xbib/graphics/pdfbox/layout/test/scripting.json b/graphics-pdfbox-layout/src/test/resources/org/xbib/graphics/pdfbox/layout/test/scripting.json index 892b76b..e4c2ceb 100644 --- a/graphics-pdfbox-layout/src/test/resources/org/xbib/graphics/pdfbox/layout/test/scripting.json +++ b/graphics-pdfbox-layout/src/test/resources/org/xbib/graphics/pdfbox/layout/test/scripting.json @@ -128,15 +128,21 @@ "elements": [ { "type": "cell", - "text": "Cell A" + "text": "Cell A", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell B" + "text": "Cell B", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell C" + "text": "Cell C", + "font": "helvetica", + "fontsize": 11 } ] }, @@ -145,15 +151,21 @@ "elements": [ { "type": "cell", - "text": "Cell D" + "text": "Cell D", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell E" + "text": "Cell E", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell F" + "text": "Cell F", + "font": "helvetica", + "fontsize": 11 } ] } @@ -168,15 +180,21 @@ "elements": [ { "type": "cell", - "text": "Cell 1" + "text": "Cell 1", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell 2" + "text": "Cell 2", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell 3" + "text": "Cell 3", + "font": "helvetica", + "fontsize": 11 } ] }, @@ -186,18 +204,24 @@ { "type": "cell", "text": "Cell 4", + "font": "helvetica", + "fontsize": 11, "padding": "5 5 5 5", "borderwidth": 0.5 }, { "type": "cell", "text": "Cell 5", + "font": "helvetica", + "fontsize": 11, "padding": "5 5 5 5", "borderwidth": 0.5 }, { "type": "cell", "text": "Cell 6", + "font": "helvetica", + "fontsize": 11, "padding": "5 5 5 5", "borderwidth": 0.5 } diff --git a/graphics-pdfbox-layout/src/test/resources/org/xbib/graphics/pdfbox/layout/test/scriptingtable.json b/graphics-pdfbox-layout/src/test/resources/org/xbib/graphics/pdfbox/layout/test/scriptingtable.json index 5952478..7cb03b5 100644 --- a/graphics-pdfbox-layout/src/test/resources/org/xbib/graphics/pdfbox/layout/test/scriptingtable.json +++ b/graphics-pdfbox-layout/src/test/resources/org/xbib/graphics/pdfbox/layout/test/scriptingtable.json @@ -3,8 +3,7 @@ "margin": "0 0 0 0", "author": "Jörg Prante", "font": [ - "helvetica", - "notosans" + "helvetica" ], "elements": [ { @@ -17,15 +16,21 @@ "elements": [ { "type": "cell", - "text": "Cell A" + "text": "Cell A", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell B" + "text": "Cell B", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell C" + "text": "Cell C", + "font": "helvetica", + "fontsize": 11 } ] }, @@ -34,15 +39,21 @@ "elements": [ { "type": "cell", - "text": "Cell D" + "text": "Cell D", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell E" + "text": "Cell E", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell F" + "text": "Cell F", + "font": "helvetica", + "fontsize": 11 } ] } @@ -59,15 +70,21 @@ { "type": "cell", "text": "This is very long text for cell 1 This is very long text for cell 1 This is very long text for cell 1", - "linespacing": 0.5 + "linespacing": 0.5, + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell 2" + "text": "Cell 2", + "font": "helvetica", + "fontsize": 11 }, { "type": "cell", - "text": "Cell 3" + "text": "Cell 3", + "font": "helvetica", + "fontsize": 11 } ] }, @@ -77,18 +94,24 @@ { "type": "cell", "text": "Cell 4", + "font": "helvetica", + "fontsize": 11, "padding": "5 5 5 5", "borderwidth": 0.5 }, { "type": "cell", "text": "Cell 5", + "font": "helvetica", + "fontsize": 11, "padding": "5 5 5 5", "borderwidth": 0.5 }, { "type": "cell", "text": "Cell 6", + "font": "helvetica", + "fontsize": 11, "padding": "5 5 5 5", "borderwidth": 0.5 } @@ -100,18 +123,24 @@ { "type": "cell", "text": "Cell 7", + "font": "helvetica", + "fontsize": 11, "padding": "5 5 5 5", "borderwidth": 0.5 }, { "type": "cell", "text": "Cell 8", + "font": "helvetica", + "fontsize": 11, "padding": "5 5 5 5", "borderwidth": 0.5 }, { "type": "cell", "text": "Cell 9", + "font": "helvetica", + "fontsize": 11, "padding": "5 5 5 5", "borderwidth": 0.5 }