Author: tilman
Date: Mon Jul 20 07:28:55 2026
New Revision: 1936345
Log:
PDFBOX-4951: add subproject for glyph layout, by Volker Kunert
Added:
pdfbox/branches/3.0/pdfbox-layout-awt/ (props changed)
pdfbox/branches/3.0/pdfbox-layout-awt/pom.xml
- copied, changed from r1936107, pdfbox/trunk/pdfbox-layout-awt/pom.xml
pdfbox/branches/3.0/pdfbox-layout-awt/src/
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
- copied, changed from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutProcessorAwt.java
- copied, changed from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutProcessorAwt.java
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/examples/
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/examples/GlyphLayoutHelloWorldAWT.java
- copied, changed from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/examples/GlyphLayoutHelloWorldAWT.java
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/appended-resources/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/appended-resources/META-INF/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/appended-resources/META-INF/LICENSE
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/appended-resources/META-INF/LICENSE
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutBidiTest.java
- copied, changed from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutBidiTest.java
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379FormTest.java
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379FormTest.java
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379Test.java
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379Test.java
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutHelloWorldAWTTest.java
- copied, changed from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutHelloWorldAWTTest.java
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutLigaturesAndKerningTest.java
- copied, changed from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutLigaturesAndKerningTest.java
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutSMPTest.java
- copied, changed from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutSMPTest.java
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/TestBase.java
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/TestBase.java
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutBidi.pdf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutBidi.pdf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutDIN91379.pdf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutDIN91379.pdf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutDIN91379Form.pdf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutDIN91379Form.pdf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutLigaturesAndKerning.pdf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutLigaturesAndKerning.pdf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutSMP.pdf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutSMP.pdf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/HelloWorld.pdf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/HelloWorld.pdf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/PdfForm.pdf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/PdfForm.pdf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/Arimo-Regular.ttf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/Arimo-Regular.ttf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/DejaVuSans.ttf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/DejaVuSans.ttf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/FiraCode-Regular.ttf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/FiraCode-Regular.ttf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/Lohit-Bengali.ttf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/Lohit-Bengali.ttf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/NotoSansArabic-Regular.ttf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/NotoSansArabic-Regular.ttf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/NotoSansMath-Regular.ttf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/NotoSansMath-Regular.ttf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/NotoSansThai-Regular.ttf
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/NotoSansThai-Regular.ttf
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/txt/
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/txt/GlyphLayoutDIN91379.txt
- copied unchanged from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/txt/GlyphLayoutDIN91379.txt
Copied and modified: pdfbox/branches/3.0/pdfbox-layout-awt/pom.xml (from
r1936107, pdfbox/trunk/pdfbox-layout-awt/pom.xml)
==============================================================================
--- pdfbox/trunk/pdfbox-layout-awt/pom.xml Mon Jul 13 10:20:13 2026
(r1936107, copy source)
+++ pdfbox/branches/3.0/pdfbox-layout-awt/pom.xml Mon Jul 20 07:28:55
2026 (r1936345)
@@ -23,7 +23,7 @@
<parent>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-parent</artifactId>
- <version>4.0.0-SNAPSHOT</version>
+ <version>3.0.9-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
@@ -45,20 +45,16 @@
<dependencies>
<dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>${commons-logging.version}</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
Copied and modified:
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java)
==============================================================================
---
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
Mon Jul 13 10:20:13 2026 (r1936107, copy source)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
Mon Jul 20 07:28:55 2026 (r1936345)
@@ -28,6 +28,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
+import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.font.PDFont;
@@ -114,7 +115,7 @@ public class GlyphLayoutFontLoaderAwt
Objects.requireNonNull(inputStream, "InputStream must not be null");
// Copy font stream into memory to read it twice for creation of
PDType0Font and AWT Font
- try (ByteArrayInputStream bais = new
ByteArrayInputStream(inputStream.readAllBytes()))
+ try (ByteArrayInputStream bais = new
ByteArrayInputStream(IOUtils.toByteArray(inputStream)))
{
PDType0Font pdType0Font = PDType0Font.load(pdDocument, bais,
embedSubset);
bais.reset();
Copied and modified:
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutProcessorAwt.java
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutProcessorAwt.java)
==============================================================================
---
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutProcessorAwt.java
Mon Jul 13 10:20:13 2026 (r1936107, copy source)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutProcessorAwt.java
Mon Jul 20 07:28:55 2026 (r1936345)
@@ -37,7 +37,8 @@ import org.apache.pdfbox.pdmodel.font.PD
/**
- * Processor for glyph layout
+ * Processor for glyph layout. Note that this will work fully only in JDK9 or
higher.
+ * DIN 91379 characters will work with JDK8.
* <p>
* Use an object of this class only in one thread.
*
Copied and modified:
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/examples/GlyphLayoutHelloWorldAWT.java
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/examples/GlyphLayoutHelloWorldAWT.java)
==============================================================================
---
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/examples/GlyphLayoutHelloWorldAWT.java
Mon Jul 13 10:20:13 2026 (r1936107, copy source)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/examples/GlyphLayoutHelloWorldAWT.java
Mon Jul 20 07:28:55 2026 (r1936345)
@@ -29,8 +29,9 @@ import org.apache.pdfbox.pdmodel.PDPageC
import org.apache.pdfbox.pdmodel.font.PDType0Font;
/**
- * Creates a simple document with a TrueType font using GlyphLayoutProcessorAwt
- * adapted from org.apache.pdfbox.examples.pdmodel.HelloWorldTTF
+ * Creates a simple document with a TrueType font using
GlyphLayoutProcessorAwt adapted from
+ * org.apache.pdfbox.examples.pdmodel.HelloWorldTTF. Note that this will work
fully only in JDK9 or
+ * higher. DIN 91379 characters will work with JDK8.
*/
public class GlyphLayoutHelloWorldAWT
{
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/appended-resources/META-INF/LICENSE
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/appended-resources/META-INF/LICENSE)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/appended-resources/META-INF/LICENSE
Mon Jul 20 07:28:55 2026 (r1936345, copy of r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/appended-resources/META-INF/LICENSE)
@@ -0,0 +1,294 @@
+Lohit fonts (https://pagure.io/lohit):
+
+ Copyright 2011-15 Lohit Fonts Project contributors
+
+ This Font Software is licensed under the SIL Open Font License, Version
1.1.
+ This license is copied below, and is also available with a FAQ at:
+ http://scripts.sil.org/OFL
+
+
+ -----------------------------------------------------------
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+ -----------------------------------------------------------
+
+ PREAMBLE
+ The goals of the Open Font License (OFL) are to stimulate worldwide
+ development of collaborative font projects, to support the font creation
+ efforts of academic and linguistic communities, and to provide a free and
+ open framework in which fonts may be shared and improved in partnership
+ with others.
+
+ The OFL allows the licensed fonts to be used, studied, modified and
+ redistributed freely as long as they are not sold by themselves. The
+ fonts, including any derivative works, can be bundled, embedded,
+ redistributed and/or sold with any software provided that any reserved
+ names are not used by derivative works. The fonts and derivatives,
+ however, cannot be released under any other type of license. The
+ requirement for fonts to remain under this license does not apply
+ to any document created using the fonts or their derivatives.
+
+ DEFINITIONS
+ "Font Software" refers to the set of files released by the Copyright
+ Holder(s) under this license and clearly marked as such. This may
+ include source files, build scripts and documentation.
+
+ "Reserved Font Name" refers to any names specified as such after the
+ copyright statement(s).
+
+ "Original Version" refers to the collection of Font Software components as
+ distributed by the Copyright Holder(s).
+
+ "Modified Version" refers to any derivative made by adding to, deleting,
+ or substituting -- in part or in whole -- any of the components of the
+ Original Version, by changing formats or by porting the Font Software to a
+ new environment.
+
+ "Author" refers to any designer, engineer, programmer, technical
+ writer or other person who contributed to the Font Software.
+
+ PERMISSION & CONDITIONS
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
+ redistribute, and sell modified and unmodified copies of the Font
+ Software, subject to the following conditions:
+
+ 1) Neither the Font Software nor any of its individual components,
+ in Original or Modified Versions, may be sold by itself.
+
+ 2) Original or Modified Versions of the Font Software may be bundled,
+ redistributed and/or sold with any software, provided that each copy
+ contains the above copyright notice and this license. These can be
+ included either as stand-alone text files, human-readable headers or
+ in the appropriate machine-readable metadata fields within text or
+ binary files as long as those fields can be easily viewed by the user.
+
+ 3) No Modified Version of the Font Software may use the Reserved Font
+ Name(s) unless explicit written permission is granted by the corresponding
+ Copyright Holder. This restriction only applies to the primary font name as
+ presented to the users.
+
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+ Software shall not be used to promote, endorse or advertise any
+ Modified Version, except to acknowledge the contribution(s) of the
+ Copyright Holder(s) and the Author(s) or with their explicit written
+ permission.
+
+ 5) The Font Software, modified or unmodified, in part or in whole,
+ must be distributed entirely under this license, and must not be
+ distributed under any other license. The requirement for fonts to
+ remain under this license does not apply to any document created
+ using the Font Software.
+
+ TERMINATION
+ This license becomes null and void if any of the above conditions are
+ not met.
+
+ DISCLAIMER
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+ OTHER DEALINGS IN THE FONT SOFTWARE.
+
+
+FiraCode font:
+
+Copyright (c) 2014, The Fira Code Project Authors
(https://github.com/tonsky/FiraCode)
+SIL Open Font License, see above
+
+
+NotoSans Arabic font:
+
+Copyright 2022 The Noto Project Authors (https://github.com/notofonts/arabic)
+SIL Open Font License, see above
+
+
+Arimo font:
+
+Copyright 2026 The Arimo Project Authors
(https://github.com/googlefonts/arimo)
+SIL Open Font License, see above
+
+
+NotoSans Math font:
+
+Copyright 2022 The Noto Project Authors (https://github.com/notofonts/math)
+SIL Open Font License, see above
+
+
+NotoSans Thai font:
+Copyright 2022 The Noto Project Authors (https://github.com/notofonts/thai)
+
+
+Licenses for DejaVu font(s) (see also
https://www.apache.org/legal/resolved.html ):
+
+Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
+Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
+
+
+Bitstream Vera Fonts Copyright
+------------------------------
+
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
+a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the fonts accompanying this license ("Fonts") and associated
+documentation files (the "Font Software"), to reproduce and distribute the
+Font Software, including without limitation the rights to use, copy, merge,
+publish, distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright and trademark notices and this permission notice shall
+be included in all copies of one or more of the Font Software typefaces.
+
+The Font Software may be modified, altered, or added to, and in particular
+the designs of glyphs or characters in the Fonts may be modified and
+additional glyphs or characters may be added to the Fonts, only if the fonts
+are renamed to names not containing either the words "Bitstream" or the word
+"Vera".
+
+This License becomes null and void to the extent applicable to Fonts or Font
+Software that has been modified and is distributed under the "Bitstream
+Vera" names.
+
+The Font Software may be sold as part of a larger software package but no
+copy of one or more of the Font Software typefaces may be sold by itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
+TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
+FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
+ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
+FONT SOFTWARE.
+
+Except as contained in this notice, the names of Gnome, the Gnome
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font Software
+without prior written authorization from the Gnome Foundation or Bitstream
+Inc., respectively. For further information, contact: fonts at gnome dot org.
+
+Arev Fonts Copyright
+------------------------------
+
+Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the fonts accompanying this license ("Fonts") and
+associated documentation files (the "Font Software"), to reproduce
+and distribute the modifications to the Bitstream Vera Font Software,
+including without limitation the rights to use, copy, merge, publish,
+distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software
+typefaces.
+
+The Font Software may be modified, altered, or added to, and in
+particular the designs of glyphs or characters in the Fonts may be
+modified and additional glyphs or characters may be added to the
+Fonts, only if the fonts are renamed to names not containing either
+the words "Tavmjong Bah" or the word "Arev".
+
+This License becomes null and void to the extent applicable to Fonts
+or Font Software that has been modified and is distributed under the
+"Tavmjong Bah Arev" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+Except as contained in this notice, the name of Tavmjong Bah shall not
+be used in advertising or otherwise to promote the sale, use or other
+dealings in this Font Software without prior written authorization
+from Tavmjong Bah. For further information, contact: tavmjong @ free . fr.
+
+TeX Gyre DJV Math
+-----------------
+Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
+
+Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski
+(on behalf of TeX users groups) are in public domain.
+
+Letters imported from Euler Fraktur from AMSfonts are (c) American
Mathematical Society (see below).
+Bitstream Vera Fonts Copyright
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera
+is a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the fonts accompanying this license (“Fonts”) and associated documentation
+files (the “Font Software”), to reproduce and distribute the Font Software,
+including without limitation the rights to use, copy, merge, publish,
distribute,
+and/or sell copies of the Font Software, and to permit persons to whom
+the Font Software is furnished to do so, subject to the following conditions:
+
+The above copyright and trademark notices and this permission notice shall be
+included in all copies of one or more of the Font Software typefaces.
+
+The Font Software may be modified, altered, or added to, and in particular
+the designs of glyphs or characters in the Fonts may be modified and additional
+glyphs or characters may be added to the Fonts, only if the fonts are renamed
+to names not containing either the words “Bitstream” or the word “Vera”.
+
+This License becomes null and void to the extent applicable to Fonts or Font
Software
+that has been modified and is distributed under the “Bitstream Vera” names.
+
+The Font Software may be sold as part of a larger software package but no copy
+of one or more of the Font Software typefaces may be sold by itself.
+
+THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
+TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL,
+SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO
USE
+THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
+Except as contained in this notice, the names of GNOME, the GNOME Foundation,
+and Bitstream Inc., shall not be used in advertising or otherwise to promote
+the sale, use or other dealings in this Font Software without prior written
+authorization from the GNOME Foundation or Bitstream Inc., respectively.
+For further information, contact: fonts at gnome dot org.
+
+AMSFonts (v. 2.2) copyright
+
+The PostScript Type 1 implementation of the AMSFonts produced by and
+previously distributed by Blue Sky Research and Y&Y, Inc. are now freely
+available for general use. This has been accomplished through the cooperation
+of a consortium of scientific publishers with Blue Sky Research and Y&Y.
+Members of this consortium include:
+
+Elsevier Science IBM Corporation Society for Industrial and Applied
+Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS)
+
+In order to assure the authenticity of these fonts, copyright will be held by
+the American Mathematical Society. This is not meant to restrict in any way
+the legitimate use of the fonts, such as (but not limited to) electronic
+distribution of documents containing these fonts, inclusion of these fonts
+into other public domain or commercial font collections or computer
+applications, use of the outline data to create derivative fonts and/or
+faces, etc. However, the AMS does require that the AMS copyright notice be
+removed from any derivative versions of the fonts which have been altered in
+any way. In addition, to ensure the fidelity of TeX documents using Computer
+Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces,
+has requested that any alterations which yield different font metrics be
+given a different name.
\ No newline at end of file
Copied and modified:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutBidiTest.java
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutBidiTest.java)
==============================================================================
---
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutBidiTest.java
Mon Jul 13 10:20:13 2026 (r1936107, copy source)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutBidiTest.java
Mon Jul 20 07:28:55 2026 (r1936345)
@@ -26,12 +26,15 @@ import org.apache.pdfbox.pdmodel.PDDocum
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.junit.jupiter.api.condition.EnabledForJreRange;
+import org.junit.jupiter.api.condition.JRE;
/**
* Examples for bidirectional text with GlyphLayoutProcessorAwt
*
* @author Volker Kunert
*/
+@EnabledForJreRange(min = JRE.JAVA_9)
public class GlyphLayoutBidiTest extends TestBase
{
public static final String TEXT1 = "نحن الآن في شهر رمضان 1447 هجري";
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379FormTest.java
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379FormTest.java)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379FormTest.java
Mon Jul 20 07:28:55 2026 (r1936345, copy of r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379FormTest.java)
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.glyphlayout.awt;
+
+import java.awt.FontFormatException;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+import org.apache.pdfbox.Loader;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
+import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
+import org.apache.pdfbox.pdmodel.interactive.form.PDField;
+import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;
+import org.junit.jupiter.api.Test;
+
+/*
+ * Example of formatting for letters defined in:
+ * DIN 91379: Characters and defined character sequences in Unicode for the
electronic processing of names
+ * and data exchange in Europe
+ * <p>
+ * Use of the glyph layout features of Java that are based on HarfBuzz
+ *
+ * @author Volker Kunert
+ */
+
+class GlyphLayoutDin91379FormTest extends TestBase
+{
+ static String LATIN_CHARS_DIN_91379 =
+ "DIN 91379: Characters in Unicode for the electronic
processing of names "
+ + "and data exchange in Europe\n"
+ + "bll; Latin Letters (normative)\n"
+ + "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b
c d e f g h i j k l m n o p q r s t u v w x y z "
+ + "À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü
Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó "
+ + "ô õ ö ø ù ú û ü ý þ ÿ Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ
đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ "
+ + "ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł
Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş "
+ + "ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź
Ż ż Ž ž Ƈ ƈ Ə Ɨ Ơ ơ Ư ư Ʒ Ǎ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ "
+ + "Ǘ ǘ Ǚ ǚ Ǜ ǜ Ǟ ǟ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ Ǵ ǵ Ǹ ǹ Ǻ
ǻ Ǽ ǽ Ǿ ǿ Ȓ ȓ Ș ș Ț ț Ȟ ȟ ȧ Ȩ ȩ Ȫ ȫ Ȭ ȭ "
+ + "Ȯ ȯ Ȱ ȱ Ȳ ȳ ə ɨ ʒ Ḃ ḃ Ḇ ḇ Ḋ ḋ Ḍ ḍ Ḏ ḏ Ḑ ḑ ḗ Ḝ ḝ Ḟ ḟ Ḡ ḡ
Ḣ ḣ Ḥ ḥ Ḧ ḧ Ḩ ḩ Ḫ ḫ ḯ Ḱ ḱ Ḳ ḳ Ḵ ḵ Ḷ ḷ Ḻ ḻ Ṁ "
+ + "ṁ Ṃ ṃ Ṅ ṅ Ṇ ṇ Ṉ ṉ Ṓ ṓ Ṕ ṕ Ṗ ṗ Ṙ ṙ Ṛ ṛ Ṟ ṟ Ṡ ṡ Ṣ ṣ Ṫ ṫ Ṭ
ṭ Ṯ ṯ Ẁ ẁ Ẃ ẃ Ẅ ẅ Ẇ ẇ Ẍ ẍ Ẏ ẏ Ẑ ẑ Ẓ ẓ Ẕ ẕ "
+ + "ẖ ẗ ẞ Ạ ạ Ả ả Ấ ấ Ầ ầ Ẩ ẩ Ẫ ẫ Ậ ậ Ắ ắ Ằ ằ Ẳ ẳ Ẵ ẵ Ặ ặ Ẹ
ẹ Ẻ ẻ Ẽ ẽ Ế ế Ề ề Ể ể Ễ ễ Ệ ệ Ỉ ỉ Ị ị Ọ ọ Ỏ ỏ Ố "
+ + "ố Ồ ồ Ổ ổ Ỗ ỗ Ộ ộ Ớ ớ Ờ ờ Ở ở Ỡ ỡ Ợ ợ Ụ ụ Ủ ủ Ứ ứ Ừ ừ Ử
ử Ữ ữ Ự ự Ỳ ỳ Ỵ ỵ Ỷ ỷ Ỹ ỹ\n"
+ + "Sequences\n"
+ + "A̋ C̀ C̄ C̆ C̈ C̕ C̣ C̦ C̨̆ D̂ F̀ F̄ G̀ H̄ H̦ H̱ J́ J̌
K̀ K̂ K̄ K̇ K̕ K̛ K̦ K͟H "
+ + "K͟h L̂ L̥ L̥̄ L̦ M̀ M̂ M̆ M̐ N̂ N̄ N̆ N̦ P̀ P̄ P̕ P̣ R̆
R̥ R̥̄ S̀ S̄ S̛̄ S̱ T̀ T̄ "
+ + "T̈ T̕ T̛ U̇ Z̀ Z̄ Z̆ Z̈ Z̧ a̋ c̀ c̄ c̆ c̈ c̕ c̣ c̦ c̨̆
d̂ f̀ f̄ g̀ h̄ h̦ j́ k̀ "
+ + "k̂ k̄ k̇ k̕ k̛ k̦ k͟h l̂ l̥ l̥̄ l̦ m̀ m̂ m̆ m̐ n̂ n̄ n̆
n̦ p̀ p̄ p̕ p̣ r̆ r̥ r̥ "
+ + "s̀ s̄ s̛̄ s̱ t̀ t̄ t̕ t̛ u̇ z̀ z̄ z̆ z̈ z̧ Ç̆ Û̄ ç̆ û̄
ÿ́ Č̕ Č̣ č̕ č̣ ē̍ Ī́ ī́ "
+ + "ō̍ Ž̦ Ž̧ ž̦ ž̧ Ḳ̄ ḳ̄ Ṣ̄ ṣ̄ Ṭ̄ ṭ̄ Ạ̈ ạ̈ Ọ̈ ọ̈ Ụ̄ Ụ̈ ụ̄
ụ̈\n"
+ + "bnlreq; Non-Letters N1 (normative)\n"
+ + " ' , - . ` ~ ¨ ´ · ʹ ʺ ʾ ʿ ˈ ˌ ’ ‡\n"
+ + "bnl; Non-Letters N2 (normative)\n"
+ + "! \" # $ % & ( ) * + / 0 1 2 3 4 5 6 7 8 9 : ; < = > "
+ + "? @ [ \\ ] ^ _ { | } ¡ ¢ £ ¥ § © ª « ¬ ® ¯ ° ± ² ³ µ "
+ + "¶ ¹ º » ¿ × ÷ € \n"
+ + "bnlopt; Non-Letters N3 (normative)\n"
+ + "¤ ¦ ¸ ¼ ½ ¾ \n"
+ + "gl; Greek Letters (extended)\n"
+ + "Ά Έ Ή Ί Ό Ύ Ώ ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ "
+ + "Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν "
+ + "ξ ο π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ \n"
+ + "cl; Cyrillic Letters (extended)\n"
+ + "Ѝ А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш "
+ + "Щ Ъ Ь Ю Я а б в г д е ж з и й к л м н о п р с т у ф "
+ + "х ц ч ш щ ъ ь ю я ѝ \n"
+ + "enl; Non-Letters E1 (extended)\n"
+ + "ƒ ʰ ʳ ˆ ˜ ˢ ᵈ ᵗ ‘ ‚ “ ” „ † … ‰ ′ ″ ‹ › ⁰ ⁴ ⁵ ⁶ ⁷ ⁸ "
+ + "⁹ ⁿ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ™ ∞ ≤ ≥ \n"
+ + "Additional non-letters (not included in DIN 91379): – —
•�";
+
+ @Test
+ void testGlyphLayoutDin91379Form() throws IOException,
FontFormatException, URISyntaxException
+ {
+ GlyphLayoutProcessorAwt glyphLayoutProcessor = new
GlyphLayoutProcessorAwt();
+
+ String outputName = "GlyphLayoutDIN91379Form.pdf";
+ String outputFilename = "target/" + outputName;
+
+ String fontSizeString = "12";
+
+ InputStream fontStream =
GlyphLayoutDin91379FormTest.class.getResourceAsStream("/ttf/Arimo-Regular.ttf");
+ File pdfForm = new
File(GlyphLayoutDin91379FormTest.class.getResource("/pdf/PdfForm.pdf").toURI());
+
+ try (PDDocument doc = Loader.loadPDF(pdfForm))
+ {
+ // embedSubset has to be set to false
+ // last parameter is just for test coverage
+ PDType0Font font = glyphLayoutProcessor.loadFont(doc, fontStream,
+ false, new GlyphLayoutFontLoaderAwt.FontOptions());
+
+ PDDocumentCatalog docCatalog = doc.getDocumentCatalog();
+ PDAcroForm acroForm = docCatalog.getAcroForm();
+
+ acroForm.setGlyphLayoutProcessor(glyphLayoutProcessor);
+
+ PDResources resources = new PDResources();
+ String resourceFontName = resources.add(font).getName();
+ acroForm.setDefaultResources(resources);
+ for (PDField field : acroForm.getFields())
+ {
+ if (field instanceof PDTextField)
+ {
+ PDTextField textfield = (PDTextField) field;
+ textfield.setDefaultAppearance(
+ String.format("/%s %s Tf 0 g ", resourceFontName,
fontSizeString));
+ textfield.setValue(LATIN_CHARS_DIN_91379);
+ }
+ }
+ acroForm.refreshAppearances();
+ acroForm.flatten();
+ doc.save(outputFilename);
+ }
+ checkRenderIdent(outputName);
+ }
+}
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379Test.java
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379Test.java)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379Test.java
Mon Jul 20 07:28:55 2026 (r1936345, copy of r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutDin91379Test.java)
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.glyphlayout.awt;
+
+import java.awt.FontFormatException;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.URISyntaxException;
+import org.apache.pdfbox.Loader;
+
+import org.junit.jupiter.api.Test;
+
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.apache.pdfbox.text.PDFTextStripper;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * Example of formatting for letters defined in: DIN 91379: Characters in
Unicode for the electronic
+ * processing of names and data exchange in Europe
+ * <p>
+ * Use of the positioning features of Java.
+ *
+ * @author Volker Kunert
+ */
+class GlyphLayoutDin91379Test extends TestBase
+{
+ static String LATIN_CHARS_DIN_91379 =
+ "DIN 91379: Characters in Unicode for the electronic
processing of names\n"
+ + "and data exchange in Europe\n"
+ + "Font used: Arimo-Regular.ttf\n"
+ + "bll; Latin Letters (normative)\n"
+ + "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b
c d e f g h i j k l m n o p q r s t u v w x y z\n"
+ + "À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü
Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó\n"
+ + "ô õ ö ø ù ú û ü ý þ ÿ Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ
đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ\n"
+ + "ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł
Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş\n"
+ + "ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź
Ż ż Ž ž Ƈ ƈ Ə Ɨ Ơ ơ Ư ư Ʒ Ǎ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ\n"
+ + "Ǘ ǘ Ǚ ǚ Ǜ ǜ Ǟ ǟ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ Ǵ ǵ Ǹ ǹ Ǻ
ǻ Ǽ ǽ Ǿ ǿ Ȓ ȓ Ș ș Ț ț Ȟ ȟ ȧ Ȩ ȩ Ȫ ȫ Ȭ ȭ\n"
+ + "Ȯ ȯ Ȱ ȱ Ȳ ȳ ə ɨ ʒ Ḃ ḃ Ḇ ḇ Ḋ ḋ Ḍ ḍ Ḏ ḏ Ḑ ḑ ḗ Ḝ ḝ Ḟ ḟ Ḡ ḡ
Ḣ ḣ Ḥ ḥ Ḧ ḧ Ḩ ḩ Ḫ ḫ ḯ Ḱ ḱ Ḳ ḳ Ḵ ḵ Ḷ ḷ Ḻ ḻ Ṁ\n"
+ + "ṁ Ṃ ṃ Ṅ ṅ Ṇ ṇ Ṉ ṉ Ṓ ṓ Ṕ ṕ Ṗ ṗ Ṙ ṙ Ṛ ṛ Ṟ ṟ Ṡ ṡ Ṣ ṣ Ṫ ṫ Ṭ
ṭ Ṯ ṯ Ẁ ẁ Ẃ ẃ Ẅ ẅ Ẇ ẇ Ẍ ẍ Ẏ ẏ Ẑ ẑ Ẓ ẓ Ẕ ẕ\n"
+ + "ẖ ẗ ẞ Ạ ạ Ả ả Ấ ấ Ầ ầ Ẩ ẩ Ẫ ẫ Ậ ậ Ắ ắ Ằ ằ Ẳ ẳ Ẵ ẵ Ặ ặ Ẹ
ẹ Ẻ ẻ Ẽ ẽ Ế ế Ề ề Ể ể Ễ ễ Ệ ệ Ỉ ỉ Ị ị Ọ ọ Ỏ ỏ Ố\n"
+ + "ố Ồ ồ Ổ ổ Ỗ ỗ Ộ ộ Ớ ớ Ờ ờ Ở ở Ỡ ỡ Ợ ợ Ụ ụ Ủ ủ Ứ ứ Ừ ừ Ử
ử Ữ ữ Ự ự Ỳ ỳ Ỵ ỵ Ỷ ỷ Ỹ ỹ\n"
+ + "Sequences\n"
+ + "A̋ C̀ C̄ C̆ C̈ C̕ C̣ C̦ C̨̆ D̂ F̀ F̄ G̀ H̄ H̦ H̱ J́ J̌
K̀ K̂ K̄ K̇ K̕ K̛ K̦ K͟H\n"
+ + "K͟h L̂ L̥ L̥̄ L̦ M̀ M̂ M̆ M̐ N̂ N̄ N̆ N̦ P̀ P̄ P̕ P̣ R̆
R̥ R̥̄ S̀ S̄ S̛̄ S̱ T̀ T̄\n"
+ + "T̈ T̕ T̛ U̇ Z̀ Z̄ Z̆ Z̈ Z̧ a̋ c̀ c̄ c̆ c̈ c̕ c̣ c̦ c̨̆
d̂ f̀ f̄ g̀ h̄ h̦ j́ k̀\n"
+ + "k̂ k̄ k̇ k̕ k̛ k̦ k͟h l̂ l̥ l̥̄ l̦ m̀ m̂ m̆ m̐ n̂ n̄ n̆
n̦ p̀ p̄ p̕ p̣ r̆ r̥ r̥̄\n"
+ + "s̀ s̄ s̛̄ s̱ t̀ t̄ t̕ t̛ u̇ z̀ z̄ z̆ z̈ z̧ Ç̆ Û̄ ç̆ û̄
ÿ́ Č̕ Č̣ č̕ č̣ ē̍ Ī́ ī́\n"
+ + "ō̍ Ž̦ Ž̧ ž̦ ž̧ Ḳ̄ ḳ̄ Ṣ̄ ṣ̄ Ṭ̄ ṭ̄ Ạ̈ ạ̈ Ọ̈ ọ̈ Ụ̄ Ụ̈ ụ̄
ụ̈\n"
+ + "bnlreq; Non-Letters N1 (normative)\n"
+ + " ' , - . ` ~ ¨ ´ · ʹ ʺ ʾ ʿ ˈ ˌ ’ ‡\n"
+ + "bnl; Non-Letters N2 (normative)\n"
+ + "! \" # $ % & ( ) * + / 0 1 2 3 4 5 6 7 8 9 : ; < = >\n"
+ + "? @ [ \\ ] ^ _ { | } ¡ ¢ £ ¥ § © ª « ¬ ® ¯ ° ± ² ³ µ\n"
+ + "¶ ¹ º » ¿ × ÷ €\n"
+ + "bnlopt; Non-Letters N3 (normative)\n"
+ + "¤ ¦ ¸ ¼ ½ ¾\n"
+ + "gl; Greek Letters (extended)\n"
+ + "Ά Έ Ή Ί Ό Ύ Ώ ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ\n"
+ + "Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν\n"
+ + "ξ ο π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ\n"
+ + "cl; Cyrillic Letters (extended)\n"
+ + "Ѝ А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш\n"
+ + "Щ Ъ Ь Ю Я а б в г д е ж з и й к л м н о п р с т у ф\n"
+ + "х ц ч ш щ ъ ь ю я ѝ\n"
+ + "enl; Non-Letters E1 (extended)\n"
+ + "ƒ ʰ ʳ ˆ ˜ ˢ ᵈ ᵗ ‘ ‚ “ ” „ † … ‰ ′ ″ ‹ › ⁰ ⁴ ⁵ ⁶ ⁷ ⁸\n"
+ + "⁹ ⁿ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ™ ∞ ≤ ≥\n"
+ + "Additional non-letters (not included in DIN 91379): – —
•�";
+
+ @Test
+ void testGlyphLayoutDin91379() throws IOException, FontFormatException,
URISyntaxException
+ {
+ GlyphLayoutProcessorAwt glyphLayoutProcessor = new
GlyphLayoutProcessorAwt();
+
+ String outputName = "GlyphLayoutDIN91379.pdf";
+ String outputPDFFilename = "target/" + outputName;
+ String outputTextFilename = "target/GlyphLayoutDIN91379.txt";
+ float fontSize = 12.0f;
+
+ try (PDDocument doc = new PDDocument())
+ {
+ // Works poorly with DejaVu Sans, see discussion on PDFBOX-4951 on
5.7.2026
+ InputStream fontStream =
GlyphLayoutDin91379Test.class.getResourceAsStream("/ttf/Arimo-Regular.ttf");
+ // last parameter is just for better code coverage
+ PDType0Font font = glyphLayoutProcessor.loadFont(doc, fontStream,
true);
+
+ PDPage page = new PDPage();
+ doc.addPage(page);
+ try (PDPageContentStream cs = new PDPageContentStream(doc, page))
+ {
+ cs.setGlyphLayoutProcessor(glyphLayoutProcessor);
+
+ float x = page.getBBox().getLowerLeftX() + fontSize;
+ float y = page.getBBox().getUpperRightY() - fontSize;
+ showComposites(cs, font, fontSize, x, y,
LATIN_CHARS_DIN_91379);
+ }
+ doc.save(outputPDFFilename);
+ }
+ checkRenderIdent(outputName);
+
+ try (PDDocument doc = Loader.loadPDF(new File(outputPDFFilename)))
+ {
+ assertEquals(1, doc.getNumberOfPages());
+
+ PDFTextStripper stripper = new PDFTextStripper();
+ String s = stripper.getText(doc);
+ try (OutputStream os = new FileOutputStream(outputTextFilename))
+ {
+ os.write (0xEF);
+ os.write (0xBB);
+ os.write (0xBF);
+
+ try (Writer writer = new BufferedWriter(new
OutputStreamWriter(os, "utf-8")))
+ {
+ //TODO compare this output with the input, like in
TextStripper test
+ // Not yet correct as of 4.7.2026
+ writer.write(s);
+ }
+ }
+ }
+ }
+
+ /*
+ * break the text into lines and show them
+ */
+ private void showComposites(PDPageContentStream cs, PDType0Font font,
float fontSize,
+ float x, float y, String s) throws IOException
+ {
+
+ s = s.replaceAll("\t", " ");
+ String[] lines = s.split("[\n]");
+
+ for (String line : lines)
+ {
+ if (!line.isEmpty())
+ {
+ showCompositesLine(cs, font, fontSize, x, y, line);
+ y -= fontSize * 1.5;
+ }
+ }
+ }
+}
Copied and modified:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutHelloWorldAWTTest.java
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutHelloWorldAWTTest.java)
==============================================================================
---
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutHelloWorldAWTTest.java
Mon Jul 13 10:20:13 2026 (r1936107, copy source)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutHelloWorldAWTTest.java
Mon Jul 20 07:28:55 2026 (r1936345)
@@ -24,11 +24,14 @@ import java.net.URISyntaxException;
import org.junit.jupiter.api.Test;
import org.apache.pdfbox.glyphlayout.examples.GlyphLayoutHelloWorldAWT;
+import org.junit.jupiter.api.condition.EnabledForJreRange;
+import org.junit.jupiter.api.condition.JRE;
/**
*
* @author Tilman Hausherr
*/
+@EnabledForJreRange(min = JRE.JAVA_9)
class GlyphLayoutHelloWorldAWTTest extends TestBase
{
@Test
Copied and modified:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutLigaturesAndKerningTest.java
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutLigaturesAndKerningTest.java)
==============================================================================
---
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutLigaturesAndKerningTest.java
Mon Jul 13 10:20:13 2026 (r1936107, copy source)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutLigaturesAndKerningTest.java
Mon Jul 20 07:28:55 2026 (r1936345)
@@ -39,7 +39,10 @@ import org.apache.pdfbox.pdmodel.PDDocum
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.junit.jupiter.api.condition.EnabledForJreRange;
+import org.junit.jupiter.api.condition.JRE;
+@EnabledForJreRange(min = JRE.JAVA_9)
class GlyphLayoutLigaturesAndKerningTest extends TestBase
{
static final String FIRACODE_STRING = "!= == === >= <=";
Copied and modified:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutSMPTest.java
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutSMPTest.java)
==============================================================================
---
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutSMPTest.java
Mon Jul 13 10:20:13 2026 (r1936107, copy source)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutSMPTest.java
Mon Jul 20 07:28:55 2026 (r1936345)
@@ -26,6 +26,8 @@ import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.EnabledForJreRange;
+import org.junit.jupiter.api.condition.JRE;
/**
* Examples for Supplementary Multilingual Plane with GlyphLayoutProcessorAwt
that require a
@@ -34,6 +36,7 @@ import org.junit.jupiter.api.Test;
*
* @author Volker Kunert
*/
+@EnabledForJreRange(min = JRE.JAVA_9)
class GlyphLayoutSMPTest extends TestBase
{
private static final String TEXT_INTRO =
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/TestBase.java
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/TestBase.java)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/TestBase.java
Mon Jul 20 07:28:55 2026 (r1936345, copy of r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/java/org/apache/pdfbox/glyphlayout/awt/TestBase.java)
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.glyphlayout.awt;
+
+import java.awt.FontFormatException;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+import org.apache.pdfbox.Loader;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.apache.pdfbox.rendering.PDFRenderer;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ *
+ * @author Tilman Hausherr
+ * @author Volker Kunert
+ */
+class TestBase
+{
+ void checkRenderIdent(String outputName) throws IOException,
URISyntaxException
+ {
+ BufferedImage expectedImage;
+ BufferedImage actualImage;
+ try (PDDocument doc = Loader.loadPDF(new File("target/" + outputName)))
+ {
+ PDFRenderer r = new PDFRenderer(doc);
+ expectedImage = r.renderImage(0);
+ }
+ try (PDDocument doc = Loader.loadPDF(new
File(TestBase.class.getResource("/pdf/" + outputName).toURI())))
+ {
+ PDFRenderer r = new PDFRenderer(doc);
+ actualImage = r.renderImage(0);
+ }
+
+ // copied from ValidateXImage.checkIdent()
+ int w = expectedImage.getWidth();
+ int h = expectedImage.getHeight();
+ assertEquals(w, actualImage.getWidth());
+ assertEquals(h, actualImage.getHeight());
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ int p1 = expectedImage.getRGB(x, y);
+ int p2 = actualImage.getRGB(x, y);
+ if (p1 != p2)
+ {
+ String errMsg = String.format("(%d,%d) expected: <%08X>
but was: <%08X>; ",
+ x, y, p1, p2);
+ fail(errMsg);
+ }
+ }
+ }
+ }
+
+ /**
+ * Create the PDType0Font font
+ */
+ PDType0Font createPdType0Font(GlyphLayoutProcessorAwt
glyphLayoutProcessor, PDDocument doc,
+ String fontPath) throws IOException, FontFormatException
+ {
+ return createPdType0Font(glyphLayoutProcessor, doc, fontPath, new
GlyphLayoutFontLoaderAwt.FontOptions());
+ }
+
+ /*
+ * Create the PDType0Font font with font options
+ */
+ PDType0Font createPdType0Font(GlyphLayoutProcessorAwt
glyphLayoutProcessor, PDDocument doc,
+ String fontPath, GlyphLayoutFontLoaderAwt.FontOptions fontOptions)
throws IOException, FontFormatException
+ {
+ try (InputStream fontStream =
this.getClass().getResourceAsStream(fontPath))
+ {
+ return glyphLayoutProcessor.loadFont(doc, fontStream, fontOptions);
+ }
+ }
+
+ /*
+ * show one line
+ */
+ void showCompositesLine(PDPageContentStream cs, PDType0Font font, float
fontSize,
+ float x, float y, String line) throws IOException
+ {
+ cs.beginText();
+ cs.setFont(font, fontSize);
+ cs.newLineAtOffset(x, y);
+ cs.showText(line);
+ cs.endText();
+ }
+}
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutBidi.pdf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutBidi.pdf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutDIN91379.pdf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutDIN91379.pdf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutDIN91379Form.pdf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutDIN91379Form.pdf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutLigaturesAndKerning.pdf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutLigaturesAndKerning.pdf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutSMP.pdf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/GlyphLayoutSMP.pdf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/HelloWorld.pdf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/HelloWorld.pdf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/pdf/PdfForm.pdf (from
r1936107, pdfbox/trunk/pdfbox-layout-awt/src/test/resources/pdf/PdfForm.pdf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/Arimo-Regular.ttf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/Arimo-Regular.ttf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/DejaVuSans.ttf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/DejaVuSans.ttf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/FiraCode-Regular.ttf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/FiraCode-Regular.ttf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/Lohit-Bengali.ttf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/Lohit-Bengali.ttf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/NotoSansArabic-Regular.ttf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/NotoSansArabic-Regular.ttf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/NotoSansMath-Regular.ttf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/NotoSansMath-Regular.ttf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/ttf/NotoSansThai-Regular.ttf
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/ttf/NotoSansThai-Regular.ttf)
==============================================================================
Binary file (source and/or target). No diff available.
Copied:
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/txt/GlyphLayoutDIN91379.txt
(from r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/txt/GlyphLayoutDIN91379.txt)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++
pdfbox/branches/3.0/pdfbox-layout-awt/src/test/resources/txt/GlyphLayoutDIN91379.txt
Mon Jul 20 07:28:55 2026 (r1936345, copy of r1936107,
pdfbox/trunk/pdfbox-layout-awt/src/test/resources/txt/GlyphLayoutDIN91379.txt)
@@ -0,0 +1,41 @@
+DIN 91379: Characters in Unicode for the electronic processing of names
+and data exchange in Europe
+Font used: Arimo-Regular.ttf
+bll; Latin Letters (normative)
+A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m
n o p q r s t u v w x y z
+À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç
è é ê ë ì í î ï ð ñ ò ó
+ô õ ö ø ù ú û ü ý þ ÿ Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě
Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ
+ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō
Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş
+ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž Ƈ ƈ Ə Ɨ Ơ ơ Ư
ư Ʒ Ǎ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ
+Ǘ ǘ Ǚ ǚ Ǜ ǜ Ǟ ǟ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ Ǵ ǵ Ǹ ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ Ȓ ȓ Ș ș Ț ț
Ȟ ȟ ȧ Ȩ ȩ Ȫ ȫ Ȭ ȭ
+Ȯ ȯ Ȱ ȱ Ȳ ȳ ə ɨ ʒ Ḃ ḃ Ḇ ḇ Ḋ ḋ Ḍ ḍ Ḏ ḏ Ḑ ḑ ḗ Ḝ ḝ Ḟ ḟ Ḡ ḡ Ḣ ḣ Ḥ ḥ Ḧ ḧ Ḩ ḩ Ḫ ḫ ḯ
Ḱ ḱ Ḳ ḳ Ḵ ḵ Ḷ ḷ Ḻ ḻ Ṁ
+ṁ Ṃ ṃ Ṅ ṅ Ṇ ṇ Ṉ ṉ Ṓ ṓ Ṕ ṕ Ṗ ṗ Ṙ ṙ Ṛ ṛ Ṟ ṟ Ṡ ṡ Ṣ ṣ Ṫ ṫ Ṭ ṭ Ṯ ṯ Ẁ ẁ Ẃ ẃ Ẅ ẅ Ẇ ẇ
Ẍ ẍ Ẏ ẏ Ẑ ẑ Ẓ ẓ Ẕ ẕ
+ẖ ẗ ẞ Ạ ạ Ả ả Ấ ấ Ầ ầ Ẩ ẩ Ẫ ẫ Ậ ậ Ắ ắ Ằ ằ Ẳ ẳ Ẵ ẵ Ặ ặ Ẹ ẹ Ẻ ẻ Ẽ ẽ Ế ế Ề ề Ể ể
Ễ ễ Ệ ệ Ỉ ỉ Ị ị Ọ ọ Ỏ ỏ Ố
+ố Ồ ồ Ổ ổ Ỗ ỗ Ộ ộ Ớ ớ Ờ ờ Ở ở Ỡ ỡ Ợ ợ Ụ ụ Ủ ủ Ứ ứ Ừ ừ Ử ử Ữ ữ Ự ự Ỳ ỳ Ỵ ỵ Ỷ ỷ
Ỹ ỹ
+Sequences
+A̋ C̀ C̄ C̆ C̈ C̕ C̣ C̦ C̨̆ D̂ F̀ F̄ G̀ H̄ H̦ H̱ J́ J̌ K̀ K̂ K̄ K̇ K̕ K̛ K̦
K͟H
+K͟h L̂ L̥ L̥̄ L̦ M̀ M̂ M̆ M̐ N̂ N̄ N̆ N̦ P̀ P̄ P̕ P̣ R̆ R̥ R̥̄ S̀ S̄ S̛̄ S̱ T̀
T̄
+T̈ T ̕T̛ U̇ Z̀ Z̄ Z̆ Z̈ Z̧ a̋ c̀ c̄ c̆ c̈ c̕ c ̣c̦ c̨̆ d̂ f ̀f̄ g̀ h̄ h̦ ȷ ́k̀
+k̂ k̄ k̇ k ̕k̛ k̦ k͟h l̂ l̥ l̥̄ l̦ m̀ m̂ m̆ m̐ n̂ n̄ n̆ n̦ p̀ p̄ p̕ p ̣r̆ r̥
r̥̄
+s̀ s̄ s̛̄ s̱ t̀ t̄ t̕ t̛ u̇ z̀ z̄ z̆ z̈ z̧ Ç̆ Û̄ ç̆ û̄ ÿ́ Č̕ Č̣ č ̕č ̣ē̍ Ī́ ī́
+ō̍ Ž̦ Ž̧ ž̦ ž̧ Ḳ̄ ḳ̄ Ṣ̄ ṣ̄ Ṭ̄ ṭ̄ Ạ̈ ạ̈ Ọ̈ ọ̈ Ụ̄ Ụ̈ ụ̄ ụ̈
+bnlreq; Non-Letters N1 (normative)
+ ' , - . ` ~ ¨ ´ · ʹ ʺ ʾ ʿ ˈ ˌ ’ ‡
+bnl; Non-Letters N2 (normative)
+! " # $ % & ( ) * + / 0 1 2 3 4 5 6 7 8 9 : ; < = >
+? @ [ \ ] ^ _ { | } ¡ ¢ £ ¥ § © ª « ¬ ® ¯ ° ± ² ³ µ
+¶ ¹ º » ¿ × ÷ €
+bnlopt; Non-Letters N3 (normative)
+¤ ¦ ¸ ¼ ½ ¾
+gl; Greek Letters (extended)
+Ά Έ Ή Ί Ό Ύ Ώ ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ
+Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν
+ξ ο π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ
+cl; Cyrillic Letters (extended)
+Ѝ А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш
+Щ Ъ Ь Ю Я а б в г д е ж з и й к л м н о п р с т у ф
+х ц ч ш щ ъ ь ю я ѝ
+enl; Non-Letters E1 (extended)
+ƒ ʰ ʳ ˆ ˜ ˢ ᵈ ᵗ ‘ ‚ “ ” „ † … ‰ ′ ″ ‹ › ⁰ ⁴ ⁵ ⁶ ⁷ ⁸
+⁹ ⁿ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ™ ∞ ≤ ≥
+Additional non-letters (not included in DIN 91379): – — •�