2012-05-21 4 views
5

Kann cfpdf eine binäre Datenbankspalte direkt lesen?Coldfusion CFPDF liest eine binäre Datenbankspalte

Ich habe es derzeit, wo ich eine Abfrage ausführen, um die Spalte zu erhalten.

Verwenden cffile die Datei in ein Verzeichnis

dann mit cfpdf lesen, zu schreiben, so kann ich ExtractText.

Ist es möglich, dies ohne das cffile schreiben und lesen Sie die Binärdatei direkt?

Wenn ja, könnte ich ein Beispiel bekommen.

+0

gute Frage ... Ich würde das auch gerne wissen. –

Antwort

3

Welche Version verwenden Sie? Die folgenden für mich mit CF9/MS SQL (varbinary Spalte) arbeitete

<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#"> 

Edit: Um zu klären, cfpdf beschwert sich, wenn Sie queryName.columnName als "Quelle" zu verwenden. Ich vermute, cfpdf sieht es als eine Abfrage Spalte Objekt statt den Wert automatisch in der ersten Zeile der Abfrage, dh queryName.columnName[ 1 ] greifen. Die Problemumgehung besteht darin, einen Verweis darauf zu erstellen und stattdessen die andere Variable zu verwenden.

+0

Danke Leigh, das hat funktioniert und ist genau das, was ich gesucht habe. Obwohl jeder, der diesen Thread liest, würde ich ermutigen, die RAM-Datei Speicher Diskussion unter –

+0

zu lesen. Für größere PDFs/Blobs, könnte es sich lohnen, mit beiden Methoden zu experimentieren, um zu sehen, ob VFS irgendeine Verbesserung bietet. – Leigh

+0

Irgendeine Idee, was könnte für CF 8 getan werden? extractText ist keine gültige Option in dieser Version. – Limey

1

Ich bin nicht 100% sicher, aber Sie sollten in der Lage sein, so etwas zu tun:

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

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

Eine andere Idee wäre, sie mit cffile auf die RAM-Disk zu schreiben. Dies würde zu einer besseren Leistung führen und das Schreiben auf die Festplatte überflüssig machen. http://help.adobe.com/de_DE/ColdFusion/9.0/Developing/WSe9cbe5cf462523a0-70e2363b121825b20e7-8000.html –

+0

Liebe die RAM-Disk-Idee. –

+0

Ich war in der Lage, den In-Speicher zu verwenden, um die Beispiele in dem von Josh bereitgestellten Link zu verwenden. FYI, die Dokumentation sagt cfpdf wird nicht unterstützt. Obwohl, genau das habe ich benutzt und es scheint zu funktionieren. *** Vorsicht. Wenn du deine Dateien nicht aus dem RAM entfernst, könntest du schließlich all deinen zugewiesenen Speicherplatz auffressen und einen Absturz erzwingen –

0

fand ich eine einfache Möglichkeit, dies zu tun:

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

Diese bereits im Code war ich geerbt, aber es funktioniert nie. Ich fand das Problem war die Datenquelle und nicht der Code; Es wurde keine BLOBs akzeptiert.

Verwandte Themen