Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--PDF预览器框选
项目地址:
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预览器框选的更多相关文章
- dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.
http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术 ...
- DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.
DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库. 它是轻量级的,不依赖任何其他类库(如JQuery)并且高度可定制. 试试看! 将文件拖至此处或点击上传.(这仅仅是 dropzo ...
- 【官方免费】Apple Silicon M1 + Parallels 16技术预览版 + Win 10 arm64
期待了好久,终于能用pd运行win10了,其实也就想写个c++,mac上配置个c++编译器太麻烦了.. 步骤: 打开 https://my.parallels.com/desktop/beta,这里下 ...
- 手把手教你用 Spring Boot搭建一个在线文件预览系统!支持ppt、doc等多种类型文件预览
昨晚搭建环境都花了好一会时间,主要在浪费在了安装 openoffice 这个依赖环境上(Mac 需要手动安装). 然后,又一步一步功能演示,记录,调试项目,并且简单研究了一下核心代码之后才把这篇文章写 ...
- 一个免费的、跨平台的、开源音频编辑器Audacity
Audacity 是一个免费的开源程序,用于编辑音频录制.它可在多个平台(windows/linux)上运行.Audacity 基于 GUI,是一个具有多种选项的强大程序.它支持您录制各种类型的声音. ...
- Caf.CMS是一个免费的、 开源,功能齐全的CMS
Caf.CMS(疯狂蚂蚁CMS) 是一个免费的. 开源,功能全面的CMS(内容管理系统).定位CMS也有点狭义呢,因为Caf.CMS是基于国外SmartStore.NET 开源商城源码的基础上改造而成 ...
- 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门
喜欢写Blog的人,会经历三个阶段. 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉得独立博客的管 ...
- 分享一个免费SSL证书申请网站,给网站开启https协议 | 张戈博客
这些天,由于公司的业务需求,接触到了ssl证书和https协议.博客前几篇文章也分享了在WEB服务器上安装SSL证书,为网站开启https协议的教程,感兴趣的童鞋可以前往查看相关文章: <Lin ...
- 一个免费的自动化跨平台测试JavaScript的工具——BrowserSwarm
BrowserSwarm是一个免费工具,能够自动化跨平台测试JavaScript.
- IETester是一个免费的Web浏览器调试工具
功能简介 IETester是一个免费的Web浏览器调试工具,可以模拟出不同的js引擎来帮助程序员设计效果统一的代码.IETester可以在独立的标签页中开启IE5.5.IE6.IE7以及最I新的IE8 ...
随机推荐
- 初始环境(centos7)
#!/bin/bash yum -y install wget #更换阿里源 下载epel源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d ...
- 【ToolChains】| CMake 技巧
判断 CMake 编译环境 编译类型 CMAKE_BUILD_TYPE 可取值为:Debug, Release, RelWithDebInfo, MinSizeRel 等预设值 if (CMAKE_B ...
- CF:706B. Interesting drink (二分查找)
题意:不同奶茶店里同样的奶茶价格不同,问在当天Yuki持有的零钱能在几家店购买 思路:对价格数组排序,先优先判断是否会比较最大值和最小值,然后二分查找 #include<bits/stdc++. ...
- Codeforce Problem 711A - Bus to Udayland (正则表达式)
https://codeforces.com/problemset/problem/711/A 正则表达式基本应用 #include<bits/stdc++.h> using namesp ...
- springboot+vue实现 下载服务端返回的文件功能
开发中会遇到,通过浏览器下载服务器端返回的文件功能,本文使用springboot+vue实现该功能. 后端代码: 注:后端返回的文件名遇到中文就会乱码,一直也没得到很好的解决方案,最后就统一返回1.x ...
- CSS3 ------- object-fit属性
做项目经常会遇到图片列表展示,图片一般是用户从后台上传的,上传的图片尺寸千差万别.如果前端不控制图片大小,整个排版就会很乱,如果给定长宽,图片又会变形,用背景图片来处理有特别麻烦.这个问题一直苦恼了我 ...
- Liunx运维(一)-命令行
一.命令行的开启与推出 1.exit 2.logout 3.ctrl+d 二.命令行提示符 1.#root用户 2.$普通用户 3.~当前用户所在的路径 4.全局配置文件: /etc/profil ...
- Deployment 和 StatefulSets 概述
这篇概述是看文章提到的一段话 xxx is not targeted to be horizontally scalable 引发的,遂整理记录在这里. 起因是有两个应用,一个是无状态的,可以 hor ...
- mysql之力扣数据库题目620有趣的电影优化记录
闲着没事儿刷刷力扣的数据库题目,题目编号620:有趣的电影,下面是题目描述: 优化前的sql及执行时间: 优化后的sql及执行时间: 这里对筛选条件进行了优化: 1.select * 的查找效率要比逐 ...
- Mygin实现动态路由
本篇是Mygin的第四篇 目的 使用 Trie 树实现动态路由解析. 参数绑定 前缀树 本篇比前几篇要复杂一点,原来的路由是用map实现,索引非常高效,但是有一个弊端,键值对的存储的方式,只能用来索引 ...