масштабировать PDF на одной странице - PullRequest
5 голосов
/ 11 сентября 2010

Есть ли простой способ масштабирования pdf, созданного cfdocument или cfpdf, на одну страницу с использованием CF8?Мой вывод (календарь) может быть расширен до страницы 2 в зависимости от количества событий.Я бы предпочел масштабировать календарь, чтобы разместить его на одной странице.Я предполагаю, что могу создать PDF с cfdocument.Используйте cfpdf для проверки номеров страниц и зацикливания, а totalPages> 1 создайте PDF с меньшим масштабом.

псевдокод:

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 Ответ

5 голосов
/ 11 сентября 2010

Ваша теория мне кажется правильной - вы должны попробовать и выяснить.Поскольку это довольно скучный ответ, я также преобразовал ваш псевдокод в реальный код:

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