如何使用itextsharp从pdf文档中删除某些页面?

时间:2019-09-17 13:52:57

标签: c# file pdf itext

我正在根据用户指定的顺序覆盖pdf文件中的页面。我试图以一种方式设置我的代码,即从文件中选择要保留的页面,将这些页面作为对象存储在内存中,完全覆盖同一文件,然后将这些页面写回到文件中,然后追加为用户需要的。

    PdfReader reader = new PdfReader("test.pdf");
    reader.SelectPages("1-5"));
    PdfStamper stamper = new PdfStamper(reader, new 
    FileStream("test.pdf", FileMode.Create));

我遇到的问题是PdfStamper无法初始化,因为它要用于写入的文件已经为PdfReader打开。如何将PdfReader中的页面读取到内存中,以便可以将其关闭,然后在清除后写入同一文件?

2 个答案:

答案 0 :(得分:0)

要“删除”页面,只需选择要保留的页面:

PdfReader pdfReader = new PdfReader("Pdf_FilePath.pdf")
pdfReader.selectPages("1-3,5-10"); //Now You have pages without page no.4

使用以下命令将更改写入pdf

PdfStamper pdfStamper = new PdfStamper(pdfReader,
                        new FileOutputStream("Result_Pdf_FilePath.pdf"));

然后关闭Stamper和Reader

pdfStamper.close();

如果要将文件保存在同一路径中,则可以使用tempfile,然后在关闭Reader后复制临时文件并覆盖旧的临时文件,然后删除临时文件。

答案 1 :(得分:0)

我测试了它,效果很好。试试这个:

注意:原始PDF共有4页,而我删除了该页。 我使用了库:“ iTextSharp.LGPLv2.Core”

    class Program
{
    static void Main(string[] args)
    {
        string fullName = "C:\\tmp\\pm\\Contract\\_models\\Proposta Saude.pdf";
        PDFTest(fullName);

        Console.WriteLine("Finish!!");
        Console.Read();
    }

    static private void PDFTest(string fileName)
    {
        using (Stream resultPDFOutputStream = new FileStream(path: "C:\\tmp\\pm\\Contract\\_models\\Proposta Saude -2.pdf", mode: FileMode.Create))
        {
            // Create a reader from the file bytes.
            var reader = new PdfReader(fileName);
            reader.SelectPages("1-2,4");

            PdfStamper pdfStamper = new PdfStamper(reader, resultPDFOutputStream);
            pdfStamper.Close();
            reader.Close();
        }  
    }
}