html table导出到PDF,急!!!!在线等

时间:2021-05-01 18:43:07
先贴下我的代码吧
        <table width="100%" border="1" runat="server" id="tbRecord">
                    <tr align="center" class="gvHead">
                        <td>
                            地点
                        </td>
                        <td>
                            设备名称
                        </td>
                        <td>
                            测量数据
                        </td>
                        <td width="10%">
                            设备状态
                        </td>
                        <td width="18%">
                            备注
                        </td>
                    </tr>
                    <tr>
                        <td rowspan="2" align="center">
                            北近台
                        </td>
                        <td align="center">
                            云高仪<br />
                            CT25K
                        </td>
                        <td>
                            云高:<asp:Label runat="server" ID="lblCT25KBJTData"></asp:Label>
                            m
                        </td>
                        <td align="left">
                            <asp:CheckBoxList ID="cblCT25KBJT" runat="server" Enabled="false" >
                                <asp:ListItem Text="  正常">                   
                                </asp:ListItem>
                                <asp:ListItem Text="  不正常">                   
                                </asp:ListItem>
                            </asp:CheckBoxList>
                        </td>
                        <td>
                        </td>
                    </tr>
                    </table>
其实TR很多,我就省略了些。
后台代码:
   protected void imgBtnExecPDF_Click(object sender, EventArgs e)
    {

        DataTable dt = new DataTable();
        foreach (HtmlTableRow tr in tbRecord.Rows)
        {

            for (int i = 0; i < tr.Cells.Count; i++)
            {
                dt.Columns.Add(tr.Cells[i].InnerText);
            }

        }
     //   DALEMEquipments.DTBEquipmentListDataTable dt = BLLEMEquipmentManagement.GetAllEquipMentList();


        OutPdf(dt, "aa", 12);
    }
]    public static void OutPdf(DataTable Data, string FontPath, float FontSize)
    {


        MemoryStream m = new MemoryStream();
        Document document = new Document();
        try
        {
           HttpContext.Current.Response.ContentType = "application/pdf";
            PdfWriter.GetInstance(document, m);
            document.Open();
            //定义字体
            BaseFont baseFont =
             BaseFont.CreateFont(
             FontPath,
             BaseFont.IDENTITY_H,
             BaseFont.NOT_EMBEDDED);
            iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, FontSize);

            //添加内容
            PdfPTable table = new PdfPTable(Data.Columns.Count);
            for (int i = 0; i < Data.Rows.Count; i++)
            {
                for (int j = 0; j < Data.Columns.Count; j++)
                {
                    table.AddCell(new Phrase(Data.Rows[i][j].ToString(), font));
                }
            }

            document.Add(table);


        }
        catch (DocumentException ex)
        {

            HttpContext.Current.Response.Write(ex.Message);
        }

        document.Close();
        string filename = "1";
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;FileName=" + filename + ".pdf");
        HttpContext.Current.Response.OutputStream.Write(m.GetBuffer(), 0, m.GetBuffer().Length);
        HttpContext.Current.Response.OutputStream.Flush();
        HttpContext.Current.Response.OutputStream.Close();


    }
循环table赋值的时候 总是有问题 ->[color=#FF0000]无法获取  的内部内容,因为该内容不是文本。[/color

5 个解决方案

#2


你后来采取的是什么方法啊?没看到你说呀?你的bolg地址是?有源码吗?  我本来也是用水晶报表做的,但是我里面的数据是从数据库里读取某个列 然后解析xml获取相应的值 然后构建虚拟表 觉得那比较麻烦,而且复选框不好显示。 急~~猫哥

#3


兄弟 你呀咋实现的嘛? 数据是读取到了 但是在tale里面放了服务器标签 并从后台加载赋值的地方就会报错
无法获取 的内部内容,因为该内容不是文本

#4


该回复于2010-12-03 13:36:20被版主删除

#5


"无法获取 的内部内容,因为该内容不是文本"这个问题的解决方案:
可以把要显示的内容放到divPDF层中
System.Text.StringBuilder strb = new System.Text.StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(strb);
System.Web.UI.HtmlTextWriter htw = new HtmlTextWriter(sw);
divPDF.RenderControl(htw);
string str = strb.ToString();//str即为所需值

#1


#2


你后来采取的是什么方法啊?没看到你说呀?你的bolg地址是?有源码吗?  我本来也是用水晶报表做的,但是我里面的数据是从数据库里读取某个列 然后解析xml获取相应的值 然后构建虚拟表 觉得那比较麻烦,而且复选框不好显示。 急~~猫哥

#3


兄弟 你呀咋实现的嘛? 数据是读取到了 但是在tale里面放了服务器标签 并从后台加载赋值的地方就会报错
无法获取 的内部内容,因为该内容不是文本

#4


该回复于2010-12-03 13:36:20被版主删除

#5


"无法获取 的内部内容,因为该内容不是文本"这个问题的解决方案:
可以把要显示的内容放到divPDF层中
System.Text.StringBuilder strb = new System.Text.StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(strb);
System.Web.UI.HtmlTextWriter htw = new HtmlTextWriter(sw);
divPDF.RenderControl(htw);
string str = strb.ToString();//str即为所需值