[ https://issues.apache.org/jira/browse/PDFBOX-3272?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15202161#comment-15202161 ]
John Hewson commented on PDFBOX-3272: ------------------------------------- Makes sense, close() does certainly need to actually close something. > Loaded fonts file descriptors open after closing document > --------------------------------------------------------- > > Key: PDFBOX-3272 > URL: https://issues.apache.org/jira/browse/PDFBOX-3272 > Project: PDFBox > Issue Type: Bug > Components: FontBox > Affects Versions: 1.8.11, 2.0.0 > Environment: Apache Tomcat, Linux > Reporter: Gregor Ambrozic > Assignee: Andreas Lehmkühler > Fix For: 1.8.12, 2.0.1, 2.1.0 > > Attachments: OpenSans-Regular.ttf > > > I am experiencing problems with TTF fonts loaded for generating PDFs which > eventually result in too many open files on Linux. The PDFBox version I > tested last was 2.0.0-RC3. > Basically for each PDF I create a document and load two fonts which I want to > use. After the document is generated I close all the resources, but the file > descriptors for both fonts remain open. > The file descriptors should be automatically closed or an API should exist to > close font resources. > My basic code: > {code} > import java.io.File; > import java.io.IOException; > import java.lang.management.ManagementFactory; > import org.apache.commons.io.output.ByteArrayOutputStream; > import org.apache.pdfbox.pdmodel.PDDocument; > import org.apache.pdfbox.pdmodel.PDPage; > import org.apache.pdfbox.pdmodel.PDPageContentStream; > import org.apache.pdfbox.pdmodel.common.PDRectangle; > import org.apache.pdfbox.pdmodel.font.PDFont; > import org.apache.pdfbox.pdmodel.font.PDType0Font; > public class FontTest > { > // Run the program which will create 1 PDF document and close all > resources per second for 100 seconds. > // The font open file descriptor count will increase all the time, > until the program finishes. > // Command to check open files: lsof -p PID | grep ttf > public static void main(String[] args) > { > // should print out PID before @<hostname> > System.out.println("process id: " + > ManagementFactory.getRuntimeMXBean().getName()); > for (int i = 0; i < 100; i++) > { > createPDF(); > try > { > Thread.sleep(1000); > } > catch (InterruptedException e) > { > e.printStackTrace(); > } > } > } > private static void createPDF() > { > PDDocument doc = null; > PDPage page = null; > ByteArrayOutputStream bos = null; > try > { > doc = new PDDocument(); > page = new PDPage(PDRectangle.A4); > doc.addPage(page); > // using standard font > PDFont font = PDType0Font.load(doc, new > File("./pdf/OpenSans-Regular.ttf")); > PDPageContentStream content = new > PDPageContentStream(doc, page); > content.beginText(); > content.setFont(font, 72); > content.showText("OMG"); > content.endText(); > content.close(); > bos = new ByteArrayOutputStream(); > doc.save(bos); > byte[] bytes = bos.toByteArray(); > System.out.println("create new pdf with size: " + > bytes.length); > } > catch (Exception e) > { > e.printStackTrace(); > } > finally > { > try > { > doc.close(); > bos.close(); > } > catch (IOException e) > { > e.printStackTrace(); > } > } > } > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org