使用ITextSharp从PDF文件中提取页面
本文关键字:提取 文件 ITextSharp PDF 使用 | 更新日期: 2023-09-27 17:54:32
是否有可能使用ittext从完整的PDF文档复制PDF页面并根据表单字段名称返回部分文档?例如,我需要复制一个pdf文档的开头,并在一个名为[STOP_HERE]的特定文本字段处停止,因此无论该字段之前的内容是什么,[STOP_HERE]字段都可以位于每个文档的不同页面上,因此在这里使用页码是没有用的。
我在网上搜索,我所能找到的是一种方法,只能从文档复制表单字段,而不是整个文档元素,包括图像文本及其确切的位置和样式。
文本文本可以做这里的工作吗?
编辑:更多细节
[STOP_HERE]是一个AcroForms文本字段,由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
存储此限制。