[
https://issues.apache.org/jira/browse/PDFBOX-5904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17902009#comment-17902009
]
Jxtps commented on PDFBOX-5904:
-------------------------------
There seems to be some confusion, sorry for not having been more clear. Right
now, getCFF() is implemented as:
{code:java}
public CFFTable getCFF() throws IOException
{
if (!hasPostScriptTag)
{
throw new UnsupportedOperationException("TTF fonts do not have a
CFF table");
}
return (CFFTable) getTable(CFFTable.TAG);
}
{code}
This should be:
{code:java}
public CFFTable getCFF() throws IOException
{
if (!isPostscript())
{
throw new UnsupportedOperationException("TTF fonts do not have a
CFF table");
}
return (CFFTable) getTable(CFFTable.TAG);
}
{code}
Analogously in getGlyph(), and getPath().
This came from a font file I encountered in the wild, but I'm unfortunately not
at liberty to share the file itself. It's fairly easy to simulate - just
overwrite OTTO with 1.0 (though that will of course require updating the
checksums...)
> Fontbox OpenTypeFont should use isPostScript() internally, not isPostScript
> ---------------------------------------------------------------------------
>
> Key: PDFBOX-5904
> URL: https://issues.apache.org/jira/browse/PDFBOX-5904
> Project: PDFBox
> Issue Type: Bug
> Components: FontBox
> Affects Versions: 3.0.3 PDFBox
> Reporter: Jxtps
> Assignee: Andreas Lehmkühler
> Priority: Major
>
> OpenTypeFont's isPostScript() is defined as:
> {code:java}
> public boolean isPostScript()
> {
> return isPostScript || tables.containsKey(CFFTable.TAG) ||
> tables.containsKey("CFF2");
> } {code}
> See:
> https://github.com/apache/pdfbox/blob/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java
> So it checks for the presence of key tables (CFF, CFF2).
> However, the getters in the class only checks the private variable
> isPostScript, not the method.
> This causes buggy font files with the wrong version tag but with a CFF table
> to throw exceptions.
> To fix: replace the internall references to isPostScript by calls to
> isPostScript().
> Workaround: crack open the module and create a custom class in the same
> package and have it call setVersion(Float.intBitsToFloat(0x4F54F4F4)), but
> that kind of sucks.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]