将PDF缩放到单页

Tra*_*vis 5 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
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*tle 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>
Run Code Online (Sandbox Code Playgroud)

根据您的设置,您可能还希望将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>
Run Code Online (Sandbox Code Playgroud)