前言:

PdfiumViewer github上是这样介绍的:

PdfiumViewer 是一个基于 PDFium 项目的 PDF 查看器。

PdfiumViewer 提供了许多组件来处理 PDF 文件:

  • PdfDocument 是用于呈现 PDF 文档的基类;

  • PdfRenderer 是一个可以呈现 PdfDocument 的 WinForms 控件;

  • PdfiumViewer 是一个 WinForms 控件,它托管一个 PdfRenderer 控件并添加一个工具栏来保存 PDF 文件或打印它。

PdfiumViewer:https://github.com/pvginkel/PdfiumViewer

PDFium:https://pdfium.googlesource.com/pdfium/

由于PdfiumViewer开发者初衷是为了渲染pdf,所以一些基本的功能可能需要进行扩展来满足需求,我根据项目需要,查询了一些其他开发者的代码及PDFium源码对PdfiumViewer进行了一些扩展。

PdfiumViewerDemo

提取指定Rectangle的pdf的内容

var document = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(fileName)));
for (int i = 0; i < document.PageCount; i++)
{//获取当前页所有文本var txt = document.GetPdfText(i);//获取当前页指定坐标的文本txt= document.GetBoundedText(i, 690, 548, 808, 569);
}

坐标可通过demo工具提前获取,方法:选中Matching=》框选所需区域即可,示例如下图

预览时复制内容

渲染pdf时有时需要复制选中的文字

pdfViewer1.Document?.Dispose();
pdfViewer1.Document = PdfDocument.Load(this, new MemoryStream(File.ReadAllBytes(fileName)));
pdfViewer1.Renderer.CursorMode = PdfViewerCursorMode.TextSelection;

根据指定Rectangle截取pdf图片

坐标可通过demo工具提前获取,方法:选中Cut=》框选所需区域即可,示例如下图

 var document= PdfDocument.Load(this, new MemoryStream(File.ReadAllBytes(fileName))); using (var image = document.Render(i,(int)document.PageSizes[i].Width,(int)document.PageSizes[i].Height,rectangle.X, // x of the top/left of clipping rectanglerectangle.Y, // y of the top/left point of clipping rectanglerectangle.Width, // width of clipping reactanglerectangle.Height, // height of clipping reactanglePdfRotation.Rotate0, // no rotationPdfRenderFlags.None // no render flags)){image.Save(Path.Combine(path, "Page " + i + "Cut.png"));}

合并pdf

先读取pdf到内存然后合并doc2、doc3、doc4到doc1后

 var doc1 = PdfDocument.Load(this, new MemoryStream(File.ReadAllBytes(@"C:\Users\11\Desktop\1.pdf")));var doc2 = PdfDocument.Load(this, new MemoryStream(File.ReadAllBytes(@"C:\Users\11\Desktop\2.pdf")));var doc3 = PdfDocument.Load(this, new MemoryStream(File.ReadAllBytes(@"C:\Users\11\Desktop\2.pdf")));var doc4 = PdfDocument.Load(this, new MemoryStream(File.ReadAllBytes(@"C:\Users\11\Desktop\3.pdf")));var bytes = doc1.PDFMerge(doc2, doc3, doc4);File.WriteAllBytes(@"C:\Users\11\Desktop\11.pdf", bytes);

拆分pdf

可才分某一页或者拆分某几页

 //拆分文件
var bytes = pdfViewer1.Document.GetPage(1);
var bytes1 = pdfViewer1.Document.GetPage("1-2");
File.WriteAllBytes(@"C:\Users\11\Desktop\11.pdf", bytes);

后台打印pdf

打印pdf组件是自带的 但是有时候是不需要选择打印机打印的

var printer = new PdfPrinter("Microsoft Print To PDF");
//printer.Print(fileName);printer.Print(fileName, documentName: "with name");

PdfiumViewer组件扩展相关推荐

  1. DLUX组件扩展下篇-实践

    一.文章目标 1.1目标 随着SDN技术的逐步成熟,大量的传统数通厂家和新型的IT厂家,都投入了一定的人员进行相关的产品技术预研.而ODL作为SDN控制器的主要开源项目,自然也成了多数人学习和搭建模拟 ...

  2. 基于log4net的日志组件扩展封装,实现自动记录交互日志 XYH.Log4Net.Extend(微服务监控)...

    背景: 随着公司的项目不断的完善,功能越来越复杂,服务也越来越多(微服务),公司迫切需要对整个系统的每一个程序的运行情况进行监控,并且能够实现对自动记录不同服务间的程序调用的交互日志,以及通一个服务或 ...

  3. Firefox - 附加组件 - 扩展 - Firebug - 更新 - 1.2.0b15

    Firefox - 附加组件 - 扩展 - Firebug - 更新 - 1.2.0b15 * Suspend feature 禁用特性 * Display which tabs have fireb ...

  4. extjs6 基础组件扩展和自定义组件封装--02目录结构

    博客主要围绕核心扩展讲解. 1.overrides                            继承ext组件扩展自定义方法. 2.plugin                        ...

  5. layui树组件(扩展为带有图标的layui树组件)

    项目场景: 说起来layui前端框架,做后端开发的也是再熟悉不过了,模块开发,友好的UI界面,对前端后端人员都十分友好,当然,文档和示例也算是相当完备了.但是在开发项目时会遇到这样一种情况,就是想实现 ...

  6. element ui table组件扩展关于列表编辑按钮的位置放置

    最近在用vue做项目,主要是用的element ui的组件,在用的过程中发现有部分组件需要扩展,改源码太折腾,成本高,就想着如何节省成本来实现这些需求,由于项目时间紧张,有些实现来也没来得及记录一下, ...

  7. flutter 一直loading_开源 | FLUI : Flutter 的组件扩展集

    在使用 Flutter 的过程中,总是不断的在与组件打交道,虽然 Flutter 官方已经有极为丰富的 Material Design 以及 iOS 风格的组件集合,但我们也需要不断的抽象,组合出一些 ...

  8. JUC组件扩展(二)-JAVA并行框架Fork/Join(四):监控Fork/Join池

    Fork/Join 框架是为了解决可以使用 divide 和 conquer 技术,使用 fork() 和 join() 操作把任务分成小块的问题而设计的.主要实现这个行为的是 ForkJoinPoo ...

  9. ElementUI上传组件扩展--重新上传

    前言:在做商城类后台时,避免不了需要使用图片上传组件,然而如果你使用了elementUI,那么恭喜你,你将不能处理,多图片上传后更改其中图片顺序问题,elementUI提供的照片墙和文件缩略图都未提供 ...

最新文章

  1. [POJ1330 Nearest Common Ancestors]
  2. 对于Eclipse的正确用法
  3. 性能再提升70%?大咖前瞻带你揭开.NET6的神秘面纱!
  4. 在CF卡上实现TrueFFS
  5. 进阶12 多线程、等待唤醒机制、线程池
  6. 请求并操作指定url处的xml文件
  7. Atitti. 语法树AST、后缀表达式、DAG、三地址代码
  8. JavaScript判断数组的方法
  9. excel冻结行和列_说一说有些人在EXCEL中还不会用的冻结窗格
  10. Maze CodeForces - 377A
  11. js原生实现图片爆炸效果
  12. 仿支付宝实现密码框输入
  13. 软考高项 : (22)2016年下半年论文写作真题
  14. 多重共线性:python中利用statsmodels计算VIF和相关系数消除共线性
  15. 史上最全的大数据入门手册!
  16. logstash 日志_面试和书评:LogStash书,使日志管理变得容易
  17. 为什么优秀的管理者不能显得自己太能干?
  18. 基于Java实现的新冠肺炎疫情实时动态地图
  19. Tomcat解决中文乱码
  20. 我的时间管理之一 ——做好规划

热门文章

  1. 干货 | 实验室信息管理系统LIMS六大特点
  2. 有哪些软件可以支持批量改尺寸?
  3. 这10个Python项目超有趣!
  4. 增量本构模型和全量本构模型
  5. 助力5G基站建设的多功能智慧灯杆,启扬智能硬件解决方案
  6. 开发和部署Pocket Pc 安装程序
  7. 絮叨絮叨关于机房的点滴
  8. quartz集群模式任务触发分析(二)
  9. AI文件怎样转为cdr格式文件(二)
  10. 【小毛驴的絮叨】笔记帮你做时间管理