使用ItextSharp在其他页面上添加了数据

时间:2012-08-17 21:26:33

标签: itextsharp

这个问题,关于使用itextSharp创建pdf

我在该表的第一行中添加了表格,我已经手动添加了名称,ID等等,并且表格名称和来自数据库的ID现在我的问题是当页面结束时再次我要手动添加相同像Name,Id和数据一样的行将继续来自数据库所以我该怎么做?请帮助我摆脱这些问题..

1 个答案:

答案 0 :(得分:1)

这一切都取决于您如何创建文档。您是附加到现有文档,还是从头开始生成新文档?无论哪种方式,您可能最终都会使用PageEvents来完成此任务。当编写器到达新页面的开头时,您可以编写自定义OnPageEnd事件来“重写”表头。如果你是从“从头开始”的角度来做这件事,它可能会变得棘手,但你应该还是没问题,只要你在期间>你的表创建事件。如果要附加到现有文档,则创建包含表格的文件可能更符合您的利益,并在完成表格后将它们合并在一起。无论哪种方式,这都不是一个特别复杂的过程。如果要在for或while循环中创建表,例如:

for(int i = 0; a < 100; i++)
{
    //OnPageEnd Event that adds the Table Header
    table.addCell(cell)
} 

这样,对于循环的每次迭代,它都会检查它是否必须写入新页面。如果没有,它将继续添加单元格。如果是,它将插入标题行,并继续循环。

应该很简单。我通常会创建一个包含我的页面事件的类文件,并在需要时调用它们。一旦你创建了类文件并创建了你的函数,它就像添加你用来编写当前事件的头文件一样简单。页面事件看起来比实际上更令人生畏,但是一旦你花一点时间阅读它们,你可以省去很多麻烦,你可以创建更多动态文档。

希望这能为你指明一个好方向,因为我自己在创建表格方面遇到了麻烦,并且干净地处理了分页符。

修改


我将向您展示一个我用于创建的简单方法,让我们说一个单元格表,以便轻松实现,但它可以扩展到您需要的数量。这假定您正在为表文件创建单独的文档,并在之后合并它们。这不是你问题的一部分,所以除非你要求进一步澄清如何解决这个问题,否则我会把它留下来。

private void appendTable(string inputFile, string outputFile, string id)
{
    Document outputDoc = new Document(PageSize.LETTER, 15, 15, 35, 50);
    PdfReader reader = new PdfReader(inputFile);
    string sql = string.Format("SELECT * FROM table WHERE id='{0}'", id);
    try
    {
        DataTable dt = db.GetDataTable(sql);
        PdfPTable table = new PdfPTable(1);
        iTextSharp.text.Font arial = FontFactory.GetFont("Arial", 8);
        iTextSharp.text.Font arialheader = FontFactory.GetFont("Arial", 12);
        table.WidthPercentage = 95;
        PdfPCell headerCell = new PdfPCell(new Phrase("Cell Header", arialheader));
        headerCell.HorizontalAlignment = 1;
        table.AddCell(headerCell);

        PdfWriter wr = PdfWriter.GetInstance(outputDoc, new FileStream(outputFile, FileMode.Create, FileAccess.ReadWrite));
        foreach(DataRow row in dt.Rows)
        {
            PdfPCell cell = new PdfPCell(new Phrase("Cell Text", arial));
            meterCell.HorizontalAlignment = 1; //Center Aligned
            table.AddCell(meterCell);
        }

        outputDoc.Open();
        wr.PageEvent = new PageEvents.Header();
        wr.PageEvent = new PageEvents.Footer();
        outputDoc.Add(table);
        outputDoc.NewPage();
        outputDoc.Close();
    }

    catch (PdfException ex)
    {
        MessageBox.Show(ex.Message.ToString() + " **** " + ex.StackTrace);
    }
    catch (NpgsqlException ex)
    {
    MessageBox.Show(ex.Message.ToString() + " **** " + ex.StackTrace);
    }
 }