clean up pdfbox layout tables

This commit is contained in:
Jörg Prante 2021-03-03 10:39:02 +01:00
parent 813a781d25
commit 11254626e6
5 changed files with 30 additions and 209 deletions

View file

@ -5,3 +5,19 @@ https://github.com/ralfstuckert/pdfbox-layout
(MIT License) (MIT License)
as of October, 2020 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

View file

@ -211,119 +211,4 @@ public abstract class AbstractCell {
public boolean isVerticallyAligned(VerticalAlignment alignment) { public boolean isVerticallyAligned(VerticalAlignment alignment) {
return getSettings().getVerticalAlignment() == alignment; return getSettings().getVerticalAlignment() == alignment;
} }
/*public abstract static class AbstractCellBuilder<C extends AbstractCell, B extends AbstractCell.AbstractCellBuilder<C, B>> {
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;
}
}*/
} }

View file

@ -78,23 +78,4 @@ public abstract class AbstractTextCell extends AbstractCell {
public float getMaxWidth() { public float getMaxWidth() {
return getMaxWidthOfText() - getHorizontalPadding(); return getMaxWidthOfText() - getHorizontalPadding();
} }
/*public abstract static class AbstractTextCellBuilder<C extends AbstractTextCell, B extends AbstractTextCell.AbstractTextCellBuilder<C, B>> extends AbstractCellBuilder<C, B> {
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;
}
}*/
} }

View file

@ -76,59 +76,5 @@ public class ParagraphCell extends AbstractCell {
public org.xbib.graphics.pdfbox.layout.elements.Paragraph getWrappedParagraph() { public org.xbib.graphics.pdfbox.layout.elements.Paragraph getWrappedParagraph() {
return wrappedParagraph; return wrappedParagraph;
} }
/*public static class ParagraphBuilder {
private final List<ParagraphProcessable> 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<C extends ParagraphCell, B extends ParagraphCell.ParagraphCellBuilder<C, B>> extends AbstractCellBuilder<C, B> {
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;
}
}*/
} }

View file

@ -26,7 +26,7 @@ public final class PdfUtil {
* @param fontSize FontSize of String * @param fontSize FontSize of String
* @return Width (in points) * @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)) return Arrays.stream(text.split(NEW_LINE_REGEX))
.max(Comparator.comparing(String::length)) .max(Comparator.comparing(String::length))
.map(x -> { .map(x -> {
@ -40,25 +40,20 @@ public final class PdfUtil {
} }
private static float getWidthOfStringWithoutNewlines(String text, Font font, int fontSize) throws IOException { private static float getWidthOfStringWithoutNewlines(String text, Font font, int fontSize) throws IOException {
List<String> codePointsAsString = text.codePoints()
final List<String> codePointsAsString = text.codePoints()
.mapToObj(codePoint -> new String(new int[]{codePoint}, 0, 1)) .mapToObj(codePoint -> new String(new int[]{codePoint}, 0, 1))
.collect(Collectors.toList()); .collect(Collectors.toList());
List<Float> widths = new ArrayList<>(); List<Float> widths = new ArrayList<>();
for (String codepoint : codePointsAsString) {
for (final String codepoint : codePointsAsString) {
try { try {
widths.add(font.getRegularFont().getStringWidth(codepoint) * fontSize / 1000F); widths.add(font.getRegularFont().getStringWidth(codepoint) * fontSize / 1000F);
} catch (final IllegalArgumentException | IOException e) { } catch (final IllegalArgumentException | IOException e) {
widths.add(font.getRegularFont().getStringWidth("") * fontSize / 1000F); widths.add(font.getRegularFont().getStringWidth("") * fontSize / 1000F);
} }
} }
return widths.stream().reduce(0.0f, Float::sum); return widths.stream().reduce(0.0f, Float::sum);
} }
/** /**
* Computes the height of a font. * Computes the height of a font.
* *
@ -66,7 +61,7 @@ public final class PdfUtil {
* @param fontSize FontSize * @param fontSize FontSize
* @return Height of font * @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; return font.getRegularFont().getFontDescriptor().getCapHeight() * fontSize / 1000F;
} }
@ -79,21 +74,20 @@ public final class PdfUtil {
* @param maxWidth Maximal width of resulting text-lines * @param maxWidth Maximal width of resulting text-lines
* @return A list of lines, where all are smaller than maxWidth * @return A list of lines, where all are smaller than maxWidth
*/ */
public static List<String> getOptimalTextBreakLines(final String text, final Font font, final int fontSize, final float maxWidth) { public static List<String> getOptimalTextBreakLines(String text, Font font, int fontSize, float maxWidth) {
List<String> result = new ArrayList<>(); List<String> 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)) { if (PdfUtil.doesTextLineFit(line, font, fontSize, maxWidth)) {
result.add(line); result.add(line);
} else { } else {
result.addAll(PdfUtil.wrapLine(line, font, fontSize, maxWidth)); result.addAll(PdfUtil.wrapLine(line, font, fontSize, maxWidth));
} }
} }
return result; return result;
} }
private static List<String> wrapLine(final String line, final Font font, final int fontSize, final float maxWidth) { private static List<String> wrapLine(String line, Font font, int fontSize, float maxWidth) {
if (PdfUtil.doesTextLineFit(line, font, fontSize, maxWidth)) { if (doesTextLineFit(line, font, fontSize, maxWidth)) {
return Collections.singletonList(line); return Collections.singletonList(line);
} }
List<String> goodLines = new ArrayList<>(); List<String> goodLines = new ArrayList<>();
@ -106,7 +100,7 @@ public final class PdfUtil {
return goodLines; return goodLines;
} }
private static List<String> splitBySize(final String line, final Font font, final int fontSize, final float maxWidth) { private static List<String> splitBySize(String line, Font font, int fontSize, float maxWidth) {
List<String> returnList = new ArrayList<>(); List<String> returnList = new ArrayList<>();
for (int i = line.length() - 1; i > 0; i--) { for (int i = line.length() - 1; i > 0; i--) {
String fittedNewLine = line.substring(0, i) + "-"; String fittedNewLine = line.substring(0, i) + "-";
@ -120,11 +114,10 @@ public final class PdfUtil {
return returnList; return returnList;
} }
private static String buildALine(Stack<String> words,
private static String buildALine(final Stack<String> words, Font font,
final Font font, int fontSize,
final int fontSize, float maxWidth) {
final float maxWidth) {
StringBuilder line = new StringBuilder(); StringBuilder line = new StringBuilder();
float width = 0; float width = 0;
while (!words.empty()) { while (!words.empty()) {