[
https://issues.apache.org/jira/browse/PDFBOX-3826?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andreas Lehmkühler updated PDFBOX-3826:
---------------------------------------
Attachment: PDFBOX-3628_closeTTF.patch
I'm thinking about closing the TrueTypeFont after embedding it if the ttf was
created by PDFBox and if the font isn't subsetted. It should be safe as all
data is loaded to the ttf and is available without parsing the underlying data
again. I've attached a patch with my proposed changes. WDYT, am I missing
something?
> NPE if RAFDataStream.getCurrentPosition() when TrueTypeFont created from file
> is reused
> ---------------------------------------------------------------------------------------
>
> Key: PDFBOX-3826
> URL: https://issues.apache.org/jira/browse/PDFBOX-3826
> Project: PDFBox
> Issue Type: Bug
> Components: FontBox
> Affects Versions: 2.0.6
> Reporter: Tilman Hausherr
> Assignee: Andreas Lehmkühler
> Labels: regression
> Fix For: 2.0.8, 3.0.0
>
> Attachments: PDFBOX-3628_closeTTF.patch
>
>
> {code}
> java.lang.NullPointerException: null
> at
> org.apache.fontbox.ttf.RAFDataStream.getCurrentPosition(RAFDataStream.java:88)
> at
> org.apache.fontbox.ttf.TrueTypeFont.getTableBytes(TrueTypeFont.java:121)
> at
> org.apache.fontbox.ttf.TTFSubsetter.writeToStream(TTFSubsetter.java:1012)
> at
> org.apache.pdfbox.pdmodel.font.TrueTypeEmbedder.subset(TrueTypeEmbedder.java:329)
> at
> org.apache.pdfbox.pdmodel.font.PDType0Font.subset(PDType0Font.java:162)
> at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1275)
> at
> org.apache.pdfbox.pdmodel.font.PDFontTest.testMultipleFontFileReuse(PDFontTest.java:160)
> {code}
> {code}
> @Test
> public void testMultipleFontFileReuse() throws IOException,
> URISyntaxException
> {
> URL url = PDFontTest.class.getClassLoader().getResource(
> "org/apache/pdfbox/ttf/LiberationSans-Regular.ttf");
> File file = new File(url.toURI());
> TrueTypeFont ttf = new TTFParser().parse(file);
> for (int i = 0; i < 32; ++i)
> {
> try (PDDocument doc = new PDDocument())
> {
> PDPage page = new PDPage();
> doc.addPage(page);
> PDFont font = PDType0Font.load(doc, ttf, true);
> try (PDPageContentStream cs = new PDPageContentStream(doc,
> page))
> {
> cs.beginText();
> cs.setFont(font, 10);
> cs.showText("testMultipleFontFileReuse");
> cs.endText();
> }
> doc.save(new ByteArrayOutputStream());
> }
> }
> }
> {code}
> This happens only if the TrueTypeFont is created from a file, not when it is
> created from a stream (PDFBOX-3337). It worked in 2.0.0 but no longer since
> 2.0.1.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]