PdfiumViewer组件扩展(Pdfium.Net.Free)--可视化编辑pdf
1.PdfiumViewer组件扩展(Pdfium.Net.Free)--概述2.PdfiumViewer组件扩展(Pdfium.Net.Free)--快速入门3.PdfiumViewer组件扩展(Pdfium.Net.Free)--PDF预览器框选4.PdfiumViewer组件扩展(Pdfium.Net.Free)--打开大文件处理5.PdfiumViewer组件扩展(Pdfium.Net.Free)--加载字体6.PdfiumViewer组件扩展(Pdfium.Net.Free)--创建字符子集7.PdfiumViewer组件扩展(Pdfium.Net.Free)--添加文本8.PdfiumViewer组件扩展(Pdfium.Net.Free)--添加图片9.PdfiumViewer组件扩展(Pdfium.Net.Free)--添加水印10.PdfiumViewer组件扩展(Pdfium.Net.Free)--删除或编辑pdf内容11.PdfiumViewer组件扩展(Pdfium.Net.Free)--PDF操作12.PdfiumViewer组件扩展(Pdfium.Net.Free)--签名13.PdfiumViewer组件扩展(Pdfium.Net.Free)--注解
14.PdfiumViewer组件扩展(Pdfium.Net.Free)--可视化编辑pdf
15.什么是转换矩阵以及如何使用它16.Pdfium.Net.Free 添加 bblanchon.PDFium nuget方式Pdfium.Net.Free 支持
-
.NETFramework 4.0
-
.NETFramework 4.5
-
.NETStandard 2.0
- .Net8.0
可以和PdfiumViewer.Free共同使用预览pdf,也可以直接引用Pdfium.Net.Free 操作pdf,解决部分.NetCore 调用的问题,Pdfium.Net.Free封装了现有Pdfium的函数,实现了部分操作pdf的功能,部分功能等待后续~~
项目地址:
Pdfium.Net:https://github.com/1000374/Pdfium.Net.Free
PdfiumViewer:https://github.com/1000374/PdfiumViewer
操作pdf对象
- 获取PdfPageobject对象
- 把操作转换成矩阵
- 生成pdf页内容
转换矩阵请查看:什么是转换矩阵以及如何使用它
获取pdf对象:
var infos = new List<ObjectInformation>(); var count = page.GetObjectsCount(); for (int j = 0; j < count; j++) { var obj = page.GetObject(j); GetObject(obj, infos, i, new List<int> { j }, page.PageText); } private void GetObject(PdfPageobject obj, List<ObjectInformation> infos, int ipage, List<int> objIndex, PdfTextpage textpage) { if (!obj.IsNull) { var objType = obj.PageObjGetObjType(); var rect = obj.PageObjGetBounds().ToRectangle(); var cainfo = new ObjectInformation(ipage, obj, objIndex, objType, rect); var sunObjCount = obj.FormObjCountObjects(); if (sunObjCount > 0) { cainfo.SubObjectInformations = new List<ObjectInformation>(); for (int sub = 0; sub < sunObjCount; sub++) { var subObj = obj.FormObjGetObject(sub); var indexs = new List<int>(objIndex); indexs.Add(sub); GetObject(subObj, cainfo.SubObjectInformations, ipage, indexs, textpage); } } if (_isEditMinimum) { if (cainfo.PageObjType == PdfPageObjType.Text || cainfo.PageObjType == PdfPageObjType.Image || cainfo.SubObjectInformations?.Count > 0) infos.Add(cainfo); } else { infos.Add(cainfo); } } }
把操作转换成矩阵
var obj = _currObjectInformation.PdfPageobject; var matrix = obj.PageObjGetMatrix(); bool res = false; switch (_cursorMode) { case PdfViewerCursorMode.Move: { res = obj.SetMatrix(1, 0, 0, 1, width, -height); break; } case PdfViewerCursorMode.LeftTop: { res = obj.SetMatrix(1 - width / matrix.A, 0, 0, 1 - height / matrix.D, width, 0); break; } case PdfViewerCursorMode.Top: { res = obj.SetMatrix(1, 0, 0, 1 - height / matrix.D, 0, 0); break; } case PdfViewerCursorMode.RightTop: { res = obj.SetMatrix(1 + width / matrix.A, 0, 0, 1 - height / matrix.D, 0, 0); break; } case PdfViewerCursorMode.Right: { res = obj.SetMatrix(1 + width / matrix.A, 0, 0, 1, 0, 0); break; } case PdfViewerCursorMode.RightBottom: { res = obj.SetMatrix(1 + width / matrix.A, 0, 0, 1 + height / matrix.D, 0, -height); break; } case PdfViewerCursorMode.Bottom: { res = obj.SetMatrix(1, 0, 0, 1 + height / matrix.D, 0, -height); break; } case PdfViewerCursorMode.LeftBottom: { res = obj.SetMatrix(1 - width / matrix.A, 0, 0, 1 + height / matrix.D, width, -height); break; } case PdfViewerCursorMode.Left: { res = obj.SetMatrix(1 - width / matrix.A, 0, 0, 1, width, 0); break; } case PdfViewerCursorMode.Rotation: { var angle = 90 - CharacterHelper.Direction(width, -height); _currObjectInformation.DirectionEnd = point2.Location; double angleValue = (angle / 180.0d) * Math.PI; res = obj.SetMatrix((float)Math.Cos(angleValue), (float)-Math.Sin(angleValue), (float)Math.Sin(angleValue), (float)Math.Cos(angleValue), 0, 0); break; } default: break; }
生成pdf页内容
var page = Document.Pages[_currObjectInformation.Page]; if (page.GenerateContent()) {}
效果
1.编辑文字和图像(图片缩放、移动,文字编辑、移动)
2.删除文字和图像
3.操作完成后保存pdf
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)