2010-09-11 14 views
5

cfdocument veya cfpdf tarafından oluşturulan pdf'yi CF8 kullanarak tek bir sayfaya ölçeklendirmenin basit bir yolu var mı? Çıktım (takvim), olay sayısına bağlı olarak muhtemelen sayfa 2'ye uzanabilir. Takvimi tek bir sayfaya sığacak şekilde ölçeklendirmeyi tercih ederim. Ben cfdocument ile pdf oluşturabileceğini varsayalım. Sayfa numaralarını kontrol etmek için cfpdf kullanın ve totalPages> 1, daha az ölçekli PDF oluştururken döngü yapın.scale PDF'yi tek sayfaya getir

psudo kodu: doğru yolda

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 

Am I veya bu kolaylaştırmak için bir şey eksik? Teşekkürler.

cevap

5

Teoriniz bana göre görünüyor - deneyin ve öğrenmelisiniz. 'Don böylece, aynı zamanda, soyut bir fonksiyonun içine PDF oluşturulmasını isteyebilirsiniz Kurulumunuza bağlı

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

: bu oldukça sıkıcı bir cevap beri, aynı zamanda gerçek koduna pseudocode dönüştürülen ettik İçeriğin tamamını sayfada iki kez tekrar yazmanız gerekir. Ya da bir içerme kullanabilirsiniz. Heck, HTML için HTML oluşturacak herhangi bir karmaşık işlem varsa (ki burada bir takvim yaptığınızdan beri var olduğunu varsayalım), içeriği önceden oluşturmak ve yeniden kullanmak isteyebilirsiniz. o gibi:

<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

Teşekkürler Adam. Bunu bir cfc yapmayı ve onu cflib.org'a eklemeyi düşünüyordum. Belki başka biri de yararlı bulacaktır. Eğer yaparsam çabalarınızı kredilendireceğime emin olacağım. Tekrar teşekkürler! – Travis

+0

Adam, işe yarıyor. % 60'a indirdi ve sadece test edilmemiş ama doğru kodda birkaç değişiklik yapmam gerekiyordu. 1. "" cfdocument etiketinin içinde. 2. source = "pdfObj" yerine source = "# pdfObj #" 3. Bellekten başka bir cfdocument'i pdf'ye tarayıcım yerine belleğe yerleştirmek için kullanmam gerekiyordu. UDF edeceğim ve daha sonra paylaşacağım. Haftasonu zamanı. – Travis

+1

Travis, Yorumlarınızdaki değişiklikleri yansıtmak için ikinci kod örneğimi güncelledim. CFContent'i, sonuçta elde edilen PDF'yi CFDocument yerine kullanıcıya sunmak için kullanırdım. –