v1.0.6: parser.cfm — PDFBox Loader + BufferedInputStream

This commit is contained in:
2026-06-18 16:37:25 +04:00
parent 186c889513
commit 3e191f83ed
2 changed files with 35 additions and 19 deletions
+1 -1
View File
@@ -1 +1 @@
<cfsetting showdebugoutput=no enablecfoutputonly=yes><cfoutput>OK v1.0.5</cfoutput> <cfsetting showdebugoutput=no enablecfoutputonly=yes><cfoutput>OK v1.0.6</cfoutput>
+34 -18
View File
@@ -29,26 +29,42 @@
<cfset fileBytes = binaryDecode(doc.original_bytes, "base64")> <cfset fileBytes = binaryDecode(doc.original_bytes, "base64")>
<!--- Байты → InputStream ---> <!--- Байты → InputStream --->
<cfset bais = createObject("java", "java.io.ByteArrayInputStream").init(fileBytes)> <cfset bais = createObject("java", "java.io.ByteArrayInputStream").init(fileBytes)>
<!--- Открываем PDF ---> <cfset bis = createObject("java", "java.io.BufferedInputStream").init(bais)>
<cfset pdfDoc = createObject("java", "org.apache.pdfbox.pdmodel.PDDocument").load(bais)>
<cfset stripper = createObject("java", "org.apache.pdfbox.text.PDFTextStripper")>
<cfset pageCount = pdfDoc.getNumberOfPages()> <!--- Пробуем PDFBox 3.x Loader, иначе 2.x PDDocument.load --->
<cfloop from="1" to="#pageCount#" index="pn"> <cfset pdfDoc = 0>
<cfset stripper.setStartPage(pn)> <cftry>
<cfset stripper.setEndPage(pn)> <cfset pdfDoc = createObject("java", "org.apache.pdfbox.Loader").loadPDF(bis)>
<cfset pageText = stripper.getText(pdfDoc)> <cfcatch>
<cfif len(trim(pageText))> <cftry>
<cfloop list="#pageText#" index="line" delimiters="#chr(10)#"> <cfset pdfDoc = createObject("java", "org.apache.pdfbox.pdmodel.PDDocument").load(bis)>
<cfset line = trim(line)> <cfcatch>
<cfif len(line)> <cfset arrayAppend(errors, "PDFBox: cannot open PDF — " & cfcatch.message)>
<cfset arrayAppend(elements, {type: "paragraph", style: "", text: line, page: pn})> </cfcatch>
</cfif> </cftry>
</cfloop> </cfcatch>
</cfif> </cftry>
</cfloop> <cfif NOT isNumeric(pdfDoc)>
<cfset stripper = createObject("java", "org.apache.pdfbox.text.PDFTextStripper")>
<cfset pdfDoc.close()> <cfset pageCount = pdfDoc.getNumberOfPages()>
<cfloop from="1" to="#pageCount#" index="pn">
<cfset stripper.setStartPage(pn)>
<cfset stripper.setEndPage(pn)>
<cfset pageText = stripper.getText(pdfDoc)>
<cfif len(trim(pageText))>
<cfloop list="#pageText#" index="line" delimiters="#chr(10)#">
<cfset line = trim(line)>
<cfif len(line)>
<cfset arrayAppend(elements, {type: "paragraph", style: "", text: line, page: pn})>
</cfif>
</cfloop>
</cfif>
</cfloop>
<cfset pdfDoc.close()>
</cfif>
<cfset bis.close()>
<cfset bais.close()> <cfset bais.close()>
<cfcatch> <cfcatch>