C#-使用iTextSharp合并PDF,并且增加页码

老大说准备将Aspose换成iTextSharp,于是为了实现这么两个功能,其实不难,但由于本人的编程功底浅,费了老大的劲,终于将它实现!
接下来我讲贴出代码,并附有解释,欢迎善意的指导,我将潜心改进!
**第一,我将需要合并的PDF文件放到List<string>集合中,再以文件的形式循环读取到List<PdfReader>.我这么做虽然会显得繁琐,但是会避免类似“文件...正在被另一个进程使用”的异常!我是深受其害呀!**
List<string> pdfList = new List<string>();
pdfList.Add(“PDF文件路径”);
if (pdfList != null && pdfList.Count > 0)
        {
            List<PdfReader> documents = new List<PdfReader>();
            foreach (string n in pdfList)
            {
                using (System.IO.FileStream stream = new System.IO.FileStream(n,System.IO.FileMode.Open,System.IO.FileAccess.Read))
                {
                    PdfReader reader = new PdfReader(stream);
                    pageNumber += reader.NumberOfPages;
                    documents.Add(reader);
                }
            }
        }
**第二,接下来就可以进行合并和增加页码!**
        /// <summary>
    /// 合并PDF,并且增加页码
    /// </summary>
    /// <param name="documents">PDF文件集合</param>
    /// <param name="outputStream">合并之后的PDF</param>
    /// <param name="startPageNum">从哪一页开始增加页码</param>
    public void Merge(List<PdfReader> documents, System.IO.Stream outputStream,int startPageNum)
    {

        int rotation = 0;
        if (outputStream == null || !outputStream.CanWrite)
        {
            throw new Exception("Output Stream is null or readonly.");
        }
        Document newDocument = null;
        try
        {
            //页码的样式
            BaseFont bfHei = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font font = new Font(bfHei, 8);
            //开始增加页码的页数
            int num = 0;
            newDocument = new Document();
            PdfWriter pdfWriter = PdfWriter.GetInstance(newDocument, outputStream);
            //pdfWriter.SetPageAction
            if (outputStream.GetType() == typeof(System.IO.FileStream))
            {
                pdfWriter.CloseStream = true;
            }
            else
            {
                pdfWriter.CloseStream = false;
            }
            newDocument.Open();
            PdfContentByte pdfContentByte = pdfWriter.DirectContent;
            foreach (PdfReader pdi in documents)
            {
                PdfReader pdfReader = pdi;
                int iPageNum = pdfReader.NumberOfPages;
                for (int j = 1; j <= iPageNum; j++)
                {
                    num++;
                    newDocument.SetPageSize(pdfReader.GetPageSizeWithRotation(j));
                    newDocument.NewPage();
                    PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader, j);
                    rotation = pdfReader.GetPageRotation(j);
                    pdfContentByte.AddTemplate(importedPage, 0, 0);

                    if (num > startPageNum)
                    {
                        //增加页码
                        Phrase header = new Phrase("第" + (pdfWriter.PageNumber - startPageNum )+ "页", font);
                        //页脚显示的位置
                        ColumnText.ShowTextAligned(pdfWriter.DirectContent, Element.ALIGN_CENTER, header,
                        newDocument.PageSize.Width / 2, newDocument.Bottom, 0);
                    }
                }
            }

        }
        finally
        {
            if (outputStream != null)
            {
                outputStream.Flush();
            }
            if (newDocument != null)
            {
                newDocument.Close();
            }
        }
    }

这就实现这两个功能的全部代码,如果能帮到哪位同仁,是我的荣幸!还有,本人也是一个菜鸟,如果在代码的逻辑上有什么不足,欢迎提出建议!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值