iText pdfReader在ColdFusion 2018中不发布文件

时间:2019-05-29 19:53:46

标签: java coldfusion itext coldfusion-2018

我正在升级到ColdFusion2018。我用于转换和旋转PDF的iText例程,pdfReader在文件上放置了锁,页面完成后这些锁不会释放。

我尝试将close()方法添加到代码中。 (版本11中的pdfReader不需要它。)

<cfscript>

reader = createObject("java", "com.lowagie.text.pdf.PdfReader").init( "test.pdf" );

reader.close();

inStream = createObject("java", "java.io.FileReader").init("test2.pdf");

inStream.close();

</cfscript>

运行提供的脚本时,我希望能够重命名或删除这两个文件,但是只能使用inStream文件(test2.pdf)。阅读器文件(test.pdf)已被系统锁定。

3 个答案:

答案 0 :(得分:2)

使用以上建议,我认为以下解决方案将起作用。

<cfscript>

    fkeys = createObject("java", "java.io.FileInputStream");
    lKeyStoreFileStream = createObject("java", "java.io.BufferedInputStream").init(fkeys.init("test.pdf"));    

    reader = createObject("java", "com.lowagie.text.pdf.PdfReader").init( lKeyStoreFileStream );

    lKeyStoreFileStream.close();
    fkeys.close();

    reader.close();

</cfscript> 

答案 1 :(得分:0)

(评论太久了)

很高兴!我建议的一个小改进是在finally块内关闭流。这样可以确保文件始终关闭-即使发生意外错误。

<cfscript>
   path = ExpandPath("./test2.pdf" );
   fis = createObject("java", "java.io.FileInputStream").init( path );
   try {
      stream = createObject("java", "java.io.BufferedInputStream").init( fis );    
      reader = createObject("java", "com.lowagie.text.pdf.PdfReader").init( stream );
      reader.close();
   }
   finally {
      fis.close();
   }
</cfscript> 

答案 2 :(得分:0)

使用本地cfpdf而不是使用旧版Java插件。

<cfpdf action="transform" source="myPDF.pdf" rotation="90" name="outPDF">

此标签还有很多其他功能。 https://cfdocs.org/cfpdf

https://cffiddle.org/app/file?filepath=eca41ba2-22f2-41f2-a205-0c2d3aafe91c/ca3873c8-4d4b-4cfc-8e64-6c4ceb825717/9861993d-7db3-43ee-882f-681a1aa498d4.cfm