【问题标题】:COLDFUSION: cfdocument and forcing a pagebreakCOLDFUSION:cfdocument 并强制分页
【发布时间】:2010-01-21 21:00:31
【问题描述】:

我正在 ColdFusion 中创建动态 PDF,但遇到“分页符”问题。有问题的页面可能有 1 条记录,或多达 60 条以上的记录。每条记录显示在表格的 2 行中。一些返回的记录在页面之间拆分(第一行在第一页的末尾,第二行是下一个的顶行)。

显示的 HTML 中的示例记录:

<tr>
  <td>Title</td><td>Price</td>
  <td colspan="2">Description</td>
</tr>

根据客户请求,我正在尝试显示 =。

这是我尝试过的一个简化示例:

<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

【问题讨论】:

  • 不是一个真正的答案,而是一个猜测。您是否尝试在 9 条记录后关闭 table 标签,并为新页面创建新表?唯一的问题是,对于长文本,您需要更少的行,这可能需要一些 Len() 技巧。

标签: pdf coldfusion page-break cfdocument


【解决方案1】:

您正在隐藏第 9 条记录,因为您在显示和显示之间进行选择:

if 9th record
    break page
else
    show record
end if

你想要的更像:

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

【讨论】:

    【解决方案2】:

    在断断续续地解决这个问题几个月后,我发现用div(即&lt;tr&gt;&lt;td&gt;&lt;div&gt;Cell Contents&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;)包装td 的内容可以防止行内出现分页。使用此设置,通常会在页面之间拆分行的分页符将改为位于 before 行之前,在第一页的末尾创建一点额外的空白并将该行放在开头下一页。

    关于具有多个单元格的行的注意事项:单个 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>
    

    【讨论】:

    • 在我使用 CF10 进行的测试中(尽管我相信 CFdocument 引擎自 CF8 以来没有改变),如果行高为三或四行,渲染器似乎会将它们保持在一起,并在某个点拆分它们.此 DIV 解决方案适用于稍高的行 - 也许算法会加权块级元素并尝试将它们保持在一起,因此在表格中嵌套表格可能会阻止分页符(哎哟!)
    【解决方案3】:

    尝试将style="page-break-inside: avoid;" 添加到您不想分成两页的任何元素。

    例如,

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

    【讨论】:

    • page-break-inside CSS 属性仅适用于 Opera w3schools.com/cssref/pr_print_pagebi.asp
    • @JonathanWilson 问题不在于渲染到浏览器,而是使用 CF 渲染到 PDF。我亲眼目睹(2 年前)在使用 CF 时正确地完成了这项工作。
    • 哦。我不知何故误解了这一点。
    【解决方案4】:

    对我来说,在尝试了所有技巧和论坛提示等之后 - 在 cf8 中用于较大代码块(包括图像、表格、div 块等)的唯一方法是:

    • 包裹非分页部分

      &lt;div&gt;...&lt;/div&gt;

    • 但是一个超级简单的&lt;br&gt; 在新行之后(在代码中) 例如

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

    成功了,天知道为什么......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 2010-11-06
      • 2016-04-19
      • 1970-01-01
      相关资源
      最近更新 更多