这个问题,关于使用 itextSharp 创建 pdf
我在该表的第一行中的文档中添加了表,我手动添加了名称,ID 等,并且该表名称和 id 来自数据库现在我的问题是,当页面再次结束时,我想手动添加相同的行,例如名称, ID 和数据将继续来自数据库所以我该怎么办?请帮我解决这些问题..
这个问题,关于使用 itextSharp 创建 pdf
我在该表的第一行中的文档中添加了表,我手动添加了名称,ID 等,并且该表名称和 id 来自数据库现在我的问题是,当页面再次结束时,我想手动添加相同的行,例如名称, ID 和数据将继续来自数据库所以我该怎么办?请帮我解决这些问题..
这完全取决于您如何创建文档。您是追加到现有文档,还是从头开始生成新文档?无论哪种方式,您可能最终都会使用PageEvents
来完成此操作。OnPageEnd
当作者到达新页面的开头时,您可以编写自定义事件来“重写”表头。如果你是从“从头开始”的角度来做这件事,它可能会变得很棘手,但你应该没问题,只要你在期间触发事件你的表创建。如果您要附加到现有文档,最好创建一个包含表格的文件,并在完成表格后将它们合并在一起。无论哪种方式,这都不是一个特别复杂的过程。如果您在 for 或 while 循环中创建表,例如:
for(int i = 0; a < 100; i++)
{
//OnPageEnd Event that adds the Table Header
table.addCell(cell)
}
这样,对于循环的每次迭代,它都会检查是否必须写入新页面。如果没有,它将继续添加单元格。如果是这样,它将插入您的标题行,并继续循环。
这应该很简单。我通常会创建一个包含我的页面事件的类文件,并在需要时调用它们。创建类文件并创建函数后,只需添加用于将当前标题写入事件的代码即可。页面事件似乎比实际更令人生畏,但是一旦您花一点时间阅读一下它们,您就可以省去很多麻烦,并且可以创建更多动态文档。
希望这为您指明了一个好的方向,因为我自己在创建表格和干净地处理分页符方面遇到了困难。
编辑
我将向您展示一种简单的方法,用于创建一个简单的 1 单元格表,但它可以扩展到您需要的任意数量。这是假设您正在为表格文件创建一个单独的文档,然后将它们合并。这实际上不是您问题的一部分,因此除非您要求进一步说明如何解决此问题,否则我会将其省略。
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);
}
}