Ваша теория мне кажется правильной - вы должны попробовать и выяснить.Поскольку это довольно скучный ответ, я также преобразовал ваш псевдокод в реальный код:
<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-файла в функцию, чтобы вы моглине нужно переписывать весь контент дважды на странице.Или вы можете использовать включение.Черт возьми, если происходит какая-либо сложная обработка для рендеринга HTML-кода для PDF (который, как я полагаю, существует, поскольку вы создаете календарь), то вы можете даже предварительно выполнить рендеринг содержимого и повторно использовать его.это, вот так:
<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>