zoukankan      html  css  js  c++  java
  • C#实现多个PDF合并及去除文字水印功能

    实现pdf合并就是使用Spire.Pdf.dll类库的方法,但是注意需要同时引用Spire.Pdf.dll和Spire.License.dll两个类库,且两个类库的版本要一致

     String[] files = new String[Dir.GetFiles().Length];
                    int i = 0;
                    foreach (FileInfo f in Dir.GetFiles()) //循环文件
                    {
                        files[i] = f.FullName;
                        i = i + 1;
                    }
     string outputFile = newPathDir + "\" + Dir.Name+".pdf";//输出的路径
                        PdfDocumentBase doc =Spire.Pdf.PdfDocument.MergeFiles(files);
                        doc.Save(outputFile, FileFormat.PDF);
                        //System.Diagnostics.Process.Start(outputFile);//打开文件

    但是使用spire的话合并成的pdf第一页会出现文字水印,这并不是我们要的,所以需要去除这个文字水印,那么就要用到iTextSharp.text.pdf.dll类库

     PRStream stream;
                String content;
                PdfArray contentarray;
                string watermarkText = "要去除的水印文字";
                PdfReader reader2 = new PdfReader(path);
                reader2.RemoveUnusedObjects();
                PdfDictionary page = reader2.GetPageN(1);//获取第一页
                contentarray = page.GetAsArray(PdfName.CONTENTS);
                if (contentarray != null)
                {
                    //Loop through content
                    for (int j = 0; j < contentarray.Size; j++)
                    {
                        //Get the raw byte stream
                        stream = (PRStream)contentarray.GetAsStream(j);
                        //Convert to a string. NOTE, you might need a different encoding here
                        content = System.Text.Encoding.ASCII.GetString(PdfReader.GetStreamBytes(stream));//获取pdf页内的文字内容
                        //Look for the OCG token in the stream as well as our watermarked text
                        if (content.IndexOf("/OC") >= 0 || content.IndexOf(watermarkText) >= 0)//如果pdf内容包含水印文字
                        {
                            //Remove it by giving it zero length and zero data
                            content= content.Replace(watermarkText, "");//替换水印文字为空
                            byte[] byteArray = System.Text.Encoding.Default.GetBytes(content);//转换为byte[]
                            stream.Put(PdfName.LENGTH, new PdfNumber(byteArray.Length));//重新指定大小
                           
                            stream.SetData(byteArray);//重新赋值
                        }
                    }
                }
                FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None);
                PdfStamper stamper = new PdfStamper(reader2, fs);
                //stamper.SetFullCompression();
                if (stamper != null) {
                    stamper.Close();
                }
                
                if (null != fs)
                {
                    fs.Close();
                }
    
                if (null != reader2)
                {
                    reader2.Close();
                }

    对,就是这么简单

  • 相关阅读:
    Linux服务器程序规范化
    Linux I/O函数
    IP协议详解
    Linux C++ 连接 MySQL
    I/O复用
    Linux网络编程基础API
    TCP协议详解
    React源码解携(二): 走一趟render流程
    记账项目 webpack优化
    前端监控系统博客总结
  • 原文地址:https://www.cnblogs.com/taleche/p/9373490.html
Copyright © 2011-2022 走看看