ITextSharp插件合并PDF文件并且给已存在的PDF文件添加页码添加水印

本文介绍如何利用ITextSharp库在C#中实现PDF文件的合并,并为已合并的PDF添加页码和水印。通过创建PDFControler类和PDFObj参数对象,实现了文件夹内PDF的批量处理功能。
摘要由CSDN通过智能技术生成

我的需求是:把文件夹的的PDF合成一个PDF文件,然后保存到指定文件,然后再根据这个指定文件(已存在的PDF文件),添加页码,添加水印

  1. 效果图
  2. 引用ITextSharp
  3. Main函数调用PDFControler方法的测试案例
  4. 创建一个操作PDF的类,类名:PDFControler
  5. 创建一个参数对象类,类名:PDFObj

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

    class Program
    {
   
        static void Main(string[] args)
        {
   
            //PDFControler类测试,首先你需要在E盘创建一个PDF文件夹,然后PDF文件夹里面存在PDF文件
            PDFController pDFControler = new PDFController();
            PDFObj myPDFObj = new PDFObj();
            myPDFObj.FooterFontSize = 15;
            //PDF合并,并添加页码
            pDFControler.PDFMergeAddPageNumbers(@"E:\PDF", @"C: \Users\Administrator\Desktop\CUIText.pdf", myPDFObj);
        }
    }
using System;
using System.IO;
using System.Linq;
using System.Text;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Collections.Generic;

    public class PDFController
    {
   
        public PDFController() {
    }

        /// <summary>
        /// 合并多个PDF文件并添加页码
        /// </summary>
        /// <param name="directoryPath">需要合并的PDF文件夹</param>
        /// <param name="outMergeFile">合并PDF文件之后保存的路径</param>
        public void PDFMergeAddPageNumbers(string directoryPath, string outMergeFile)
        {
   
            PDFMergeAddPageNumbers(directoryPath, outMergeFile, new PDFObj());
        }
        /// <summary>
        /// 合并多个PDF文件并添加页码
        /// </summary>
        /// <param name="directoryPath">需要合并的PDF文件夹</param>
        /// <param name="outMergeFile">合并PDF文件之后保存的路径</param>
        /// <param name="pdfObj">PDFObj对象</param>
        public void PDFMergeAddPageNumbers(string directoryPath, string outMergeFile, PDFObj pdfObj)
        {
   
            try
            {
   
                PDFMergeFiles(directoryPath, outMergeFile, pdfObj);
                PDFSetPageNumber(outMergeFile, pdfObj);
            }
            catch (Exception ex)
            {
   
                throw ex;
            }
        }

        /// <summary>
        /// 合并多个PDF文件为一个PDF文件
        /// </summary>
        /// <param name="directoryPath">需要合并的PDF文件夹</param>
        /// <param name="outMergeFile">合并PDF文件之后保存的路径</param>
        public void PDFMergeFiles(string directoryPath, string outMergeFile)
        {
   
            PDFMergeFiles(directoryPath, outMergeFile, new PDFObj());
        }
        /// <summary>
        /// 合并多个PDF文件为一个PDF文件
        /// </summary>
        /// <param name="directoryPath">需要合并的PDF文件夹</param>
        /// <param name="outMergeFile">合并PDF文件之后保存的路径</param>
        /// <param name="pdfObj">PDFObj对象</param>
        public void PDFMergeFiles(string directoryPath, string outMergeFile, PDFObj pdfObj)
        {
   
            try
            {
   
                List<string> fileList = new List<string>();
                DirectoryInfo PDFDirectoryPath = new DirectoryInfo(directoryPath);//获取PDF的文件夹
                FileInfo[] filePattern = PDFDirectoryPath.GetFiles("*.pdf");//获取文件夹里面的PDF类型的文件
                BubbleSort(filePattern);//按照时间排序,合并PDF
                foreach (FileInfo temp in filePattern)//把已经按照时间分类的PDF文件,获取文件地址放到list集合里面
                {
   
                    fileList.Add(directoryPath + "\\" + temp.Name);
                }

                MergePDFFiles(fileList, directoryPath, outMergeFile, pdfObj);
            }
            catch (Exception ex)
            {
   
                throw ex;
            }
        }
        /// <summary>
        /// 合并多个PDF文件为一个PDF文件
        /// </summary>
        /// <param name="fileList">需要合并的PDF集合</param>
        /// <param name="directoryPath">需要合并的PDF路径</param>
        /// <param name="outMergeFile">合并PDF之后保存的路径</param>
        /// <param name="pdfObj">PDFObj对象</param>
        private void MergePDFFiles(List<string> fileList,string directoryPath, string outMergeFile, PDFObj pdfObj)
        {
   
            PdfReader reader = null;
            List<PdfReader> readers = new List<PdfReader>();
            FileStream fileStream = new FileStream(outMergeFile, FileMode.Create);
            Document document=new Document(PageSize.A4);
            try
            {
   
                Rectangle pdfSize = PageSize.A4;
                if (pdfObj.PdfWidth != 0 && pdfObj.PdfHeight != 0)
                {
   
                    pdfSize = new Rectangle(pdfObj.PdfWidth, pdfObj.PdfHeight);
                }
                else
                {
   
                    if (pdfObj.pdfPagetype == PDFObj.PdfPageType.Default)
                    {
   
                        Rectangle size = GetExistPDFFilePageSize(directoryPath);
                        pdfSize = new Rectangle(size.Width, size.Height);
                    }
                    else
                    {
   
                        Rectangle size = GetPageSize(pdfObj);
                        pdfSize = new Rectangle(size.Width, size.Height);
                    }
                }
                document = new Document(pdfSize);
                PdfWriter writer = PdfWriter.GetInstance(document, fileStream);//获取实例,该实例指定高宽的PDF,并创建了写入PDF的方法,已获取PDF的路径,然后新建写入文本
                document.Open();//实例化指定高宽的PDF页,然后打开
                PdfContentByte cb = writer.DirectContent;//对指定PDF文件(合并所有PDF的文件)写入内容
                PdfImportedPage newPage;
                for (int i = 0; i < fileList.Count; i++)//循环PDF集合
                {
   
                    reader = new PdfReader(fileList[i]);//获取单个PDF文件比如文件310.pdf
                    int iPageNum = reader.NumberOfPages;//获取PDF的页数
                    for (int j = 1; j <= iPageNum; j++)//循环获取单个PDF的具体页
                    {
   
                        document.NewPage();//添加PDF具体页
                        newPage = writer.GetImportedPage(reader, j);//获取是哪个的那页
                        cb.AddTemplate(newPage, pdfObj.PdfXMargin, pdfObj.PdfYMargin);//往文件中添加PDF页,X Y值,是页边距,控制PDF表格的位置
                    }
                    readers.Add(reader);
                }
            }
            catch (Exception ex)
            {
   
                throw ex;
            }
            finally
            {
   
                document.Close();

                fileStream.Close();
                for (int i = 0; i < readers.Count; i++)
                    readers[i].Close();
            } 
        }

        /// <summary>
        /// PDF文件添加页码的方法
        /// </summary>
        /// <param name="outMergeFile">PDF添加页码之后保存的路径</param>
        public void PDFSetPageNumber(string outMergeFile)
        {
   
            PDFSetPageNumber(outMergeFile, new PDFObj());
        }
        /// <summary>
        /// PDF文件添加页码的方法
        /// </summary>
        /// <param name="outMergeFile">PDF添加页码之后保存的路径</param>
        /// <param name="pdfObj">PDFObj对象</param>
        public void PDFSetPageNumber(string outMergeFile, PDFObj pdfObj)
        {
   
            PdfReader pdfReader = null;
            PdfStamper pdfStamper = null;
            string tempPath = Path.GetDirectoryName(outMergeFile) + "\\" + Path.GetFileNameWithoutExtension(outMergeFile) + "_temp.pdf";
            try
            {
   
                BaseColor baseColor = GetPageNumberColor(pdfObj);
                pdfReader = new PdfReader(outMergeFile);
                pdfStamper = new PdfStamper(pdfReader, new FileStream(tempPath, FileMode.Create
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值