网站首页 > 技术文章 正文
在操作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的属性如下图:
转换之后:
猜你喜欢
- 2024-10-11 让我们了解HTTP(3) 现在基于http3有哪些应用
- 2024-10-11 如何在Java中将DOCX转换为PDF java实现docx转pdf
- 2024-10-11 字节跳动《Python项目开发实战》高清版 PDF 开放下载,简直神了
- 2024-10-11 牛!字节跳动《算法中文手册》火了,完整版 PDF 开放下载!
- 2024-10-11 字节跳动把python入门知识点整理成手册了,高清PDF开放下载
- 2024-10-11 字节大佬熬夜肝出的《Python知识手册》,高清pdf开放下载
- 2024-10-11 看了这份《算法中文手册》笔记,就再也不怕字节了
- 2024-10-11 字节跳动《算法中文手册》火了,完整版 PDF 开放下载!
- 2024-10-11 字节跳动《Python项目开发实战》高清版 PDF 开放下载
- 2024-10-11 Linux 内核 | 网络流量限速方案大 PK
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)