使用ITextSharp从PDF文件中提取页面

本文关键字:提取 文件 ITextSharp PDF 使用 | 更新日期: 2023-09-27 17:54:32

是否有可能使用ittext从完整的PDF文档复制PDF页面并根据表单字段名称返回部分文档?例如,我需要复制一个pdf文档的开头,并在一个名为[STOP_HERE]的特定文本字段处停止,因此无论该字段之前的内容是什么,[STOP_HERE]字段都可以位于每个文档的不同页面上,因此在这里使用页码是没有用的。

我在网上搜索,我所能找到的是一种方法,只能从文档复制表单字段,而不是整个文档元素,包括图像文本及其确切的位置和样式。

文本文本可以做这里的工作吗?

编辑:更多细节

[STOP_HERE]是一个AcroForms文本字段,由PDF设计人员放置在文档中,以指示应该将此元素之前的所有内容原样复制到另一个文档中。字段本身并不重要,我不想用它填充或做任何事情,它只是用作一个信号,让文档解析器停止在那里并复制所有以前的(上)内容,我只是不知道如何在该字段之前读取所有内容(不改变样式,内容等)。

使用ITextSharp从PDF文件中提取页面

是否有可能使用ittext从完整的PDF文档复制PDF页面并根据表单字段名称返回部分文档?例如,我需要复制pdf文档的开头,并在某个名为[STOP_HERE]

的文本字段处停止

不幸的是,OP没有告诉是否包含表单字段[STOP_HERE]的页面。由于这仅仅是+/-1的问题,所以我简单地假设要包含该页面。

因此,任务可以这样实现:

PdfReader reader = new PdfReader(srcFile);
AcroFields.Item field = reader.AcroFields.Fields["[STOP_HERE]"];
if (field != null)
{
    int firstPage = reader.NumberOfPages + 1;
    for (int index = 0; index < field.Size; index++)
    {
        int page = field.GetPage(index);
        if (page > 0 && page < firstPage)
            firstPage = page;
    }
    if (firstPage <= reader.NumberOfPages)
    {
        reader.SelectPages("1-" + firstPage);
        PdfStamper stamper = new PdfStamper(reader, new FileStream(dstFile, FileMode.Create, FileAccess.Write));
        stamper.Close();
    }
}
reader.Close();

代码打开PdfReader中的源文件并首先查找字段。如果存在,则迭代该字段的所有外观,并确定具有该字段外观的最早页面。如果存在这样的页面,则代码将阅读器限制为该页面之前的页面,并使用PdfStamper存储此限制。