我需要以特定格式将数据导出为pdf

时间:2015-04-10 12:54:59

标签: pdf export itext

我正在使用此函数将数据从数据库导出为pdf,但其输出如表...我想以如下格式导出特定行:

id : 
Name : 
Gender :
Salary : 

我该怎么做 提前谢谢

public void ExportToPDF()
    {
        SqlCommand cmd = new SqlCommand("SELECT EmployeeId , EmployeeName , EmployeeGender , EmployeeSalary , isActive FROM Employee", con);
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds);
        GridView gridview1 = new GridView();
        gridview1.AllowPaging = false;
        gridview1.DataSource = ds;
        gridview1.DataBind();

        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=DataSet.pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        gridview1.RenderControl(hw);
        StringReader sr = new StringReader(sw.ToString());
        Document pdfDoc = new Document(PageSize.A4 , 10f , 10f , 10f , 0f);
        HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
        PdfWriter.GetInstance(pdfDoc , Response.OutputStream);
        pdfDoc.Open();
        htmlparser.Parse(sr);
        pdfDoc.Close();
        Response.Write(pdfDoc);
        Response.End();
    }

1 个答案:

答案 0 :(得分:1)

请查看UnitedStates示例。为简单起见,我不使用数据库而是使用CSV文件。应该很容易调整示例,以便它从数据库接受数据,而不是通过解析CSV。

您需要的关键类是PdfPTable。例如,如果databaseObject是您为了存储数据库中的数据而创建的对象(例如记录的内容),则需要以下内容:0

PdfPTable table = new PdfPTable(2);
table.addCell("Id:");
table.addCell(databaseObject.getId());
table.addCell("Name:");
table.addCell(databaseObject.getName());

我发现您在代码中使用HTMLWorker。这有问题有两个原因:

  1. 这意味着您首先要将所有数据转换为XHTML。这会花费处理时间,如果您不需要XHTML,那么浪费时间。
  2. HTMLWorker类已过时。它不再受支持。如果您确实希望将XHTML表转换为PDF,则应使用XML Worker,如在这些示例中所做的那样
  3. 显然,您可以通过许多其他方式解决您的问题。观看this video,您会发现您还可以创建模板(例如参见state.pdf),然后填写此表单:

    public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
        PdfReader reader = new PdfReader(src);
        PdfStamper stamper = new PdfStamper(reader,
                new FileOutputStream(dest));
        AcroFields fields = stamper.getAcroFields();
        fields.setField("name", "CALIFORNIA");
        fields.setField("abbr", "CA");
        fields.setField("capital", "Sacramento");
        fields.setField("city", "Los Angeles");
        fields.setField("population", "36,961,664");
        fields.setField("surface", "163,707");
        fields.setField("timezone1", "PT (UTC-8)");
        fields.setField("timezone2", "-");
        fields.setField("dst", "YES");
        stamper.close();
        reader.close();
    }
    

    这显示在FillForm示例中。

    遗憾的是,由于可以在网上找到大量文档(我只使用了一些示例),因此您选择的代码片段并不接近您想要做的事情。< / p>