1

我有多个 pdf 作为 blob 存储在我的数据库中,我需要将它们合并以创建需要流式传输给用户的单个 pdf。

我知道,如果我从 blob 渲染单个 pdf,这样做相当容易,但我不知道如何合并多个 blob。

<cfheader name="Content-Disposition" value="inline; filename=#document.name#.#document.ext#">
<cfcontent type="application/pdf" variable="#document.content#">

我看到 CFPDF 有助于实现此功能,但似乎无法将我的 blob 放入 cfpdf 变量中。以前在这里问过一个类似的问题,但它没有我寻求的答案。

谢谢!

4

2 回答 2

1

尝试将 blob 数据转换为文件(在内存中使用ram://,如果可能的话以保存写入磁盘),然后将其用作cfpdf合并源。cfpdf action="merge"当您在标签内循环查询时,您可以为每个 blob 执行此操作:

<cfquery name="q" datasource="test">
  SELECT content FROM pdfs
</cfquery>

<cfpdf action="merge" name="mergedPdf">
  <cfloop query="q">
    <cfset tempBinary=q.content><!---intermediate var seems to be necessary in some environments --->
    <cffile action="write" output="#tempBinary#" file="ram://temp.pdf">
    <cfpdfparam source="ram://temp.pdf">
  </cfloop> 
</cfpdf>
<cfcontent type="application/pdf" variable="#ToBinary( mergedPdf )#" reset="true">

请注意,您可以使用单个临时文件 - 无需为查询中的每个 blob 创建不同的临时文件。

于 2014-08-01T08:52:47.423 回答
0

我认为您可以执行以下操作

检索存储在 db 中的每个 pdf blob 并使用 cfpdf 创建 pdf 并将它们存储在某个临时目录中

  <cfpdf action="write" destination="c:\pdfs\1.pdf" source="#mypdfblob1" >

检索所有此类 blob 并将它们作为 pdf 存储在 temp 目录中

通过在 cfpdf merge 中指定临时目录,使用 cfpdf merge 合并所有这些 pdf

<cfpdf action="merge" directory="C:\pdfs" destination="C:\result.pdf">
于 2014-07-28T18:17:24.183 回答