2010-09-11 65 views
5

是否有一种简单的方法可以使用CF8将cfdocument或cfpdf创建的pdf缩放到单个页面?根据事件的数量,我的输出(日历)可能会扩展到第2页。我宁愿将日历缩放到一个页面中。我假设我可以用cfdocument创建pdf。使用cfpdf检查页码,并在totalPages> 1时创建较小比例的PDF。将PDF缩放到单个页面

psudo代码:

pdfScale = 100 
cfdocument scale = "#pdfScale#" 
cfpdf action = "getinfo" name = "mypdf" 
cfloop while mypdf.totalPages > 1 
pdfScale = pdfScale -5 
cfdocument scale = "#pdfScale#" 
cfpdf action = "getinfo" name = "mypdf" 
/cfloop 

我在正确的轨道上或者我失去了一些东西,使这个更容易?谢谢。

回答

5

你的理论对我来说听起来很合理 - 你应该尝试一下并找出答案。由于这是一个相当乏味的回答,我也转换您的伪真实代码:

<cfset pdfScale = 100 /> 
<cfset pdfObj = "" /> 
<cfdocument format="pdf" name="pdfObj" scale="#pdfScale#">document contents</cfdocument> 
<cfpdf action="getInfo" source="#pdfObj#" name="pdfInfo" /> 
<cfloop condition = "pdfInfo.TotalPages gt 1"> 
    <cfset pdfScale -= 5 /> 
    <cfdocument format="pdf" name="pdfObj" scale="#pdfScale#">document contents</cfdocument> 
    <cfpdf action="getInfo" source="#pdfObj#" name="pdfInfo" /> 
</cfloop> 

根据您的设置,您可能还需要抽象的PDF到一个函数的创建,让你不”不得不在页面上重写所有内容两次。或者你可以使用include。嘿,如果有任何形式的复杂处理正在为PDF生成HTML(我假设这是因为你正在制作日历),那么你甚至可能想要预先渲染内容并重新使用它,如下所示:

<cfsavecontent variable="docContents">document contents go here</cfsavecontent> 
<cfset pdfScale = 100 /> 
<cfset pdfObj = "" /> 
<cfdocument format="pdf" name="pdfObj" scale="#pdfScale#"><cfoutput>#docContents#</cfoutput></cfdocument> 
<cfpdf action="getInfo" source="#pdfObj#" name="pdfInfo" /> 
<cfloop condition = "pdfInfo.TotalPages gt 1"> 
    <cfset pdfScale -= 5 /> 
    <cfdocument format="pdf" name="pdfObj" scale="#pdfScale#"><cfoutput>#docContents#</cfoutput></cfdocument> 
    <cfpdf action="getInfo" source="pdfObj" name="pdfInfo" /> 
</cfloop> 
+0

感谢亚当。我正在考虑将它作为一个cfc并将其添加到cflib.org。也许别人会发现它也有帮助。如果我这样做,我一定会相信你的努力。再次感谢! – Travis 2010-09-11 14:39:07

+0

亚当,它的工作原理。把它降到60%,我只需要对未经测试但准确的代码进行一些更改。 1.''在cfdocument标签内。 2. source =“pdfObj”,而不是source =“#pdfObj#” 3.我需要在循环之外做另一个cfdocument,以便将pdf提供给浏览器,而不是放在内存中。我会用它来分享。周末的时间。 – Travis 2010-09-11 17:08:43

+1

特拉维斯,我更新了我的第二个代码示例以反映您评论中的更改。不过,我会使用CFContent将结果PDF提供给用户,而不是CFDocument。 – 2010-09-12 14:11:46