【问题标题】:Display/Download Table in Pdf在 Pdf 中显示/下载表格
【发布时间】:2023-03-17 23:53:02
【问题描述】:

我有下表,需要下载为 PDF。

该方法下载为pdf,但不显示表格的边框。

谢谢!

protected void Button2_Click(object sender, EventArgs e) {

    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=Panel.pdf");
    Response.Cache.SetCacheability(HttpCacheability.NoCache);

    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);

    Repeater_AK.RenderControl(htmlTextWriter);
    StringReader stringReader = new StringReader(stringWriter.ToString());
    Document Doc = new Document(PageSize.A4, 160, 160, 20, 20);

    HTMLWorker htmlparser = new HTMLWorker(Doc);
    PdfWriter.GetInstance(Doc, Response.OutputStream);

    Doc.Open();
    htmlparser.Parse(stringReader);
    Doc.Close();
    Response.Write(Doc);
    Response.End();

}

HTML

 <table cellspacing="0" style="border-style:solid; font-family:Calibri; border-width:thin;" >
                                   <tr style="height: 26.4pt;">
                        <td align="center" colspan="6" 
                            style="padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_title" runat="server" 
                                Style="font-weight: bold; font-size:7pt; padding-left:5.4pt; padding-right:5.4pt;">ALASKA INSURANCE IDENTIFICATION CARD</asp:Label>
                        </td>
                    </tr>

                    <tr style="height: 8.4pt;">
                        <td colspan="2" 
                            style="max-width:98.1pt; padding-left:5.4pt; padding-right:5.4pt; padding-bottom:0px;">
                            <asp:Label ID="lbl_Company_NAIC_Number" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Company NAIC Number"></asp:Label>
                        </td>
                        <td style="width:43.2pt; padding-left:5.4px; padding-right:5.4pt; padding-bottom:0px;">
                            <asp:Label ID="lbl_Commercial" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Commercial"></asp:Label>
                        </td>
                        <td style="width:20.7pt; padding-left:5.4pt; padding-right:5.4pt; padding-bottom:0px;">

                        </td>
                        <td style="width:38.7pt; padding-left:5.4pt; padding-right:5.4pt; padding-bottom:0px;">
                            <asp:Label ID="lbl_Personal" runat="server" Style="font-weight:bold; font-size:7pt;" Text="Personal"></asp:Label>
                        </td>
                        <td style="width:16.2pt; padding-left:5.4pt; padding-right:5.4pt; padding-bottom:0px;">

                        </td>
                    </tr>

                    <tr valign="top">
                        <td colspan="2" style="width:108.9pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_Company_NAIC_Number_out" runat="server" Style="font-size:5pt;" Text="31089"></asp:Label>

                        </td>
                        <td colspan="4" 
                            style="width:162pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_empty2" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text=""></asp:Label>
                        </td>
                    </tr>

                    <tr style="height: 21.6pt;" valign="top">
                        <td colspan="2" 
                            style="width:108.9pt; padding-left:5.4pt; padding-right:5.4pt;">

                            <asp:Label ID="lbl_Company_Name_and_Address" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Company Name and Address"></asp:Label>
                                <p style="margin:0px;">
                                </p>
                            <asp:Label ID="lbl_Company_Name_and_Address_out" runat="server" Style="font-size:5pt;" Text="Repwest Insurance Company"></asp:Label>

                        </td>
                        <td colspan="4" 
                            style="width:162pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_Company_Phone_Number" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Company Phone Number"></asp:Label>
                                <p style="margin:0px;">
                                </p>
                                <asp:Label ID="lbl_Company_Phone_Number_out" runat="server" 
                                Style="font-size:5pt;" Text="1-800-858-0317"></asp:Label>
                        </td>
                    </tr>

                    <tr style="height: 21.6pt;" valign="top">
                        <td colspan="2" 
                            style="width:108.9pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_Policy_Number" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Policy Number"></asp:Label>
                                 <p style="margin:0px;">
                                </p>
                                <asp:Label ID="lbl_Policy_Number_out" runat="server" 
                                Style="font-size:5pt;" Text="PolicyPlaceHolder"></asp:Label>
                        </td>
                        <td colspan="2" 
                            style="width:85.5pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_Effective_Date" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Effective Date"></asp:Label>
                                 <p style="margin:0px;">
                                </p>
                                  <asp:Label ID="lbl_Effective_Date_out" runat="server" 
                                Style="font-size:5pt;" Text="4/1/2015"></asp:Label>
                        </td>
                        <td colspan="2" 
                            style="width:76.5pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_Expiration_Date" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Expiration Date"></asp:Label>
                                 <p style="margin:0px;">
                                </p>
                                <asp:Label ID="lbl_Expiration_Date_out" runat="server" 
                                Style="font-size:5pt;" Text="3/31/2016"></asp:Label>
                        </td>
                    </tr>

                    <tr style="height: 22.2pt;" valign="top">
                        <td style="width:50.4pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_Year" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Year"></asp:Label>
                                     <p style="margin:0px;">
                                </p>
                                <asp:Label ID="lbl_Year_out" runat="server" 
                                Style="font-size:5pt;" Text='<%# Eval("YEAR") %>'></asp:Label>
                        </td>
                        <td style="width:58.5pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_Make_Model" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Make/Model"></asp:Label>
                                     <p style="margin:0px;">
                                </p>
                                <asp:Label ID="lbl_Make_Model_out" runat="server" 
                                Style="font-size:5pt;" Text='<%# Eval("MODEL") %>'></asp:Label>
                        </td>
                        <td colspan="4" 
                            style="width:162pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_VIN" runat="server" Style="font-weight:bold; font-size:7pt;" 
                                Text="Vehicle Identification Number"></asp:Label>
                                     <p style="margin:0px;">
                                </p>
                                <asp:Label ID="lbl_VIN_out" runat="server" Style="font-size:5pt;" 
                                Text='<%# Eval("VIN") %>'></asp:Label>
                        </td>
                    </tr>

                    <tr style="height: 37.8pt;" valign="top">
                        <td colspan="2" 
                            style="width:108.9pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_Agency" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Agency/Company Issuing Card"></asp:Label>
                                       <p style="margin:0px;">
                                </p>
                                   <asp:Label ID="lbl_Agency_out" runat="server" 
                                Style="font-size:5pt;">Company<br />ADDRESS<br />PHOENIX, AZ 85024</asp:Label>
                        </td>
                        <td colspan="4" 
                            style="width:162pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_Insured_Name" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" Text="Insured Name and Address"></asp:Label>
                                        <p style="margin:0px;">
                                </p>
                                 <asp:Label ID="lbl_Insured_Name_out" runat="server" Style="font-size:5pt;"><%# Eval("INSURED_NAME") %><br /><%# Eval("INSURED_ADDRESS") %><br /><%# Eval("INSURED_CITY")%>, <%# Eval("INSURED_STATE")%>&nbsp <%# Eval("INSURED_ZIPCODE") %></asp:Label>
                        </td>
                    </tr>

                    <tr style="height: 9.6pt;" valign="top">
                        <td align="center" colspan="6" 
                            style="width:260.1pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_Not_valid" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" 
                                Text="Not valid for more than one year from effective date"></asp:Label>
                        </td>
                    </tr>

                    <tr style="height: 12pt;">
                        <td align="center" colspan="6" 
                            style="width:260.1pt; padding-left:5.4pt; padding-right:5.4pt;">
                            <asp:Label ID="lbl_see_importance" runat="server" 
                                Style="font-weight:bold; font-size:7pt;" 
                                Text="See Important notice on reverse side"></asp:Label>
                        </td>
                    </tr>

                    <tr style="height: 13.7pt;">
                        <td colspan="6" 
                            style="width:260.1pt; padding-left:5.4pt; padding-right:5.4pt;">


                        </td>
                    </tr>
                </table>

【问题讨论】:

  • 嗨,莉莉,不幸的是,您发布的代码行数越多,您的问题得到回答的可能性就越小,而且您得到的 366 已经很多了。此外,由于我们没有您的数据库,因此您的代码不可重现。如果您发布的代码更少并且我们都可以进入 VS 并让它正常工作,这将有所帮助,理想情况下是将您的非常具体的问题抽象为更普遍的问题。例如,数据库是一组行的集合,这些行是单元格的集合,也许(出于演示目的)您可以只拥有一个对象数组。
  • 您好克里斯,感谢您帮助解决我的问题。我将代码替换为链接,以便您查看演示。我还包括了下载中继器的第二个选项。再次感谢您!
  • 感谢 Lily,我们离合作的目标越来越近了。我建议阅读this (unfortunately long) post about converting HTML to PDF。首先(第 5 段),您会发现 HTMLWorker 已过时,不再受支持,并且有一个非常非常基本的 HTML/CSS 解析器。您应该改用XMLWorker。其次(第 4 段),一旦 iTextSharp 参与进来,ASP.Net 不再重要必须只有 HTML 和 CSS。如果您可以发布一个非常小的 HTML 和 CSS 示例,我们可能会为您提供更多帮助。
  • 我认为我发布了太多 HTML。除了作为图像的水印之外,我没有 CSS 脚本。我在 html 正文中编码的所有其他内容。我不明白为什么不显示表格边框。如果我能把它显示出来,我会在清澈的海水中。谢谢!
  • 这仍然是 ASPX 而不是 HTML。你能渲染这个然后只发布你希望 iTextSharp 解析的 HTML 吗?

标签: c# itextsharp


【解决方案1】:

最终你的问题是你使用的是一个过时的 HTML 解析器,如果你使用的是 iTextSharp 的最新版本,你实际上应该从你的 IDE 中收到警告,除非你有很多遗留代码,否则真的没有不是不运行最新版本的好理由。如果您因为许可证差异而运行 4.x 版本,我强烈建议您阅读fourth block on this page

无论如何,HTMLWorker 对样式命令的支持非常有限,border 不是其中之一。如果您想继续使用HTMLWorker,请阅读fifth paragraph here,它告诉您可以使用哪些属性。如果您想使用 HTMLWorker 更改边框,我知道的唯一选择是将其设置在 HTML 标记本身上:

<table border="1">

但是,如果您切换到 XMLWorker,只要您将 border-width 属性更改为像 1px 这样的实际单位,您的代码就会按预期工作:

<table style="border-style:solid; border-width: 1px;">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 2018-07-23
    相关资源
    最近更新 更多