2012-05-21 24 views
5

cfpdf可以直接讀取二進制數據庫列嗎?Coldfusion CFPDF讀取二進制數據庫列

我現在有它在哪裏運行查詢來獲得列。

使用CFFILE將文件寫入到一個目錄

然後用cfpdf讀,所以我可以extracttext。

有沒有可能做到這一點,而不是直接讀寫二進制文件?

如果是這樣,我可以得到一個例子。

+0

好問題...我也想知道。 –

回答

3

什麼版本您使用的?以下爲我工作與CF9/MS SQL(varbinary列)

<cfquery name="getPdf" ....> 
    SELECT Data 
    FROM someTable 
    WHERE ID = 123 
</cfquery> 

<cfset pdfBinary = getPdf.data[1]> 
<cfpdf action="extractText" source="pdfBinary" name="result"> 
<cfdump var="#result#"> 

編輯:要澄清一下,當您使用queryName.columnName 「源」 cfpdf抱怨。我懷疑cfpdf將其視爲查詢列對象,而不是自動獲取查詢第一行中的值,即queryName.columnName[ 1 ]。解決方法是創建對其的引用,並使用其他變量。

+0

感謝Leigh,這確實有效,正是我所期待的。儘管任何人閱讀這篇文章,我都會鼓勵您閱讀下面的RAM文件存儲討論 –

+0

對於較大的pdf/blob,可能值得嘗試兩種方法來確定VFS是否提供了改進。 – Leigh

+0

關於CF8可以做什麼的想法? extractText在該版本中不是有效的選項。 – Limey

1

我不是100%肯定,但你應該能夠做這樣的事情:

<cfset myPDF = binaryEncode(binaryData,'base64')> 

<cfpdf action="read" source="myPDF" name="PDFObj"> 
+2

另一個想法是使用cffile將它寫入RAM磁盤。這將提供更好的性能並消除寫入磁盤。 http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSe9cbe5cf462523a0-70e2363b121825b20e7-8000.html –

+0

喜歡Ram磁盤的想法。 –

+0

我能夠在內存中使用Josh提供的鏈接中的示例工作。僅供參考,文檔說cfpdf不受支持。雖然,這正是我所用的,它似乎工作。 ***謹慎點。如果你沒有從RAM中刪除你的文件,你最終可能會吃掉你分配的所有空間並強制崩潰 –

0

我發現了一個簡單的方法來做到這一點:

<cfheader name="Content-Disposition" value="inline; filename=test.pdf"> 
<cfcontent type="application/pdf" variable="#qGetFile.uploaded_file#"> 

這已經在我繼承了代碼,但它從來沒有工作。我發現問題是數據源而不是代碼;它沒有被設置爲接受BLOB。