diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/Fonts.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/Fonts.java index cc4ce1a..f011de7 100644 --- a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/Fonts.java +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/Fonts.java @@ -6,12 +6,16 @@ public enum Fonts { HELVETICA, TIMES, COURIER, - NOTOSANS; + NOTOSANS, + FREESANS; public Font getFont(Document document) { if ("notosans".equalsIgnoreCase(name())) { return new NotoSansFont(document); } + if ("freesans".equalsIgnoreCase(name())) { + return new FreeSansFont(document); + } return BaseFont.valueOf(name()); } } diff --git a/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKFont.java b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKFont.java new file mode 100644 index 0000000..fe7db6c --- /dev/null +++ b/graphics-pdfbox-layout/src/main/java/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKFont.java @@ -0,0 +1,67 @@ +package org.xbib.graphics.pdfbox.layout.font; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.xbib.graphics.pdfbox.layout.element.Document; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.Objects; + +public class NotoSansCJKFont implements Font { + + private final PDDocument pdDocument; + + private PDType0Font regular; + + private PDType0Font bold; + + private PDType0Font italic; + + private PDType0Font bolditalic; + + public NotoSansCJKFont(Document document) { + this.pdDocument = document.getPdDocument(); + } + + @Override + public PDFont getRegularFont() { + if (regular == null) { + regular = load("NotoSansCJKsc-Regular.ttf"); + } + return regular; + } + + @Override + public PDFont getBoldFont() { + if (bold == null) { + bold = load("NotoSansCJKsc-Bold.ttf"); + } + return bold; + } + + @Override + public PDFont getItalicFont() { + if (italic == null) { + italic = load("NotoSansCJKsc-Italic.ttf"); + } + return italic; + } + + @Override + public PDFont getBoldItalicFont() { + if (bolditalic == null) { + bolditalic = load("NotoSansCJKsc-BoldItalic.ttf"); + } + return bolditalic; + } + + private PDType0Font load(String resourceName) { + try { + return PDType0Font.load(pdDocument, Objects.requireNonNull(NotoSansCJKFont.class.getResourceAsStream(resourceName)), true); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-Bold.ttf b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-Bold.ttf new file mode 100644 index 0000000..00504ce Binary files /dev/null and b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-Bold.ttf differ diff --git a/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-BoldItalic.ttf b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-BoldItalic.ttf new file mode 100644 index 0000000..d20bb33 Binary files /dev/null and b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-BoldItalic.ttf differ diff --git a/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-Italic.ttf b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-Italic.ttf new file mode 100644 index 0000000..9c022b4 Binary files /dev/null and b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-Italic.ttf differ diff --git a/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-Regular.ttf b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-Regular.ttf new file mode 100644 index 0000000..5e0b282 Binary files /dev/null and b/graphics-pdfbox-layout/src/main/resources/org/xbib/graphics/pdfbox/layout/font/NotoSansCJKsc-Regular.ttf differ diff --git a/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/HelloNotoSansCJKFontTest.java b/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/HelloNotoSansCJKFontTest.java new file mode 100644 index 0000000..b4cb467 --- /dev/null +++ b/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/HelloNotoSansCJKFontTest.java @@ -0,0 +1,57 @@ +package org.xbib.graphics.pdfbox.layout.test; + +import org.junit.jupiter.api.Test; +import org.xbib.graphics.pdfbox.layout.element.Document; +import org.xbib.graphics.pdfbox.layout.element.PageFormats; +import org.xbib.graphics.pdfbox.layout.element.Paragraph; +import org.xbib.graphics.pdfbox.layout.font.Font; +import org.xbib.graphics.pdfbox.layout.font.NotoSansCJKFont; +import org.xbib.graphics.pdfbox.layout.font.NotoSansFont; +import org.xbib.graphics.pdfbox.layout.text.Indent; +import org.xbib.graphics.pdfbox.layout.text.SpaceUnit; + +import java.io.FileOutputStream; + +public class HelloNotoSansCJKFontTest { + + @Test + public void testDocumentOne() throws Exception { + Document document = new Document(PageFormats.A4_PORTRAIT); + Font font = new NotoSansCJKFont(document); + Paragraph paragraph = new Paragraph(); + paragraph.add(new Indent(32, SpaceUnit.pt)); + paragraph.addMarkup("Hello Noto Regular\n", 12, font); + paragraph.addMarkup("*Hello Noto Bold*\n", 12, font); + paragraph.addMarkup("_Hello Noto Italic_\n", 12, font); + paragraph.addMarkup("*_Hello Noto Bold Italic_*\n", 12, font); + paragraph.addText("Hello Unicode Text: Zwrotki dla Dorotki : arcyksiążę fiołków\n", 12, font); + paragraph.addMarkup("Hello Unicode Markup: _Zwrotki dla Dorotki : arcyksiążę fiołków_\n", 12, font); + document.add(paragraph); + Paragraph anotherParagraph = new Paragraph(); + anotherParagraph.add(new Indent(32, SpaceUnit.pt)); + anotherParagraph.addMarkup("Hello Noto Regular\n", 12, font); + document.add(anotherParagraph); + document.render().save(new FileOutputStream("build/hellonotofontcjk.pdf")).close(); + } + + @Test + public void testDocumentTwo() throws Exception { + Document document = new Document(PageFormats.A4_PORTRAIT); + Font font = new NotoSansCJKFont(document); + Paragraph paragraph = new Paragraph(); + paragraph.add(new Indent(32, SpaceUnit.pt)); + paragraph.addMarkup("Hello Noto Regular 2\n", 12, font); + paragraph.addMarkup("*Hello Noto Bold*\n", 12, font); + paragraph.addMarkup("_Hello Noto Italic_\n", 12, font); + paragraph.addMarkup("*_Hello Noto Bold Italic_*\n", 12, font); + paragraph.addText("Hello Unicode Text: Zwrotki dla Dorotki : arcyksiążę fiołków\n", 12, font); + paragraph.addMarkup("Hello Unicode Markup: _Zwrotki dla Dorotki : arcyksiążę fiołków_\n", 12, font); + document.add(paragraph); + Paragraph anotherParagraph = new Paragraph(); + anotherParagraph.add(new Indent(32, SpaceUnit.pt)); + anotherParagraph.addMarkup("Hello Noto Regular 2\n", 12, font); + document.add(anotherParagraph); + document.render().save(new FileOutputStream("build/hellonotofontcjk2.pdf")).close(); + } + +} diff --git a/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/HelloNotoFontTest.java b/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/HelloNotoSansFontTest.java similarity index 98% rename from graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/HelloNotoFontTest.java rename to graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/HelloNotoSansFontTest.java index f4cf755..fb38138 100644 --- a/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/HelloNotoFontTest.java +++ b/graphics-pdfbox-layout/src/test/java/org/xbib/graphics/pdfbox/layout/test/HelloNotoSansFontTest.java @@ -10,7 +10,7 @@ import org.xbib.graphics.pdfbox.layout.text.Indent; import org.xbib.graphics.pdfbox.layout.text.SpaceUnit; import java.io.FileOutputStream; -public class HelloNotoFontTest { +public class HelloNotoSansFontTest { @Test public void testDocumentOne() throws Exception { diff --git a/graphics-pdfbox/src/main/java/module-info.java b/graphics-pdfbox/src/main/java/module-info.java index dc8be19..7def632 100644 --- a/graphics-pdfbox/src/main/java/module-info.java +++ b/graphics-pdfbox/src/main/java/module-info.java @@ -6,7 +6,7 @@ module org.xbib.graphics.pdfbox { exports org.xbib.graphics.pdfbox.image; exports org.xbib.graphics.pdfbox.paint; requires transitive org.apache.pdfbox; - requires org.apache.fontbox; + requires transitive org.apache.fontbox; requires transitive java.desktop; requires java.logging; }