v1.0.6: parser.cfm — PDFBox Loader + BufferedInputStream
This commit is contained in:
+34
-18
@@ -29,26 +29,42 @@
|
||||
<cfset fileBytes = binaryDecode(doc.original_bytes, "base64")>
|
||||
<!--- Байты → InputStream --->
|
||||
<cfset bais = createObject("java", "java.io.ByteArrayInputStream").init(fileBytes)>
|
||||
<!--- Открываем PDF --->
|
||||
<cfset pdfDoc = createObject("java", "org.apache.pdfbox.pdmodel.PDDocument").load(bais)>
|
||||
<cfset stripper = createObject("java", "org.apache.pdfbox.text.PDFTextStripper")>
|
||||
<cfset bis = createObject("java", "java.io.BufferedInputStream").init(bais)>
|
||||
|
||||
<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>
|
||||
<!--- Пробуем PDFBox 3.x Loader, иначе 2.x PDDocument.load --->
|
||||
<cfset pdfDoc = 0>
|
||||
<cftry>
|
||||
<cfset pdfDoc = createObject("java", "org.apache.pdfbox.Loader").loadPDF(bis)>
|
||||
<cfcatch>
|
||||
<cftry>
|
||||
<cfset pdfDoc = createObject("java", "org.apache.pdfbox.pdmodel.PDDocument").load(bis)>
|
||||
<cfcatch>
|
||||
<cfset arrayAppend(errors, "PDFBox: cannot open PDF — " & cfcatch.message)>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
<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()>
|
||||
|
||||
<cfcatch>
|
||||
|
||||
Reference in New Issue
Block a user