2010-01-21 16 views
6

ColdFusion'da dinamik bir PDF oluşturuyorum ve "pagebreak" ile ilgili bir sorun yaşıyorum. Söz konusu sayfanın 1 kaydı veya 60 taneye kadar kaydı olabilir. Her kayıt bir tablonun 2 satırında görüntülenir. İade edilen kayıtlardan bazıları sayfalar arasında bölünmüştür (ilk satır birinci sayfanın sonunda, ikinci satır bir sonraki satırın en üst sırasıdır).COLDFUSION: cfdocument ve bir sayfa zorlama zorlanıyor

görüntülenen HTML örnek bir rekor: sayfa başına

<tr> 
    <td>Title</td><td>Price</td> 
    <td colspan="2">Description</td> 
</tr> 
istemci isteği Başına

, ben görüntülemek çalışıyorum = < 9 kayıtları.

<cfdocument format="PDF"> 
<cfoutput query = "sqllookup"> 
<cfset loopcount = loopcount + 1> 
<cfif loopcount EQ '9'> 
<cfdocumentitem type="pagebreak" /> 
<cfelse> 
<tr> 
    <td>#Title#</td><td>#Price#</td> 
    <td colspan="2">#Description#</td> 
</tr> 
</cfif> 
</cfoutput> 
</cfdocument> 

Bu (sadece 9 kayıt gizler), çalışmaz: Burada

denedim bir şeyin dumbed örnektir. Birkaç farklı fikir denedim ve şu anda güldüm. Bir şey mi arıyorum?

Şimdiden teşekkürler.

ColdFusion MX 7. (ben de metin kesme soruna yönelik sıcak düzeltme. http://kb2.adobe.com/cps/402/kb402093.html ran)

+0

bir cevap değil, ama bir tahminim bilir. Tablo etiketini 9 kayıttan sonra kapatmaya ve yeni sayfa için yeni tablo oluşturmaya çalıştın mı? Tek sorun, uzun metin için daha az sıraya ihtiyacınız olacaktır, bu bazı Len() - hile gerektirebilir. – Sergii

cevap

6

:

<cfoutput query = "sqllookup"> 
    <!--- this is the 9th row, because 9 mod 9 is 0 ---> 
    <cfif not sqllookup.currentrow mod 9> 
     <cfdocumentitem type="pagebreak" /> 
    </cfif> 
    <tr> 
     <td>#Title#</td><td>#Price#</td> 
     <td colspan="2">#Description#</td> 
    </tr> 
</cfoutput> 
:

if 9th record 
    break page 
else 
    show record 
end if 

Ne istiyorsun daha gibidir

0

deneyin ekleyerek size 2 sayfa arasında bölünmüş istemeyen herhangi bir öğeye bir style="page-break-inside: avoid;" . Örneğin

, bunu gösterme ve bunu göstermek arasında seçim yapacak çünkü 9 rekoru saklıyorsun

<tr style="page-break-inside: avoid;"> 
    <td>#Title#</td><td>#Price#</td> 
    <td colspan="2">#Description#</td> 
</tr> 
+0

"Sayfa içi-dışı" CSS özelliği yalnızca Opera için çalışır http://www.w3schools.com/cssref/pr_print_pagebi.asp –

+1

@JonathanWilson Soru, bir tarayıcıya değil, CF'yi kullanan bir PDF'ye yöneliktir. Bu çalışmayı (2+ yıl önce) CF kullanarak doğru olarak gördüm. – Eddie

+0

Oh. Bunu bir şekilde yanlış anladım. –

1

Bu sorunla birkaç ay boyunca açılıp kapandıktan sonra, devam etmenin sarıldığını keşfettim div ile bir td'un (ör. <tr><td><div>Cell Contents</div></td></tr>) satır içinde sayfa sonu oluşmasını engeller. Bu kurulumla, normalde sayfalar arasındaki satırı bölen bir sayfa sonu, satırından önce değerini düşürecek, ilk sayfanın sonunda fazladan bir boşluk yaratacak ve satırı bir sonraki sayfanın başına yerleştirecektir.

Birden çok hücreye sahip satırlar hakkında not: Tek bir td yuvalanmış div, tüm satır için yukarıdaki davranışa neden olmak için yeterlidir. Benim için

<tr> 
    <td>Blah blah blah blah blah</td> 
    <td>Gnar gnar gnar gnar gnar</td> 
    <td><div>Soda POP soda POP soda POP</div></td> <!--- the fix ---> 
    <td>Stellar!</td> 
</tr> 
+0

için benim için çalışmaz CF10 ile yaptığım testlerde (CFdocument motorunun CF8'den beri değişmediğine inanıyorum), renderer üç veya dört satır uzunsa, satırları bir arada tutuyor ve onları bir noktada bölüyor. Bu DIV çözümü biraz daha uzun satırlar için işe yaradı - belki algoritma blok düzeyindeki öğeleri ağırlıklandırır ve bunları bir arada tutmaya çalışır, bu nedenle tabloları tablonuzun içine yerleştirmek sayfa kesintilerini engelleyebilir (ouch!) –

0

, bütün hileleri ve forum ipuçları vb denedikten sonra - (resimler, tablolar, div blok vb dahil) kod büyük bloklar için CF8 çalışmış tek şey ise:

  • <div>...</div>

  • ama (kodda) yeni bir çizgide kendinden sonra bir süper basit <br> olmayan sayfa kırma bölümünü sarmak, ör.

    <div> ... your stuff ... </div> <br>

    çalıştı

, cehennem neden ...