itextsharp去掉PDF加密

在操作PDF文件时会遇到PDF文件加密了,不能操作的问题,从网络中查找资料一上午,鼓捣出如下的代码,可实现将已加密的PDF转化成未加密的PDF文件,纯代码,无需借助PDF解密软件,使用前需要导入如下引用,使用的itextsharp版本为5.5.9.0。

1 using iTextSharp.text.pdf;
2 using iTextSharp.text;
3 using System.IO;

 

复制代码
 1      /// <summary>
 2         /// 将去掉PDF的加密
 3         /// </summary>
 4         /// <param name="sourceFullName">源文件路径(如:D:\old.pdf)</param>
 5         /// <param name="newFullName">目标文件路径(如:D:\new.pdf)</param>
 6         private static void deletePDFEncrypt(string sourceFullName, string newFullName)
 7         {
 8             if (string.IsNullOrEmpty(sourceFullName) || string.IsNullOrEmpty(newFullName))
 9             {
10                 throw new Exception("源文件路径或目标文件路径不能为空或null.");
11             }
12             //Console.WriteLine("读取PDF文档");
13             try
14             {
15                 // 创建一个PdfReader对象
16                 PdfReader reader = new PdfReader(sourceFullName);
17                 PdfReader.unethicalreading = true;
18                 // 获得文档页数
19                 int n = reader.NumberOfPages;
20                 // 获得第一页的大小
21                 Rectangle pagesize = reader.GetPageSize(1);
22                 float width = pagesize.Width;
23                 float height = pagesize.Height;
24                 // 创建一个文档变量
25                 Document document = new Document(pagesize, 50, 50, 50, 50);
26                 // 创建该文档
27                 PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(newFullName, FileMode.Create));
28                 // 打开文档
29                 document.Open();
30                 // 添加内容
31                 PdfContentByte cb = writer.DirectContent;
32                 int i = 0;
33                 int p = 0;
34                 while (i < n)
35                 {
36                     document.NewPage();
37                     p++;
38                     i++;
39                     PdfImportedPage page1 = writer.GetImportedPage(reader, i);
40                     cb.AddTemplate(page1, 1f, 0, 0, 1f, 0, 0);
41                 }
42                 // 关闭文档
43                 document.Close();
44             }
45             catch (Exception ex)
46             {
47                 throw new Exception(ex.Message);
48             }
49         }
复制代码

使用代码转换之前PDF的属性如下图:

转换之后:

posted @   M&Fx  阅读(2457)  评论(3编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示