v1.0.150: revert parser.cfm to working v1.0.144 (PDF→VM, DOCX→Lucee POI)
This commit is contained in:
+40
-14
@@ -10,21 +10,47 @@
|
|||||||
<cfargument name="fileBytes" type="binary">
|
<cfargument name="fileBytes" type="binary">
|
||||||
<cfset var out = {elements: [], errors: []}>
|
<cfset var out = {elements: [], errors: []}>
|
||||||
<cftry>
|
<cftry>
|
||||||
<cfhttp url="https://contracts.kube5s.ru/parse-pdf" method="post" timeout="30">
|
<cfset var bais = createObject("java", "java.io.ByteArrayInputStream").init(fileBytes)>
|
||||||
<cfhttpparam type="body" value="#binaryEncode(fileBytes, 'base64')#">
|
<cfset var bis = createObject("java", "java.io.BufferedInputStream").init(bais)>
|
||||||
</cfhttp>
|
<cfset var pdfDoc = 0>
|
||||||
<cfif cfhttp.statusCode EQ 200>
|
<cftry>
|
||||||
<cfset var data = deserializeJSON(cfhttp.fileContent)>
|
<cfset pdfDoc = createObject("java", "org.apache.pdfbox.Loader").loadPDF(bis)>
|
||||||
<cfif data.ok>
|
|
||||||
<cfset out.elements = data.elements>
|
|
||||||
<cfelse>
|
|
||||||
<cfset arrayAppend(out.errors, "VM parse error: " & (structKeyExists(data, 'error') ? data.error : 'unknown'))>
|
|
||||||
</cfif>
|
|
||||||
<cfelse>
|
|
||||||
<cfset arrayAppend(out.errors, "VM HTTP error: " & cfhttp.statusCode)>
|
|
||||||
</cfif>
|
|
||||||
<cfcatch>
|
<cfcatch>
|
||||||
<cfset arrayAppend(out.errors, "PDF parse failed: " & cfcatch.message)>
|
<cftry>
|
||||||
|
<cfset pdfDoc = createObject("java", "org.apache.pdfbox.pdmodel.PDDocument").load(bais)>
|
||||||
|
<cfcatch>
|
||||||
|
<cfset arrayAppend(out.errors, "PDFBox: cannot open — " & cfcatch.message)>
|
||||||
|
</cfcatch>
|
||||||
|
</cftry>
|
||||||
|
</cfcatch>
|
||||||
|
</cftry>
|
||||||
|
<cfif NOT isNumeric(pdfDoc)>
|
||||||
|
<cfset var stripper = createObject("java", "org.apache.pdfbox.text.PDFTextStripper")>
|
||||||
|
<cfset var pageCount = pdfDoc.getNumberOfPages()>
|
||||||
|
<cfloop from="1" to="#pageCount#" index="pn">
|
||||||
|
<cfset stripper.setStartPage(pn)>
|
||||||
|
<cfset stripper.setEndPage(pn)>
|
||||||
|
<cfset var pageText = stripper.getText(pdfDoc)>
|
||||||
|
<cfif len(trim(pageText))>
|
||||||
|
<cfloop list="#pageText#" index="line" delimiters="#chr(10)#">
|
||||||
|
<cfset line = trim(line)>
|
||||||
|
<cfif len(line)>
|
||||||
|
<cfset var el = structNew()>
|
||||||
|
<cfset el.type = "paragraph">
|
||||||
|
<cfset el.style = "">
|
||||||
|
<cfset el.text = line>
|
||||||
|
<cfset el.page = pn>
|
||||||
|
<cfset arrayAppend(out.elements, el)>
|
||||||
|
</cfif>
|
||||||
|
</cfloop>
|
||||||
|
</cfif>
|
||||||
|
</cfloop>
|
||||||
|
<cfset pdfDoc.close()>
|
||||||
|
</cfif>
|
||||||
|
<cfset bis.close()>
|
||||||
|
<cfset bais.close()>
|
||||||
|
<cfcatch>
|
||||||
|
<cfset arrayAppend(out.errors, "PDFBox: " & cfcatch.message)>
|
||||||
</cfcatch>
|
</cfcatch>
|
||||||
</cftry>
|
</cftry>
|
||||||
<cfreturn out>
|
<cfreturn out>
|
||||||
|
|||||||
Reference in New Issue
Block a user