【问题标题】:Coldfusion CFPDF reading a binary database columnColdfusion CFPDF 读取二进制数据库列
【发布时间】:2012-05-28 06:23:23
【问题描述】:

cfpdf 可以直接读取二进制数据库列吗?

我目前有它,我在其中运行查询以获取该列。

使用cffile将文件写入目录

然后用 cfpdf 阅读,这样我就可以提取文本了。

是否可以在没有cffile直接写入和读取二进制文件的情况下做到这一点?

如果是这样,我可以举个例子吗?

【问题讨论】:

  • 好问题...我也想知道。

标签: pdf coldfusion binary cfpdf


【解决方案1】:

我不是 100% 确定,但你应该可以这样做:

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

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

【讨论】:

  • 另一个想法是使用 cffile 将其写入 RAM 磁盘。这将提供更好的性能并消除对磁盘的写入。 help.adobe.com/en_US/ColdFusion/9.0/Developing/…
  • 我能够使用 Josh 提供的链接中的示例让 In memory 工作。仅供参考,文档说不支持 cfpdf。虽然,这正是我使用的,它似乎正在工作。 *** 注意点。如果您不从 RAM 中删除文件,您最终可能会耗尽所有分配的空间并导致崩溃
【解决方案2】:

你用的是什么版本?以下内容适用于我的 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 将其视为查询列object,而不是自动获取查询第一行中的值,即queryName.columnName[ 1 ]。解决方法是创建对它的引用,并改用其他变量。

【讨论】:

  • 感谢 Leigh,这确实有效,正是我想要的。尽管任何阅读此线程的人我都会鼓励阅读下面的 RAM 文件存储讨论
  • 对于较大的 pdf/blob,可能值得尝试两种方法,看看 VFS 是否提供任何改进。
  • 关于 CF 8 可以做什么的任何想法? extractText 在该版本中不是有效选项。
  • 您可以使用processddx.. 提取文本,但它需要物理文件路径。这是我所知道的 CF8 的唯一简单选项。
  • @Leigh 我找到了一个 CF8 友好的版本并将其发布为答案。
【解决方案3】:

我找到了一个简单的方法:

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

这已经在我继承的代码中,但它从来没有工作过。我发现问题是数据源而不是代码;它未设置为接受 BLOB。

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 2014-09-15
    • 2010-12-08
    • 1970-01-01
    • 2018-11-28
    • 2013-10-17
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多