【问题标题】:How can I delete some pages from a pdf document using itextsharp?如何使用 itextsharp 从 pdf 文档中删除某些页面?
【发布时间】:2020-01-18 09:48:52
【问题描述】:

我正在根据用户指定的顺序覆盖 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 中的页面读入内存,以便关闭它,然后在清除后写入同一个文件?

【问题讨论】:

  • 为什么不使用不同的文件名?
  • 它是用于扫描软件的,所以如果第 4 页出现卡纸或其他问题,那么我需要保留所有文件直到该文件,删除第 4 页,然后在新扫描的页面进入时附加它们。
  • 如何将原始文件读入内存(字节数组)并从该数组初始化pdf阅读器?这样文件就不会被锁定。但是,显然,如果在写入过程中发生某些事情,如果文件不再存在,您将没有任何副本......

标签: c# file pdf itext


【解决方案1】:

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

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后复制临时文件并覆盖旧文件,然后删除临时文件。

【讨论】:

  • 您能详细说明如何将旧页面保存到临时文件吗?
  • 可以与删除页面完全相同,但删除相反的页面
【解决方案2】:

我对其进行了测试,效果非常好。试试这个:

注意:原始 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();
        }  
    }
}

【讨论】:

  • 你可能误解了这个问题,这个操作特别想保存到他读取的同一个文件中。
猜你喜欢
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 2011-11-06
  • 2017-04-18
  • 2011-04-23
  • 2017-01-27
  • 2013-04-30
相关资源
最近更新 更多