iText pdfReader не выпускает файл в ColdFusion 2018 - PullRequest
3 голосов
/ 29 мая 2019

Я обновляюсь до ColdFusion 2018. Подпрограммы iText, которые я использую для преобразования и вращения PDF-файлов, pdfReader устанавливает блокировки для файла, который не освобождается при завершении страницы.

Я попытался добавить close() метод для моего кода.(Это не было необходимо для pdfReader в Выпуске 11.)

<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 ]

2 голосов
/ 30 мая 2019

Используя приведенные выше предложения, я думаю, что будет работать следующее решение.

<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> 
0 голосов
/ 30 мая 2019

Вместо того, чтобы использовать более старый плагин Java, просто используйте нативный cfpdf.

<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

0 голосов
/ 30 мая 2019

(слишком долго для комментариев)

Рад, что помог!Одно небольшое улучшение, которое я бы предложил, это закрыть поток внутри блока 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> 
...