2010-01-21 2 views
6

"pagebreak"문제가있는 ColdFusion에서 동적 PDF를 생성하고 있습니다. 문제의 페이지는 1 개의 레코드 또는 최대 60 개 이상의 레코드를 가질 수 있습니다. 각 레코드는 테이블의 2 행으로 표시됩니다. 반환 된 레코드 중 일부는 페이지간에 분할됩니다 (첫 번째 행은 페이지 1의 끝에 있고 두 번째 행은 다음 행의 맨 위 행입니다).COLDFUSION : cfdocument 및 pagebreak 강제 수행

표시 HTML에서 샘플 기록 : 페이지 당

<tr> 
    <td>Title</td><td>Price</td> 
    <td colspan="2">Description</td> 
</tr> 
클라이언트의 요청에 따라

, 내가 표시하려고 = < (9) 기록.

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

이것은 (만 9 기록을 숨 깁니다), 작동하지 않습니다 여기에

내가 시도 무언가의 아래 무식 샘플입니다. 나는 여러 가지 아이디어를 시도했으며, 현재 난처한 상황에 처해있다. 나는 무엇인가보고있는 것?

미리 감사드립니다.

는 ColdFusion MX 7 (나는 또한 텍스트 차단 문제에 대한 핫픽스. http://kb2.adobe.com/cps/402/kb402093.html를 실행)

+0

대답별로,하지만 추측을 알고있다. 9 개의 레코드 뒤에 테이블 태그를 닫고 새 페이지에 대한 새 테이블을 만들려고 했습니까? 유일한 문제는 긴 텍스트의 경우 행이 적어지기 때문에 Len() - 속임수가 필요할 수 있다는 것입니다. – Sergii

답변

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 

당신이 원하는 것은 더 같다

0

를 추가해보십시오 당신이 2 페이지 사이를 분할하고 싶지 않은 요소에 style="page-break-inside: avoid;" . 예를 들어

, 당신이 그것을 표시하고 그것을 보여주는 사이의 선택 때문에 당신은 9 기록을 숨기고

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

'page-break-inside' CSS 속성은 Opera에서만 작동합니다. http://www.w3schools.com/cssref/pr_print_pagebi.asp –

+1

@JonathanWilson 질문은 브라우저로 렌더링하는 것이 아니라 CF를 사용하여 PDF로 렌더링하는 것입니다. CF를 사용할 때이 작업을 올바르게 (2 년 이상) 목격했습니다. – Eddie

+0

오. 나는 어떻게 든 그것을 오해했다. –

1

몇 달 동안이 문제를 on/off하고 난 후, 나는 cont tddiv (즉, <tr><td><div>Cell Contents</div></td></tr>) 행 내에서 페이지 나누기를 방지합니다. 이 설정을 사용하면 일반적으로 페이지간에 행을 분할하는 페이지 나누기가 전에 행보다 빠지며 첫 번째 페이지 끝에 약간의 공백을 만들고 다음 페이지의 시작 부분에 행을 배치합니다.

여러 셀이있는 행에 대한 참고 사항 : 전체 행에 대해 위의 동작을 수행하려면 하나의 TD 중첩 된 div로 충분합니다. 나를 위해

<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

내 테스트에서 CF10 (비록 CFDocument 엔진이 CF8 이후로 변경되지 않았다고 믿는다.) 렌더러는 3 줄 또는 4 줄의 높이가 있다면 행을 함께 유지하는 것처럼 보인다. 어떤 지점에서 그들을 나눕니다. 이 DIV 솔루션은 키가 약간 큰 행에 효과적이었습니다. 알고리즘이 블록 수준 요소를 가중치를 유지하면서 함께 유지하려고했기 때문에 테이블 안의 테이블을 중첩하면 페이지 나누기가 어려워 질 수 있습니다. –

0

, 모든 트릭과 포럼 힌트 등 시도 후 - (이미지, 테이블, DIV 블록 등 포함) 코드의 큰 블록 CF8에서 근무 유일한 것입니다 :

  • 01

    <div>...</div>

  • 하지만, (코드에) 새로운 라인이 후 슈퍼 간단한 <br>과 비 페이지 깨는 부분을 감싸예 :

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

은, 도대체 왜 ...

관련 문제