合并PDF文件iTextSharp的 [英] Merge PDFs iTextSharp

查看:428
本文介绍了合并PDF文件iTextSharp的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看了看几个例子在线想出了这个code合并使用iTextSharp的PDF文件。但我得到一个错误:

{的文档没有页。}

它未能在网页= writer.GetImportedPage(阅读器,X);

下面的堆栈跟踪:

 在iTextSharp.text.pdf.PdfPages.WritePageTree()
 在iTextSharp.text.pdf.PdfWriter.Close()
 在iTextSharp.text.pdf.PdfCopy.Close()
 在iTextSharp.text.Document.Close()
 

它,当我调试它3页。什么是错在这里?

下面是我的code

 公共静态的MemoryStream MergePdfs(名单< MemoryStream的> pdfStreams)
       {
        //创建输出流
           MemoryStream的OutStream =新的MemoryStream();
           文献文件= NULL;

           尝试
           {
                //创建主阅读器
                PdfReader读卡器=新PdfReader(pdfStreams.ElementAt(0));
                //创建主文档
                文档=新的文件(Reader.GetPageSizeWithRotation(1));
                //创建主撰稿人
                PdfCopy作家=新PdfCopy(文档,OutStream);
                //写入打开文件
                Document.Open();
                //添加页面
                的addPages(Reader.NumberOfPages,读卡器,裁判作家);

                //对于后第一次每增加PDF将它们组合成主文档
                的foreach(的MemoryStream PdfStream在pdfStreams.Skip(1))
                {
                    PdfReader Reader2 =新PdfReader(PdfStream);
                    //添加内容
                    的addPages(Reader2.NumberOfPages,Reader2,裁判作家);
                }
             }
             最后
             {
                 //第五步:关闭文档
                 如果(文件!= NULL)
                     Document.Close();

                的foreach(在pdfStreams VAR STRM)
                {
                    尝试{如果(空= STRM!)Strm.Dispose(); } 抓住 { }
                }
             }

             返回OutStream;
         }

        私有静态无效的addPages(INT页,PdfReader读者,裁判PdfCopy作家)
        {
            PdfImportedPage页=无效;

            对于(INT X = 0,X<页面; X ++)
            {
                 页= writer.GetImportedPage(读者,X);
                 writer.AddPage(页);
            }

            如果(reader.AcroForm!= NULL)
                writer.CopyAcroForm(读卡器);
        }
 

解决方案

页码GetImportedPage是基于1的。因此:

 的for(int x = 1; X<网页+ 1; X ++)
{
    页= writer.GetImportedPage(读者,X);
    writer.AddPage(页);
}
 

I looked at a few examples online and came up with this code to merge pdfs using iTextSharp. But I am getting an error :.

{"The document has no pages."}

It fails at Page = writer.GetImportedPage(reader, X);

Here is stack trace :

 at iTextSharp.text.pdf.PdfPages.WritePageTree()
 at iTextSharp.text.pdf.PdfWriter.Close()
 at iTextSharp.text.pdf.PdfCopy.Close()
 at iTextSharp.text.Document.Close()

It has 3 pages when I debugged it. What is wrong here??

Here is my code

public static MemoryStream MergePdfs(List<MemoryStream> pdfStreams)
       {
        //Create output stream
           MemoryStream OutStream = new MemoryStream();
           Document Document = null;

           try
           {
                //Create Main reader
                PdfReader Reader = new PdfReader(pdfStreams.ElementAt(0));
                //Create Main Doc
                Document = new Document(Reader.GetPageSizeWithRotation(1));
                //Create main writer
                PdfCopy Writer = new PdfCopy(Document, OutStream);
                //Open document for writing
                Document.Open();
                //Add pages
                AddPages(Reader.NumberOfPages, Reader, ref Writer);

                //For each additional pdf after first combine them into main document
                foreach (MemoryStream PdfStream in pdfStreams.Skip(1))
                {
                    PdfReader Reader2 = new PdfReader(PdfStream);
                    // Add content
                    AddPages(Reader2.NumberOfPages, Reader2, ref Writer);
                }
             }
             finally
             {
                 // Step 5: Close the document
                 if (Document != null)
                     Document.Close();

                foreach (var Strm in pdfStreams)
                {
                    try { if (null != Strm) Strm.Dispose(); } catch { }
                }
             }

             return OutStream;
         }

        private static void AddPages(int Pages, PdfReader reader, ref PdfCopy writer)
        {
            PdfImportedPage Page = null;

            for (int X = 0; X < Pages; X++)
            {
                 Page = writer.GetImportedPage(reader, X);
                 writer.AddPage(Page);
            }

            if (reader.AcroForm != null)
                writer.CopyAcroForm(reader);
        }

解决方案

Page numbers for GetImportedPage are 1-based. Thus:

for (int X = 1; X < Pages + 1; X++)
{
    Page = writer.GetImportedPage(reader, X);
    writer.AddPage(Page);
}

这篇关于合并PDF文件iTextSharp的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆