2012-05-21 38 views
5

Có thể cfpdf đọc một cột cơ sở dữ liệu nhị phân trực tiếp không?Coldfusion CFPDF đọc cột cơ sở dữ liệu nhị phân

Tôi hiện có nó khi tôi chạy truy vấn để lấy cột.

Sử dụng cffile để ghi tệp vào thư mục

Sau đó đọc bằng cfpdf để tôi có thể trích xuất văn bản.

Có thể thực hiện điều này mà không cần viết và đọc trực tiếp tệp nhị phân không?

Nếu có, tôi có thể lấy ví dụ không.

+0

câu hỏi hay ... Tôi cũng muốn biết điều đó. –

Trả lời

3

Phiên bản nào bạn đang sử dụng? Sau đây là làm việc cho tôi với CF9/MS SQL (cột 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#"> 

Edit: Để làm rõ, cfpdf phàn nàn khi bạn sử dụng queryName.columnName là "nguồn". Tôi nghi ngờ cfpdf coi nó là cột truy vấn đối tượng thay vì tự động lấy giá trị trong hàng đầu tiên của truy vấn tức là queryName.columnName[ 1 ]. Công việc xung quanh là tạo tham chiếu đến nó và sử dụng biến khác thay thế.

+0

Cảm ơn Leigh, điều này đã làm việc và chính xác là những gì tôi đang tìm kiếm. Mặc dù bất cứ ai đọc chủ đề này, tôi sẽ khuyến khích đọc thảo luận lưu trữ tập tin RAM bên dưới –

+0

Đối với các tệp PDF/blobs lớn hơn, bạn có thể thử nghiệm cả hai phương pháp để xem VFS có cải tiến hay không. – Leigh

+0

Bất kỳ ý tưởng về những gì có thể được thực hiện cho CF 8? extractText không phải là một tùy chọn hợp lệ trong phiên bản đó. – Limey

1

Tôi không chắc chắn 100%, nhưng bạn sẽ có thể làm điều gì đó như thế này:

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

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

Một ý tưởng khác là viết nó lên đĩa RAM bằng cffile. Điều này sẽ cung cấp hiệu suất tốt hơn và loại bỏ ghi vào đĩa. http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSe9cbe5cf462523a0-70e2363b121825b20e7-8000.html –

+0

Yêu thích ý tưởng đĩa Ram. –

+0

Tôi đã có thể nhận được bộ nhớ Trong để làm việc bằng cách sử dụng các ví dụ trong liên kết được cung cấp bởi Josh. FYI, tài liệu nói cfpdf không được hỗ trợ. Mặc dù, đó là chính xác những gì tôi sử dụng và nó xuất hiện để được làm việc. *** Điểm thận trọng. Nếu bạn không loại bỏ các tập tin của bạn từ RAM bạn cuối cùng có thể ăn lên tất cả các không gian được phân bổ của bạn và buộc một vụ tai nạn –

0

Tôi tìm thấy một cách đơn giản để làm điều này:

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

này đã có trong đoạn code tôi thừa hưởng, nhưng nó đã không bao giờ làm việc. Tôi thấy vấn đề là nguồn dữ liệu chứ không phải mã; nó không được thiết lập để chấp nhận BLOB.

Các vấn đề liên quan