代码之家  ›  专栏  ›  技术社区  ›  genericHCU

将PDF缩放为单页

  •  5
  • genericHCU  · 技术社区  · 14 年前

    有没有一种简单的方法可以使用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 回复  |  直到 14 年前
        1
  •  5
  •   Adam Tuttle    14 年前

    你的理论在我看来是合理的-你应该试试看,找出答案。由于这是一个相当无聊的答案,我还将您的伪代码转换为真正的代码:

    <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>