我有一个包含一些数据的pdf文件。现在,我想使用这个现有的pdf文件并在其中插入一个表。然后我想用不同的文件名保存文件,以便现有的pdf文件保持原样。
注意:现有的pdf文件不是使用iTextSharp创建的。它是随机下载的。我必须使用现有的pdf文件,如模板。
public void Main(List<string> jobpath)
{
string oldpath = @"C:\Files\sample_new.pdf";
string newpath = @"C:\Files\sample_new_1.pdf";
PdfReader reader = new PdfReader(oldpath);
Rectangle size = reader.GetPageSizeWithRotation(1);
Document doc = new Document(size);
FileStream fs = new FileStream(newpath, FileMode.Create, FileAccess.Write);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
foreach (var list in jobpath)
{
cb.BeginText();
doc.NewPage();
doc.Open();
PdfPTable table = new PdfPTable(1);
table.HorizontalAlignment = Element.ALIGN_CENTER;
table.TotalWidth = 400f;
float[] widths = new float[] { 2f };
table.SetWidths(widths);
table.SpacingBefore = 40f;
table.SpacingAfter = 30f;
PdfPCell cell = new PdfPCell();
cell.Colspan = 3;
cell.HorizontalAlignment = 1;
table.AddCell(list);
doc.Add(table);
PdfImportedPage page = writer.GetImportedPage(reader, 1);
}
doc.Close();
}
使用上面的代码,我可以添加表格,但旧文件的内容不会被复制到新文件中。
答案 0 :(得分:-1)
使用以下代码,我可以将现有pdf的内容添加到新内容中。在此示例中,仅添加了第一页。
string oldpath = @"C:\Files\sample_new.pdf";
string newpath = @"C:\Files\sample_new_1.pdf";
PdfReader reader = new PdfReader(oldpath);
iTextSharp.text.Rectangle size = reader.GetPageSizeWithRotation(1);
Document doc = new Document(size);
FileStream fs = new FileStream(newpath, FileMode.Create, FileAccess.Write);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
foreach (var list in jobpath)
{
doc.NewPage();
doc.Open();
PdfPTable table = new PdfPTable(1);
table.HorizontalAlignment = Element.ALIGN_CENTER;
table.TotalWidth = 400f;
float[] widths = new float[] { 2f };
table.SetWidths(widths);
table.SpacingBefore = 40f;
table.SpacingAfter = 30f;
PdfPCell cell = new PdfPCell();
cell.Colspan = 3;
cell.HorizontalAlignment = 1;
table.AddCell(list);
doc.Add(table);
}
doc.Close();