ColdFusion:从多个PDF blob创建PDF

时间:2014-07-28 18:04:01

标签: pdf coldfusion cfpdf

我在我的数据库中存储了多个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变量。之前已经问过类似的问题here,但它找不到我想要的答案。

谢谢!

2 个答案:

答案 0 :(得分: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创建不同的文件。

答案 1 :(得分:0)

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

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

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

检索所有此类blob并将其作为pdf存储在临时目录

通过在cfpdf merge

中指定temp目录,使用cfpdf merge合并所有这些pdf
<cfpdf action="merge" directory="C:\pdfs" destination="C:\result.pdf">