IText保持pfm文件在Ubuntu中打开

问题描述 投票:0回答:1

我们有一个在Tomcat / Ubuntu上运行并使用iText7.1.8生成pdf文档(发票)的Web应用程序。我们注意到我们的Tomcat崩溃了很多次,然后在调查发现问题出在iText之后。这里是例外

SEVERE: Socket accept failed
org.apache.tomcat.jni.Error: 24: Too many open files
        at org.apache.tomcat.jni.Socket.accept(Native Method)
        at org.apache.tomcat.util.net.AprEndpoint$Acceptor.run(AprEndpoint.java:992)
        at java.lang.Thread.run(Thread.java:745)

当我们运行此命令:sudo ls -l / proc / Tomcat-PID / fd时,我们注意到打开的大多数文件都带有扩展名。pfm(例如:/ usr / share / fonts /type1/gsfonts/n022004l.pfm),并且从未发布。该数量将继续增加,直到达到打开的文件的最大数量。

这是用于生成pdf的Java代码。

public static File convertToPDF(File pdfFile,URL webURL){
        InputStream htmlStream=null;
        FileOutputStream pdfStream=null;
        try {
                htmlStream=webURL.openStream();
                pdfStream=new FileOutputStream(pdfFile);
                ConverterProperties properties = new ConverterProperties();
                properties.setFontProvider(new DefaultFontProvider(true, true, true));
                HtmlConverter.convertToPdf(htmlStream, pdfStream,properties);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                if(htmlStream!= null){
                    htmlStream.close();
                }
                if(pdfStream!= null){
                    pdfStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return pdfFile;
    }

我们应该使用单例来避免生成pdf并打开多个文件的此过程的多实例吗?

环境:

  • Ubuntu 14.04
  • Tomcat 7.0.52
  • Java 1.7.0_80-b15
  • itext 7.1.8

谢谢

tomcat7
1个回答
0
投票

已解决的问题。使用单例获取转换器属性:

private static ConverterProperties properties; 
private static DefaultFontProvider defaultFontProvider;
...
defaultFontProvider= new DefaultFontProvider(true, true, true);
properties.setFontProvider(defaultFontProvider);
© www.soinside.com 2019 - 2024. All rights reserved.