2010-09-11 18 views
5

Czy istnieje prosty sposób na skalowanie pliku pdf utworzonego przez cfdocument lub cfpdf na jednej stronie przy użyciu CF8? Moje wyniki (kalendarz) mogą rozszerzyć się na stronę 2 w zależności od liczby zdarzeń. Wolę przeskalować kalendarz, aby zmieścił się na jednej stronie. Zakładam, że mogę utworzyć plik pdf z cfdocument. Użyj cfpdf, aby sprawdzić numery stron i zapętlić, a całkowite Strony> 1 utworzyć plik PDF o mniejszej skali.skala PDF do pojedynczej strony

kod 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 

Jestem na dobrej drodze, albo ja czegoś brakuje, aby to ułatwić? Dzięki.

Odpowiedz

5

Twoja teoria wydaje mi się dobra - powinieneś spróbować i się przekonać. Ponieważ to jest raczej nudna odpowiedź, ja również przekształcić swój Pseudokod do rzeczywistego kodu:

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

W zależności od konfiguracji, może również chcesz streszczenie stworzenie pliku PDF do funkcji, tak że don” t trzeba ponownie napisać całą zawartość na stronie. Lub możesz użyć włącznika. Heck, jeśli jest jakikolwiek skomplikowany proces przetwarzania renderowania HTML dla pliku PDF (który, jak zakładam, jest, ponieważ robisz kalendarz), możesz nawet chcieć wstępnie renderować zawartość i ponownie użyć to, tak:

<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

Dzięki Adam. Zastanawiałem się nad stworzeniem go jako cfc i dodaniem go do cflib.org. Może ktoś inny również uzna to za pomocne. Na pewno zaryzykuję twoje wysiłki, jeśli to zrobię. Dzięki jeszcze raz! – Travis

+0

Adam, to działa. obniżyłem ją do 60% i musiałem tylko wprowadzić kilka zmian w tobie niesprawdzonym, ale dokładnym kodzie. 1. '' wewnątrz znacznika cfdocument. 2. source = "pdfObj" zamiast source = "# pdfObj #" 3. Potrzebowałem zrobić kolejny dokument cfdocument poza pętlą, aby wyświetlić plik pdf w przeglądarce, zamiast umieszczać go w pamięci. Będę UDF to i udostępnić później. Czas na weekend. – Travis

+1

Travis, zaktualizowałem swoją drugą próbkę kodu, aby odzwierciedlić zmiany z twoich komentarzy. Chciałbym użyć CFContent do obsługi wynikowego pliku PDF do użytkownika zamiast do CFDocument. –

Powiązane problemy