C# 将PDF表单拆分为保留字段的页面

C# 将PDF表单拆分为保留字段的页面,c#,pdf,itextsharp,C#,Pdf,Itextsharp,我正在使用iTextSharp将多页AcroForms拆分为单页AcroForm,但我无法“保留”表单的完整功能: 这是我正在使用的代码: using (PdfReader reader = new PdfReader(options.InputFile)) { string basename = Path.GetFileNameWithoutExtension(options.InputFile); for (i

我正在使用iTextSharp将多页AcroForms拆分为单页AcroForm,但我无法“保留”表单的完整功能:

这是我正在使用的代码:

        using (PdfReader reader = new PdfReader(options.InputFile))
        {
            string basename = Path.GetFileNameWithoutExtension(options.InputFile);

            for (int pagenumber = 1; pagenumber <= reader.NumberOfPages; pagenumber++)
            {
                string filename;
                Document document;
                PdfCopy copy;

                document = new Document();

                filename = String.Format("{0}.{1}.pdf", basename, pagenumber);

                copy = new PdfCopy(document, new FileStream(filename, FileMode.Create));

                document.Open();

                copy.AddPage(copy.GetImportedPage(reader, pagenumber));

                document.Close();
            }

            return reader.NumberOfPages;
        }
使用(PdfReader阅读器=新的PdfReader(options.InputFile))
{
string basename=Path.GetFileNameWithoutExtension(options.InputFile);

对于(int pagenumber=1;pagenumberthks@Bruno),解决方案是这样的。注意,由于使用copy.AddDocument(reader,pages),我必须重新初始化每个页面的读卡器。AddDocument(reader,pages)从读卡器对象中删除所有页面

        PdfReader reader = new PdfReader(options.InputFile);
        List<int> pages;
        pages = new List<int>();

        int n_pages = reader.NumberOfPages;

        string basename = Path.GetFileNameWithoutExtension(options.InputFile);

        for (int pagenumber = 1; pagenumber <= n_pages; pagenumber++)
        {
            using (PdfReader page_reader = new PdfReader(options.InputFile))
            {
                string filename;
                Document document;
                PdfCopy copy;

                pages.Clear();

                filename = String.Format("{0}.{1}.pdf", basename, pagenumber);

                document = new Document();

                copy = new PdfCopy(document, new FileStream(filename, FileMode.Create));

                copy.SetMergeFields();

                document.Open();

                pages.Add(pagenumber);

                copy.AddDocument(page_reader, pages);

                document.Close();
            }
        }

        return n_pages;
PdfReader reader=新的PdfReader(options.InputFile);
列表页;
pages=新列表();
int n_pages=reader.NumberOfPages;
string basename=Path.GetFileNameWithoutExtension(options.InputFile);

对于(int pagenumber=1;pagenumber),我找到了一些对
CopyAcroForm
CopyDocumentFields
的引用,但它们与整个文档相关,因此无法在单个页面上调用。您需要使用
setMergeFields()
方法,如以下示例所示:是的,就是这样。感谢您将示例从Java移植到C#。这对于进一步参考非常有用。我认为这确实是本网站的范围。@BrunoLowagie这是
copy.AddDocument(page#reader,page)的正常行为
要从
page\u reader
中删除所有页面?如果传递
pages
参数,则使用的是与
PdfReader.SelectPages()等效的
page\u reader
,因此是的,在使用
copy.AddDocument(page\u reader,pages)时不应重复使用
page\u reader
。每次创建一个新的
PdfReader
,或者使用
PdfImportedPage
对象添加特定页面。