将PDF缩放到单页

时间:2010-09-11 00:23:47

标签: coldfusion

有没有一种简单的方法可以使用CF8将cfdocument或cfpdf创建的pdf缩放到单个页面?我的输出(日历)可能会扩展到第2页,具体取决于事件的数量。我宁愿缩放日历以使其适合一页。我假设我可以使用cfdocument创建pdf。使用cfpdf检查页码并循环,而totalPages> 1以较小的比例创建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

我是在正确的轨道还是我错过了一些让这更容易的东西?感谢。

1 个答案:

答案 0 :(得分: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的创建抽象为函数,这样您就不必在页面上重写两次所有内容。或者您可以使用包含。哎呀,如果有任何复杂的处理过程来渲染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>
相关问题