[jira] [Commented] (FOP-3143) PDF/A validation error
[ https://issues.apache.org/jira/browse/FOP-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17779573#comment-17779573 ] zouari commented on FOP-3143: - {code:java} fop-core/src/main/java/org/apache/fop/fonts/CIDFull.java | 5 + fop-core/src/main/java/org/apache/fop/fonts/CIDSet.java | 6 ++ fop-core/src/main/java/org/apache/fop/fonts/CIDSubset.java | 5 + fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java | 10 +- .../src/test/java/org/apache/fop/fonts/CIDSubsetTestCase.java | 5 + 5 files changed, 30 insertions(+), 1 deletion(-)diff --git a/fop-core/src/main/java/org/apache/fop/fonts/CIDFull.java b/fop-core/src/main/java/org/apache/fop/fonts/CIDFull.java index 9d5184b02..b83522ac1 100644 --- a/fop-core/src/main/java/org/apache/fop/fonts/CIDFull.java +++ b/fop-core/src/main/java/org/apache/fop/fonts/CIDFull.java @@ -121,6 +121,11 @@ public class CIDFull implements CIDSet { initGlyphIndices(); return glyphIndices; } + + /** {@inheritDoc} */ + public BitSet getAllGlyphIndices() { + return getGlyphIndices(); + } /** {@inheritDoc} */ public int[] getWidths() { diff --git a/fop-core/src/main/java/org/apache/fop/fonts/CIDSet.java b/fop-core/src/main/java/org/apache/fop/fonts/CIDSet.java index d89c8937b..158cf1675 100644 --- a/fop-core/src/main/java/org/apache/fop/fonts/CIDSet.java +++ b/fop-core/src/main/java/org/apache/fop/fonts/CIDSet.java @@ -101,6 +101,12 @@ public interface CIDSet { * @return a BitSet indicating available glyph indices */ BitSet getGlyphIndices(); + + /** + * Returns a BitSet with bits set for each available glyph index in the font. + * @return a BitSet indicating available glyph indices + */ + BitSet getAllGlyphIndices(); /** * Return the array of widths. diff --git a/fop-core/src/main/java/org/apache/fop/fonts/CIDSubset.java b/fop-core/src/main/java/org/apache/fop/fonts/CIDSubset.java index 470e59a37..38fa26293 100644 --- a/fop-core/src/main/java/org/apache/fop/fonts/CIDSubset.java +++ b/fop-core/src/main/java/org/apache/fop/fonts/CIDSubset.java @@ -157,6 +157,11 @@ public class CIDSubset implements CIDSet { } return bitset; } + + /** {@inheritDoc} */ + public BitSet getAllGlyphIndices() { + return font.getGlyphIndices(); + } /** {@inheritDoc} */ public int[] getWidths() { diff --git a/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java b/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java index aad24cae9..4924b1bdc 100644 --- a/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java +++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java @@ -47,6 +47,8 @@ import org.apache.xmlgraphics.java2d.color.NamedColorSpace; import org.apache.xmlgraphics.xmp.Metadata; import org.apache.fop.fonts.CIDFont; +import org.apache.fop.fonts.CIDSet; +import org.apache.fop.fonts.CIDSubset; import org.apache.fop.fonts.CodePointMapping; import org.apache.fop.fonts.CustomFont; import org.apache.fop.fonts.EmbeddingMode; @@ -1317,7 +1319,13 @@ public class PDFFactory { } private void buildCIDSet(PDFFontDescriptor descriptor, CIDFont cidFont) { - BitSet cidSet = cidFont.getCIDSet().getGlyphIndices(); + CIDSet cidSetObject = cidFont.getCIDSet(); + BitSet cidSet = null; + if (cidSetObject instanceof CIDSubset && getDocument().getProfile().isPDFAActive()) { + cidSet = cidSetObject.getAllGlyphIndices(); + } else { + cidSet = cidSetObject.getGlyphIndices(); + } PDFStream pdfStream = makeStream(null, true); ByteArrayOutputStream baout = new ByteArrayOutputStream(cidSet.length() / 8 + 1); int value = 0; diff --git a/fop-core/src/test/java/org/apache/fop/fonts/CIDSubsetTestCase.java b/fop-core/src/test/java/org/apache/fop/fonts/CIDSubsetTestCase.java index b81964cf8..03ac07fed 100644 --- a/fop-core/src/test/java/org/apache/fop/fonts/CIDSubsetTestCase.java +++ b/fop-core/src/test/java/org/apache/fop/fonts/CIDSubsetTestCase.java @@ -195,4 +195,9 @@ public class CIDSubsetTestCase { assertTrue(Arrays.binarySearch(widths, width) >= 0); } } + + @Test + public void testAllGetGlyphIndices() { + assertEquals(bs, cidSub.getAllGlyphIndices()); + } } {code} > PDF/A validation error > -- > > Key: FOP-3143 > URL: https://issues.apache.org/jira/browse/FOP-3143 > Project: FOP > Issue Type: Bug >Affects Versions: 2.3, 2.4 >Reporter: zouari >Priority: Major > Attachments: error.zip > > > When the PDF/A documents generated by FOP *with the font > embedding-mode="subset"* are validated for PDF/A conformance, I get this > error: > "The following font CIDSet data
[jira] [Commented] (FOP-3143) PDF/A validation error
[ https://issues.apache.org/jira/browse/FOP-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17779572#comment-17779572 ] zouari commented on FOP-3143: - fop-core/src/main/java/org/apache/fop/fonts/CIDFull.java | 5 + fop-core/src/main/java/org/apache/fop/fonts/CIDSet.java | 6 ++ fop-core/src/main/java/org/apache/fop/fonts/CIDSubset.java | 5 + fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java | 10 +- .../src/test/java/org/apache/fop/fonts/CIDSubsetTestCase.java | 5 + 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/fop-core/src/main/java/org/apache/fop/fonts/CIDFull.java b/fop-core/src/main/java/org/apache/fop/fonts/CIDFull.java index 9d5184b02..b83522ac1 100644 --- a/fop-core/src/main/java/org/apache/fop/fonts/CIDFull.java +++ b/fop-core/src/main/java/org/apache/fop/fonts/CIDFull.java @@ -121,6 +121,11 @@ public class CIDFull implements CIDSet { initGlyphIndices(); return glyphIndices; } + + /** \{@inheritDoc} */ + public BitSet getAllGlyphIndices() { + return getGlyphIndices(); + } /** \{@inheritDoc} */ public int[] getWidths() { diff --git a/fop-core/src/main/java/org/apache/fop/fonts/CIDSet.java b/fop-core/src/main/java/org/apache/fop/fonts/CIDSet.java index d89c8937b..158cf1675 100644 --- a/fop-core/src/main/java/org/apache/fop/fonts/CIDSet.java +++ b/fop-core/src/main/java/org/apache/fop/fonts/CIDSet.java @@ -101,6 +101,12 @@ public interface CIDSet { * @return a BitSet indicating available glyph indices */ BitSet getGlyphIndices(); + + /** + * Returns a BitSet with bits set for each available glyph index in the font. + * @return a BitSet indicating available glyph indices + */ + BitSet getAllGlyphIndices(); /** * Return the array of widths. diff --git a/fop-core/src/main/java/org/apache/fop/fonts/CIDSubset.java b/fop-core/src/main/java/org/apache/fop/fonts/CIDSubset.java index 470e59a37..38fa26293 100644 --- a/fop-core/src/main/java/org/apache/fop/fonts/CIDSubset.java +++ b/fop-core/src/main/java/org/apache/fop/fonts/CIDSubset.java @@ -157,6 +157,11 @@ public class CIDSubset implements CIDSet { } return bitset; } + + /** \{@inheritDoc} */ + public BitSet getAllGlyphIndices() { + return font.getGlyphIndices(); + } /** \{@inheritDoc} */ public int[] getWidths() { diff --git a/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java b/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java index aad24cae9..4924b1bdc 100644 --- a/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java +++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java @@ -47,6 +47,8 @@ import org.apache.xmlgraphics.java2d.color.NamedColorSpace; import org.apache.xmlgraphics.xmp.Metadata; import org.apache.fop.fonts.CIDFont; +import org.apache.fop.fonts.CIDSet; +import org.apache.fop.fonts.CIDSubset; import org.apache.fop.fonts.CodePointMapping; import org.apache.fop.fonts.CustomFont; import org.apache.fop.fonts.EmbeddingMode; @@ -1317,7 +1319,13 @@ public class PDFFactory { } private void buildCIDSet(PDFFontDescriptor descriptor, CIDFont cidFont) { - BitSet cidSet = cidFont.getCIDSet().getGlyphIndices(); + CIDSet cidSetObject = cidFont.getCIDSet(); + BitSet cidSet = null; + if (cidSetObject instanceof CIDSubset && getDocument().getProfile().isPDFAActive()) { + cidSet = cidSetObject.getAllGlyphIndices(); + } else { + cidSet = cidSetObject.getGlyphIndices(); + } PDFStream pdfStream = makeStream(null, true); ByteArrayOutputStream baout = new ByteArrayOutputStream(cidSet.length() / 8 + 1); int value = 0; diff --git a/fop-core/src/test/java/org/apache/fop/fonts/CIDSubsetTestCase.java b/fop-core/src/test/java/org/apache/fop/fonts/CIDSubsetTestCase.java index b81964cf8..03ac07fed 100644 --- a/fop-core/src/test/java/org/apache/fop/fonts/CIDSubsetTestCase.java +++ b/fop-core/src/test/java/org/apache/fop/fonts/CIDSubsetTestCase.java @@ -195,4 +195,9 @@ public class CIDSubsetTestCase { assertTrue(Arrays.binarySearch(widths, width) >= 0); } } + + @Test + public void testAllGetGlyphIndices() { + assertEquals(bs, cidSub.getAllGlyphIndices()); + } } > PDF/A validation error > -- > > Key: FOP-3143 > URL: https://issues.apache.org/jira/browse/FOP-3143 > Project: FOP > Issue Type: Bug >Affects Versions: 2.3, 2.4 >Reporter: zouari >Priority: Major > Attachments: error.zip > > > When the PDF/A documents generated by FOP *with the font > embedding-mode="subset"* are validated for PDF/A conformance, I get this > error: > "The following font CIDSet data is not
[jira] [Commented] (FOP-3143) PDF/A validation error
[ https://issues.apache.org/jira/browse/FOP-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17779570#comment-17779570 ] zouari commented on FOP-3143: - PDF/A does not require all policies to be fully integrated. It appears that the CIDSet does not correctly identify all glyphs present in the subset font. here is a patch that fixes the problem. > PDF/A validation error > -- > > Key: FOP-3143 > URL: https://issues.apache.org/jira/browse/FOP-3143 > Project: FOP > Issue Type: Bug >Affects Versions: 2.3, 2.4 >Reporter: zouari >Priority: Major > Attachments: error.zip > > > When the PDF/A documents generated by FOP *with the font > embedding-mode="subset"* are validated for PDF/A conformance, I get this > error: > "The following font CIDSet data is not consistent with embedded font program: > EA+ArialMT" > to test pdf validation I use: > https://avepdf.com/fr/pdfa-validation -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Commented] (FOP-3143) PDF/A validation error
[ https://issues.apache.org/jira/browse/FOP-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17757371#comment-17757371 ] Chris Bowditch commented on FOP-3143: - This isn't a bug! Its a requirement of PDF/A that all fonts are fully embedded. FOP allows either embedding mode you just need to configure full embedding when generating PDF/A. Please send questions to the mailing list rather than raising bugs in future. This will now be closed > PDF/A validation error > -- > > Key: FOP-3143 > URL: https://issues.apache.org/jira/browse/FOP-3143 > Project: FOP > Issue Type: Bug >Affects Versions: 2.3, 2.4 >Reporter: zouari >Priority: Major > Attachments: error.zip > > > When the PDF/A documents generated by FOP *with the font > embedding-mode="subset"* are validated for PDF/A conformance, I get this > error: > "The following font CIDSet data is not consistent with embedded font program: > EA+ArialMT" > to test pdf validation I use: > https://avepdf.com/fr/pdfa-validation -- This message was sent by Atlassian Jira (v8.20.10#820010)