有没有一种简单的方法可以使用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
我是在正确的轨道还是我错过了一些让这更容易的东西?感谢。
答案 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>