写入现有pdf文件并使用itextsharp将其另存为新文件

时间:2017-07-28 10:04:58

标签: c# itext

我有一个包含一些数据的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();
}

使用上面的代码,我可以添加表格,但旧文件的内容不会被复制到新文件中。

1 个答案:

答案 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();