You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlgraphics.apache.org by ss...@apache.org on 2023/03/23 13:41:56 UTC
[xmlgraphics-fop-pdf-images] branch main updated: FOP-3124: Subrs data missing from font merging
This is an automated email from the ASF dual-hosted git repository.
ssteiner pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/xmlgraphics-fop-pdf-images.git
The following commit(s) were added to refs/heads/main by this push:
new f11ef09 FOP-3124: Subrs data missing from font merging
f11ef09 is described below
commit f11ef0941991887dec015407ab58e36bc2b64232
Author: Simon Steiner <ss...@apache.org>
AuthorDate: Thu Mar 23 13:38:57 2023 +0000
FOP-3124: Subrs data missing from font merging
---
.../apache/fop/render/pdf/pdfbox/MergeCFFFonts.java | 18 ++++++++++++++----
.../apache/fop/render/pdf/PDFBoxAdapterTestCase.java | 20 ++++++++++++++++++++
2 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/MergeCFFFonts.java b/src/java/org/apache/fop/render/pdf/pdfbox/MergeCFFFonts.java
index f44c9f1..d410425 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/MergeCFFFonts.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/MergeCFFFonts.java
@@ -276,16 +276,17 @@ public class MergeCFFFonts extends OTFSubSetFile implements MergeFonts {
offsets.privateDict = currentPos;
writePrivateDict();
- //Char Strings Index
- offsets.charString = currentPos;
- writeIndex(subsetCharStringsIndex);
-
//Local subroutine index
offsets.localIndex = currentPos;
+ readSubrs();
if (!subsetLocalIndexSubr.isEmpty()) {
writeIndex(subsetLocalIndexSubr);
}
+ //Char Strings Index
+ offsets.charString = currentPos;
+ writeIndex(subsetCharStringsIndex);
+
if (hasFDSelect) {
offsets.fdArray = currentPos;
List<byte[]> index = new ArrayList<byte[]>();
@@ -314,6 +315,15 @@ public class MergeCFFFonts extends OTFSubSetFile implements MergeFonts {
}
}
+ private void readSubrs() {
+ if (fileFont instanceof CFFType1Font) {
+ byte[][] subrsArray = (byte[][]) ((CFFType1Font) fileFont).getPrivateDict().get("Subrs");
+ if (subrsArray != null) {
+ subsetLocalIndexSubr.addAll(Arrays.asList(subrsArray));
+ }
+ }
+ }
+
protected void writeEncoding() throws IOException {
if (!chars.isEmpty()) {
writeCard16(chars.size());
diff --git a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
index 1c6f5a4..bfb72ae 100644
--- a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
@@ -45,6 +45,7 @@ import static org.mockito.Mockito.when;
import org.apache.commons.io.IOUtils;
import org.apache.fontbox.cff.CFFParser;
+import org.apache.fontbox.cff.CFFType1Font;
import org.apache.fontbox.ttf.GlyphData;
import org.apache.fontbox.ttf.TTFParser;
import org.apache.fontbox.ttf.TrueTypeFont;
@@ -100,6 +101,8 @@ public class PDFBoxAdapterTestCase {
protected static final String CFF1 = "2fonts.pdf";
protected static final String CFF2 = "2fonts2.pdf";
protected static final String CFF3 = "simpleh.pdf";
+ protected static final String CFFSUBRS = "cffsubrs.pdf";
+ protected static final String CFFSUBRS2 = "cffsubrs2.pdf";
protected static final String TTCID1 = "ttcid1.pdf";
protected static final String TTCID2 = "ttcid2.pdf";
protected static final String TTSubset1 = "ttsubset.pdf";
@@ -772,4 +775,21 @@ public class PDFBoxAdapterTestCase {
pdfdoc.output(bos);
Assert.assertFalse(bos.toString("UTF-8").contains("/R 90"));
}
+
+ @Test
+ public void testCFFSubrs() throws Exception {
+ FontInfo fontInfo = new FontInfo();
+ writeText(fontInfo, CFFSUBRS);
+ writeText(fontInfo, CFFSUBRS2);
+ byte[] data = null;
+ for (Typeface font : fontInfo.getUsedFonts().values()) {
+ if ("AllianzNeo-Bold".equals(font.getEmbedFontName())) {
+ InputStream is = ((CustomFont) font).getInputStream();
+ data = IOUtils.toByteArray(is);
+ }
+ }
+ CFFType1Font font = (CFFType1Font) new CFFParser().parse(data).get(0);
+ byte[][] indexData = (byte[][]) font.getPrivateDict().get("Subrs");
+ Assert.assertEquals(indexData.length, 183);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: commits-help@xmlgraphics.apache.org