IText使pfm文件在Ubuntu中打开

时间:2019-11-19 12:10:52

标签: tomcat7

我们有一个运行在Tomcat / Ubuntu上的Web应用程序,并使用iText7.1.8生成pdf文档(发票)。我们注意到我们的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

谢谢

1 个答案:

答案 0 :(得分:0)

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

private static ConverterProperties properties; 
private static DefaultFontProvider defaultFontProvider;
...
defaultFontProvider= new DefaultFontProvider(true, true, true);
properties.setFontProvider(defaultFontProvider);