使用 iText 7 将 HTML 模板转换为 PDF:如何移动跨页打印的表格

Ald*_*jal 5 c# pdf-generation itext itext7

我正在开发一个 asp.net mvc 项目,我正在使用一个 html 模板来生成一个带有动态数据的发票文档,这些数据是我通过车把填充的。html 结果正在使用 iText 7 转换为 PDF,因为这是公司使用所需的工具,但是我在将其转换为 PDF 时遇到问题,因为有时会显示数据的 html 表格有足够的数据可以容纳在一页中,但在其他情况下,有许多行会形成分页符,从而在两页上打印数据。每当数据不适合一页时,我需要将整个表块移动到下一页。

\n

这是模板(Mytemplate.html):

\n

\r\n
\r\n
<!DOCTYPE html>\n<html>\n<head>\n    <meta charset="utf-8">\n    <title></title>\n    <meta name="viewport" content="width=device-width, initial-scale=1">\n    <style type="text/css">\n        <!-- Removed inline styles for space reasons -->\n    </style>\n</head>\n<body>\n<div style="width: 100%; margin: 0 auto; text-align: center; display: flex; justify-content: center;">\n    <div style="max-width: 700px; background-color: white; width: 100%">\n        <table style="width:100%">\n            <tbody>\n            <tr>\n                <td>\n                    <table class="table-header table-information m-0 border-zero">\n                        <tr>\n                            <td class="text-al" style="vertical-align: top">\n                                <img src="{{baseUrl}}\\images\\clear_purple.png" style="width: 150px; height: 50px;">\n                            </td>\n                            <td class="text-al" style="vertical-align: top">\n                                <table class="table-information m-0 border-zero">\n                                    <tbody>\n                                        <tr>\n                                            <td class="td-information p-0">\n                                                <p class="text p-0">Insured: {{insured}}</p>\n                                            </td>\n                                        </tr>\n                                        <tr>\n                                            <td class="td-information p-0">\n                                                <p class="text p-0">{{facilityName}}</p>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </td>\n                            <td class="text-al vertical-ab">\n                                <table class="table-information m-0 border-zero">\n                                    <tbody>\n                                        <tr>\n                                            <td class="td-information p-0">\n                                                <p class="text p-0">Invoice Period: {{invoicePeriod}}</p>\n                                            </td>\n                                        </tr>\n                                        <tr>\n                                            <td class="td-information p-0">\n                                                <p class="text p-0">Date sent to LCTI: {{invoiceDateLTCI}}</p>\n                                            </td>\n                                        </tr>\n                                        <tr>\n                                            <td class="td-information p-0">\n                                                <p class="text p-0">LTCI Rep: {{clientReferrer}}</p>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </td>\n                        </tr>\n                    </table>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <table class="table-information">\n                        <tbody>\n                        <tr class="tr-information">\n                            <th class="td-background" colspan="3">\n                                <p class="text-title">Residency Information</p>\n                            </th>\n                        </tr>\n                        <tr>\n                            <td class="td-information p-0 vertical-ab" colspan="3">\n                                <table class="table-information border-zero mb-0"">\n                                    <tbody>\n                                        <tr>\n                                            <td class="td-information w-35">\n                                                <p class="text text-bold">Facility Type</p>\n                                                <p class="text text-bold">Room/Unit Number</p>\n                                                <p class="text text-bold">Insurance Provider</p>\n                                                <p class="text text-bold">Insured\xe2\x80\x99s Policy Number</p>\n                                                <p class="text text-bold">Invoice Number</p>\n                                            </td>\n                                            <td class="td-information w-65">\n                                                <p class="text-light">{{residencyInfo.facilityType}}</p>\n                                                <p class="text-light">{{residencyInfo.roomNumberChangeTo}}{{#if residencyInfo.roomNumberChange}} - {{residencyInfo.roomNumberChangeReason}}{{/if}}</p>\n                                                <p class="text-light">{{residencyInfo.insurerProvider}}</p>\n                                                <p class="text-light">{{residencyInfo.policyNumber}}</p>\n                                                <p class="text-light">{{residencyInfo.invoiceNumber}}</p>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </td>\n                        </tr>\n                        <tr>\n                            <td class="td-information td-border-top br-1 w-45">\n                                <table class="w-full">\n                                    <tbody>\n                                        {{#if residencyInfo.haveDaysOutOfFacility}}\n                                        <tr>\n                                            <td>\n                                                <p class="text text-bold">Total Days in Facility</p>\n                                            </td>\n                                            <td>\n                                                <p class="text-light">{{residencyInfo.totalDaysInFacility}}</p>\n                                            </td>\n                                        </tr>\n                                        <tr>\n                                            <td>\n                                                <p class="text text-bold">Total Days out of Facility</p>\n                                            </td>\n                                            <td>\n                                                <p class="text-light">{{residencyInfo.totalDaysOutOfFacility}}</p>\n                                            </td>\n                                        </tr>\n                                        {{/if}}\n                                        {{#if residencyInfo.haveBedHoldDays}}\n                                        <tr>\n                                            <td>\n                                                <p class="text text-bold">Bedhold Days</p>\n                                            </td>\n                                            <td>\n                                                <p class="text-light">{{residencyInfo.bedHoldDays}}</p>\n                                            </td>\n                                        </tr>\n                                        {{/if}}\n                                    </tbody>\n                                </table>\n                            </td>\n                            <td class="td-information bl td-border-top">\n                                <table class="w-full">\n                                    <tbody>\n                                        <tr>\n                                            <td class="td-information-width">\n                                                <p class="text-light-2">Reason for Absence</p>\n                                            </td>\n                                            <td class="td-information-width">\n                                                <p class="text-light-2 text-ar">Dates of Absence</p>\n                                            </td>\n                                        </tr>\n                                        {{#each residencyInfo.absenceReasons}}\n                                        <tr>\n                                            <td>\n                                                <p class="text-light">{{reason}}</p>\n                                            </td>\n                                            <td>\n                                                <p class="text-light text-ar">{{from}}th{{#if hasTo}} - {{to}}th{{/if}}</p>\n                                            </td>\n                                        </tr>\n                                        {{/each}}\n                                    </tbody>\n                                </table>\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <table class="table-information">\n                        <tbody>\n                            <tr class="tr-information">\n                                <th class="td-background" colspan="3">\n                                    <p class="text-title">Care Provided</p>\n                                </th>\n                            </tr>\n                            <tr>\n                                <td class="td-information p-0" style="width: 50%;">\n                                    <table class="table-information border-zero mb-0">\n                                        <tbody>\n                                            <tr>\n                                                <th class="td-information w-58 th-activity td-border-bottom">\n                                                    <p class="text text-bold">Activities of Daily Living (ADLS)</p>\n                                                </th>\n                                                <th class="td-information p-0 w-14 td-border-bottom vertical-ab">\n                                                    <div class="rotate-315">\n                                                        <p class="text-s10 text-ac text-gray-500">Standby</p>\n                                                    </div>\n                                                </th>\n                                                <th class="td-information p-0 w-14 td-border-bottom vertical-ab">\n                                                    <div class="rotate-315">\n                                                        <p class="text-s10 text-ac text-gray-500">Hands On</p>\n                                                    </div>\n                                                </th>\n                                                <th class="td-information p-0 w-14 td-border-bottom vertical-ab">\n                                                    <div class="rotate-315">\n                                                        <p class="text-s10 text-ac text-gray-500">Provided</p>\n                                                    </div>\n                                                </th>\n                                            </tr>\n\n                                            {{#each careProvided.adls}}\n                                            <tr>\n                                                <td class="td-information th-activity br-1 vertical-ac td-border-bottom">\n                                                    <p class="text text-light">{{name}}</p>\n                                                </td>\n                                                <td class="td-information p-4 br-1 text-ac vertical-ac td-border-bottom">\n                                                    {{#if standBy}}\n                                                    <img src="{{../baseUrl}}\\images\\clear_check.png" style="width: 14px; height: 14px;">\n                                                    {{/if}}\n                                                </td>\n                                                <td class="td-information p-4 br-1 text-ac vertical-ac td-border-bottom">\n                                                    {{#if handsOn}}\n                                                    <img src="{{../baseUrl}}\\images\\clear_check.png" style="width: 14px; height: 14px;">\n                                                    {{/if}}\n                                                </td>\n                                                <td class="td-information p-4 br-1 text-ac vertical-ac td-border-bottom">\n                                                    {{#if provided}}\n                                                    <img src="{{../baseUrl}}\\images\\clear_check.png" style="width: 14px; height: 14px;">\n                                                    {{/if}}\n                                                </td>\n                                            </tr>\n                                            {{/each}}\n                                        </tbody>\n                                    </table>\n                                </td>\n                                <td class="td-information p-0" rowspan="3" style="width: 50%; padding-top: 7px;">\n                                    <table class="table-information m-0 border-zero mb-0">\n                                        <tbody>\n                                            <tr>\n                                                <th class="td-information td-border-bottom">\n                                                    <p class="text text-bold pl-10">Instrumental Activities of Daily Living (IADLS)</p>\n                                                </th>\n                                            </tr>\n                                            {{#each careProvided.iadls}}\n                                            <tr>\n                                                <td class="td-information pt-0 pb-0">\n                                                    <p class="text text-light pl-10 ">{{name}}</p>\n                                                </td>\n                                            </tr>\n                                            {{/each}}\n                                        </tbody>\n                                    </table>\n                                </td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <table class="table-information">\n                        <tbody>\n                            <tr class="tr-information">\n                                <th class="td-background" colspan="4">\n                                    <p class="text-title">Invoice Totals</p>\n                                </th>\n                            </tr>\n                            <tr>\n                                <td style="width: 58%;">\n                                    <table class="table-information border-zero m-0">\n                                        <tbody>\n                                            {{#each invoiceTotals.charges}}\n                                            <tr>\n                                                <td class="td-information pt-0-10" style="width:60%">\n                                                    <p class="text text-bold" style="font-size:15px">{{name}}</p>\n                                                </td>\n                                                <td class="td-information pt-0-10" style="width:15%">\n                                                    <p class="text text-light text-ar">{{amount}}</p>\n                                                </td>\n                                                <td class="td-information p-4" style="width:25%">\n                                                    {{#if includedRnB}}\n                                                    <p class="text-small">Included in R&B</p>\n                                                    {{/if}}\n                                                </td>\n                                            </tr>\n                                            {{/each}}\n                                            <tr>\n                                                <td class="td-information text-ar" style="padding-right: 10px" colspan="2">\n                                                    <p class="text-title-35 text-green-500 text-ar">${{invoiceTotals.totalAmount}}</p>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </td>\n                                <td class="td-information pt-0" rowspan="2" style="width: 48%;">\n                                    <table class="table-information p-0 m-0 border-zero">\n                                        <tbody>\n                                            <tr>\n                                                <th class="td-information pl-0 pt-0-10"><p class="text text-bold">Other Payment sources:</p></th&

rhe*_*ens 2

CSS 属性page-break-inside由 iText 7 的 HTML 到 PDF 转换进行处理,以避免元素内分页。在您不想分成两页的表格上:

<table style="page-break-inside: avoid;">
<!-- table content -->
</table>
Run Code Online (Sandbox Code Playgroud)

当然,如果表格增长到比一页还大的高度,那么分割它是不可避免的。

或者,当首先使用 转换为Elements时,您可以在生成的实例上ConvertToElements使用。SetKeepTogether(true)Table


Copyright Info

© Copyright 2013-2021 admin@qa.1r1g.com

如未特别说明,本网站的内容使用如下协议:
Creative Commons Atution-NonCommercial-ShareAlike 4.0 International license
.

用以下方式浏览
回到顶部