2010-09-11 98 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