项目地址:

Pdfium.Net:https://github.com/1000374/Pdfium.Net

PdfiumViewer:https://github.com/1000374/PdfiumViewer

框选PDF坐标及区域内文字:

关键代码:

//选中区域的坐标转成相对于pdf的坐标 
var point1 = this.PointToPdf(new Point(_currRect.X, _currRect.Y));
var point2 = this.PointToPdf(e.Location);
int x = (int)point1.Location.X;
int y = (int)point2.Location.Y;
int x1 = (int)point2.Location.X;
int y1 = (int)point1.Location.Y;
var txt = this.Document.Pages[Page].GetBoundedText(x, y, x1, y1);
_currRect = Rectangle.Empty;
if (Math.Abs(x1 - x) * Math.Abs(y1 - y) == 0)//相当与未框选有效区域
return;
BoundedTextHandler?.Invoke(Page, x, y, x1, y1, txt, true);

截取pdf指定区域的图片:

关键代码:

//选中区域的坐标转成相对于pdf的坐标 
 var point1 = this.PointToPdf(new Point(_currRect.X, _currRect.Y));
var point2 = this.PointToPdf(e.Location); var bound = Document.Pages[Page].PageSize;
var rect = new Rectangle();
var x = (int)point1.Location.X;
var y = (int)Math.Abs(bound.Height - point1.Location.Y);
var x1 = (int)point2.Location.X;
var y1 = (int)Math.Abs(bound.Height - point2.Location.Y); rect.X = Math.Min(x, x1);
rect.Y = Math.Min(y, y1);
rect.Width = Math.Abs(x1 - x);
rect.Height = Math.Abs(y1 - y);
_currRect = Rectangle.Empty;
if (Math.Abs(x1 - x) * Math.Abs(y1 - y) == 0)//相当与未框选有效区域
return; var image = Document.Render(
Page,
(int)Document.Pages[Page].Width,
(int)Document.Pages[Page].Height,
rect.X, // x of the top/left of clipping rectangle
rect.Y, // y of the top/left point of clipping rectangle
rect.Width, // width of clipping reactangle
rect.Height, // height of clipping reactangle
_cutDpiX,
_cutDpiY,
FpdfRotation.Rotate0, // no rotation
RenderFlags.None // no render flags
);
BoundedCutHandler?.Invoke(Page, rect, image);

  

转换出来的效果:

Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--PDF预览器框选的更多相关文章

  1. dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

    http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术 ...

  2. DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

    DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库. 它是轻量级的,不依赖任何其他类库(如JQuery)并且高度可定制. 试试看! 将文件拖至此处或点击上传.(这仅仅是 dropzo ...

  3. 【官方免费】Apple Silicon M1 + Parallels 16技术预览版 + Win 10 arm64

    期待了好久,终于能用pd运行win10了,其实也就想写个c++,mac上配置个c++编译器太麻烦了.. 步骤: 打开 https://my.parallels.com/desktop/beta,这里下 ...

  4. 手把手教你用 Spring Boot搭建一个在线文件预览系统!支持ppt、doc等多种类型文件预览

    昨晚搭建环境都花了好一会时间,主要在浪费在了安装 openoffice 这个依赖环境上(Mac 需要手动安装). 然后,又一步一步功能演示,记录,调试项目,并且简单研究了一下核心代码之后才把这篇文章写 ...

  5. 一个免费的、跨平台的、开源音频编辑器Audacity

    Audacity 是一个免费的开源程序,用于编辑音频录制.它可在多个平台(windows/linux)上运行.Audacity 基于 GUI,是一个具有多种选项的强大程序.它支持您录制各种类型的声音. ...

  6. Caf.CMS是一个免费的、 开源,功能齐全的CMS

    Caf.CMS(疯狂蚂蚁CMS) 是一个免费的. 开源,功能全面的CMS(内容管理系统).定位CMS也有点狭义呢,因为Caf.CMS是基于国外SmartStore.NET 开源商城源码的基础上改造而成 ...

  7. 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门

    喜欢写Blog的人,会经历三个阶段. 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉得独立博客的管 ...

  8. 分享一个免费SSL证书申请网站,给网站开启https协议 | 张戈博客

    这些天,由于公司的业务需求,接触到了ssl证书和https协议.博客前几篇文章也分享了在WEB服务器上安装SSL证书,为网站开启https协议的教程,感兴趣的童鞋可以前往查看相关文章: <Lin ...

  9. 一个免费的自动化跨平台测试JavaScript的工具——BrowserSwarm

    BrowserSwarm是一个免费工具,能够自动化跨平台测试JavaScript.

  10. IETester是一个免费的Web浏览器调试工具

    功能简介 IETester是一个免费的Web浏览器调试工具,可以模拟出不同的js引擎来帮助程序员设计效果统一的代码.IETester可以在独立的标签页中开启IE5.5.IE6.IE7以及最I新的IE8 ...

随机推荐

  1. expect --批量传递公钥

    #!/binbash ! rpm -qa |grep expect &> /dev/null && yum -y install expect #判断是否已下载expec ...

  2. C# 实用第三方库

    C# 实用第三方库 Autofac 依赖注入IOC框架 NuGet安装:Autofac.Autofac.Extras.DynamicProxy AutoMapper 对象映射 Mapster 对象映射 ...

  3. SpringBoot 项目实战 | 瑞吉外卖 Day05

    该系列将记录一份完整的实战项目的完成过程,该篇属于第五天 案例来自B站黑马程序员Java项目实战<瑞吉外卖>,请结合课程资料阅读以下内容 该篇我们将完成以下内容: 新增套餐 套餐信息分页查 ...

  4. Problem 1342B - Binary Period (思维)

    AC代码: #include<bits/stdc++.h> using namespace std; int main() { //freopen("in.txt", ...

  5. AtCoder Beginner Contest 199 游记(AB水题,C字符串操作,D搜索,E状压)

    A - Square Inequality 水题 B - Intersection 水题,就是找公共区间,维护一下 Lmax,Rmin即可 void solve() { int n, a, b; in ...

  6. 彻底搞懂 IO 底层原理

    武侠小说里有很多的"心法"和"招式".计算机技术里的"心法"和"招式"呢,我们可以简称为"道"和&q ...

  7. sprint-boot 存储图片的base64

    需求:将前端上传的图片转换成base64码发送到后端存储到数据库中(oracle或者mysql) 问题:当图片大小比较大(大概是超过1M)后端接收到的数据就会有错误. 解决方法:  sprint-bo ...

  8. <vue 路由 2、router-link标签属性>

    说明:在上一节的工程下继续讲解 一.     知识点说明 上一节中, <router-link>我们只是使用了一个属性: to, 用于指定跳转的路径.<router-link> ...

  9. C#设计模式04——工厂方法的写法

    1. What是C#工厂方法?C#工厂方法是一种设计模式,它通过创建具有相同基类的对象来实现代码的重用和灵活性. 2. Why使用C#工厂方法?使用C#工厂方法有以下好处:- 降低了代码的耦合性,让代 ...

  10. OpenShift image registry 访问镜像

    1. OpenShift 内部 image registry Openshift 自带内部 image registry,可通过 podman 实现 image 的 pull 和 push 操作. 对 ...