一个PDF合并操作实现类,利用iTextSharp控件实现

http://blog.csdn.net/yinshuhai/article/details/3042702


using iTextSharp.text;

using iTextSharp.text.pdf;

/// <summary>

    /// pdf文件合并处理类

    /// </summary>

    class PDFMergeManager

    {

        private PdfWriter pw;

        private PdfReader reader;       

        private Document document;

        private PdfContentByte cb;

        private PdfImportedPage newPage;

        /// <summary>

        /// 通过输出文件来构建合并管理,合并到新增文件中,合并完成后调用FinishedMerge方法

        /// </summary>

        /// <param name="sOutFiles"></param>

        public PDFMergeManager(string sOutFiles)

        {

            document = new Document(PageSize.A3);         

            if (File.Exists(sOutFiles) && !MessageHelper.ShowQuestion("对应的文件已经存在,文件目录:/r/n "+sOutFiles+"/r/n是否覆盖该文件?"))

            {

                document = null;

                throw new IOException("用户取消操作");                

            }

            pw = PdfWriter.GetInstance(document, new FileStream(sOutFiles, FileMode.Create));

            document.Open();

            cb = pw.DirectContent;

        }       

        /// <summary>

        /// 通过文件流来合并文件,合并到当前的可写流中,合并完成后调用FinishedMerge方法

        /// </summary>

        /// <param name="sm"></param>

        public PDFMergeManager(Stream sm)

        {

            document = new Document();

            pw = PdfWriter.GetInstance(document, sm);            

            document.Open();

            cb = pw.DirectContent;

        }

        /// <summary>

        /// 合并文件

        /// </summary>

        /// <param name="sFiles">需要合并的文件路径名称</param>

        /// <returns></returns>

        public bool MergeFile(string sFiles)

        {

            reader = new PdfReader(sFiles);           

            {

                int iPageNum = reader.NumberOfPages;

                for (int j = 1; j <= iPageNum; j++)

                {

                    

                    newPage = pw.GetImportedPage(reader, j);

                    Rectangle r = reader.GetPageSize(j);

                    document.SetPageSize(r);

                    document.NewPage();

                    cb.AddTemplate(newPage, 0, 0);                    

                }

               

            }

            reader.Close();            

            return true;

        }

        /// <summary>

        /// 通过字节数据合并文件

        /// </summary>

        /// <param name="pdfIn">PDF字节数据</param>

        /// <returns></returns>

        public bool MergeFile(byte[] pdfIn)

        {

            reader = new PdfReader(pdfIn);

            {

                int iPageNum = reader.NumberOfPages;

                for (int j = 1; j <= iPageNum; j++)

                {

 

                    newPage = pw.GetImportedPage(reader, j);

                    Rectangle r = reader.GetPageSize(j);

                    document.SetPageSize(r);

                    document.NewPage();

                    cb.AddTemplate(newPage, 0, 0);

                }

 

            }

            reader.Close();

            return true;

        }

        /// <summary>

        /// 通过PDF文件流合并文件

        /// </summary>

        /// <param name="pdfStream">PDF文件流</param>

        /// <returns></returns>

        public bool MergeFile(Stream pdfStream)

        {

            reader = new PdfReader(pdfStream);

            {

                int iPageNum = reader.NumberOfPages;

                for (int j = 1; j <= iPageNum; j++)

                {

 

                    newPage = pw.GetImportedPage(reader, j);

                    Rectangle r = reader.GetPageSize(j);

                    document.SetPageSize(r);

                    document.NewPage();

                    cb.AddTemplate(newPage, 0, 0);

                }

 

            }

            reader.Close();

            return true;

        }

        /// <summary>

        /// 通过网络地址来合并文件

        /// </summary>

        /// <param name="pdfUrl">需要合并的PDF的网络路径</param>

        /// <returns></returns>

        public bool MergeFile(Uri pdfUrl)

        {

            reader = new PdfReader(pdfUrl);

            {

                int iPageNum = reader.NumberOfPages;

                for (int j = 1; j <= iPageNum; j++)

                {

 

                    newPage = pw.GetImportedPage(reader, j);

                    Rectangle r = reader.GetPageSize(j);

                    document.SetPageSize(r);

                    document.NewPage();

                    cb.AddTemplate(newPage, 0, 0);

                }

 

            }

            reader.Close();

            return true;

        }

        /// <summary>

        /// 完成合并

        /// </summary>

        public void FinishedMerge()

        {

            try

            {

                if (reader != null)

                {

                    reader.Close();

                }

                if (pw != null)

                {

                    pw.Flush();

                    pw.Close();

                }

                if (document.IsOpen())

                {

                    document.Close();

                }

            }

            catch

            {

 

            }

        }        

    }

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值