2012-05-21 20 views
5

¿Puede cfpdf leer directamente una columna de base de datos binaria?Coldfusion CFPDF leyendo una columna de base de datos binaria

Actualmente lo tengo donde ejecuto una consulta para obtener la columna.

Uso cffile para escribir el archivo en un directorio

Entonces leído con CFPDF para que pueda extracttext.

¿Es posible hacer esto sin el cffile write y leer el archivo binario directamente?

Si es así, ¿podría darme un ejemplo?

+0

buena pregunta ... Me gustaría saber eso también. –

Respuesta

3

¿Qué versión está usando? Los siguientes trabajó para mí con CF9/MS SQL (columna 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#"> 

Editar: Para aclarar, CFPDF se queja cuando se utiliza queryName.columnName como la "fuente". Sospecho que cfpdf lo ve como una columna de consulta objeto en lugar de asir automáticamente el valor en la primera fila de la consulta, es decir, queryName.columnName[ 1 ]. La solución alternativa es crear una referencia a ella, y usar la otra variable en su lugar.

+0

Gracias Leigh, esto funcionó y es exactamente lo que estaba buscando. Aunque cualquiera que lea este hilo me gustaría leer la discusión de almacenamiento del archivo RAM debajo de –

+0

. Para pdfs/blobs más grandes, podría valer la pena experimentar con ambos métodos para ver si VFS ofrece alguna mejora. – Leigh

+0

¿Alguna idea de lo que podría hacerse para CF 8? extractText no es una opción válida en esa versión. – Limey

1

No estoy 100% seguro, pero usted debería ser capaz de hacer algo como esto:

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

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

Otra idea sería escribirlo en el disco RAM usando cffile. Esto proporcionaría un mejor rendimiento y eliminaría la escritura en el disco. http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSe9cbe5cf462523a0-70e2363b121825b20e7-8000.html –

+0

Me encanta la idea del disco RAM. –

+0

Pude hacer funcionar la memoria In utilizando los ejemplos en el enlace provisto por Josh. FYI, la documentación dice que cfpdf no es compatible. Aunque, eso es exactamente lo que usé y parece estar funcionando. *** Punto de precaución. Si no está eliminando sus archivos de la RAM, eventualmente podría consumir todo el espacio asignado y forzar una caída. –

0

he encontrado una manera simple de hacer esto:

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

Esto ya estaba en el código heredé, pero nunca estaba funcionando. Encontré que el problema era el origen de datos y no el código; no estaba configurado para aceptar BLOB.

Cuestiones relacionadas