我在我的数据库中存储了多个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,但它找不到我想要的答案。
谢谢!
答案 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">