在 .NET 下使用 Pdfium 渲染和打印 PDF
在 .NET 下使用 Pdfium 渲染和打印 PDF
大家可能已经看到这条 新闻,Google最近又新推出一个开源项目,名叫 PDFium,将成为Chrome浏览器的PDF渲染引擎组件。与已有的开源PDF引擎如Firefox目前的PDF解决方案PDF.js以及 Poppler相比,PDFium性能要好得多。
本次开源是由Google方面主导的,因为Chrome里的PDF渲染使用的是福昕的专有技术授权,Google方面希望能够开源并提出了很好的条件。福昕从长远考虑,接受了Google的建议。
接下来,福昕仍然会继续投入技术力量支持PDFium的发展。我们已经在PDFium项目网站上看到Bo Xu等三名福昕工程师在 解决和解答各种问题。
官方的 API 文档:https://developers.foxitsoftware.com/resources/pdf-sdk/c_api_reference_pdfium/index.html
一个 PDF 版本的 Pdfium API 文档:http://cdn01.foxitsoftware.com/pub/foxit/manual/enu/FoxitPDF_SDK20_Guide.pdf
许可协议:Apache 2.0 见:https://pdfium.googlesource.com/pdfium/+/refs/heads/master/LICENSE
来源:https://www.csdn.net/article/2014-06-23/2820351-Why-Foxit-Open-Sourced-Core-PDF-technologies
Pdfium 库
Pdfium 本身是一个 C 语言库,编译之后是一个 DLL。
Google 下载
https://pdfium.googlesource.com/pdfium/
GitHub
https://github.com/chromium/pdfium
下载 Pdfium 二进制预编译库
可以直接使用预编译的库,既可以直接从 NuGet 中导入,也可以自己下载使用。
NuGet
下面这两个比较版本比较老。
https://www.nuget.org/packages/PdfiumViewer.Native.x86_64.no_v8-no_xfa/
Native 64-bit PDFium DLL without V8 or XFA support for usage with the PdfiumViewer project.
2018.4.8.256
https://www.nuget.org/packages/PdfiumViewer.Native.x86.no_v8-no_xfa/
Native 32-bit PDFium DLL without V8 or XFA support for usage with the PdfiumViewer project.
2018.4.8.256
GitHub
这个比较新
GitHub: https://github.com/bblanchon/pdfium-binaries
PdfiumViewer
由于 Pdfium 本身并不是 .NET 库,在 .NET 中使用时,需要进行适配,PdfiumViewer 对它进行了适配工作,可以使我们很方便地在 .NET 项目中使用它。
Introduction
PdfiumViewer is a PDF viewer based on the PDFium project.
- PdfiumViewer provides a number of components to work with PDF files:
- PdfDocument is the base class used to render PDF documents;
- PdfRenderer is a WinForms control that can render a PdfDocument;
PdfiumViewer 提供了一个 WinForms 控件,通过 PdfRenderer 控件进行渲染,提供了工具栏,可以支持保存到 PDF 文件或者打印到打印机。
PdfiumViewer is a WinForms control that hosts a PdfRenderer control and adds a toolbar to save the PDF file or print it.
项目:https://github.com/pvginkel/PdfiumViewer
NuGet: https://www.nuget.org/packages/PdfiumViewer/
参考
- https://www.foxitsoftware.com/blog/foxit-pdf-technology-chosen-for-google-open-source/
- https://www.foxitsoftware.com/blog/the-interesting-history-and-fascinating-future-of-pdf-software/
- https://github.com/chromium/pdfium/blob/master/public/fpdf_transformpage.h
- https://github.com/datalogics/adobe-pdf-library-samples/blob/master/DotNET/Sample_Source/Images/RasterizePage/RasterizePage.cs
- https://github.com/chromium/pdfium/blob/master/core/fpdfapi/page/cpdf_page.cpp
在 .NET 下使用 Pdfium 渲染和打印 PDF的更多相关文章
- PDFium 渲染
PDFium 是 Chromium 的 PDF 渲染引擎,许可协议为 BSD 3-Clause.不同于 Mozilla 基于 HTML5 的 PDF.js,PDFium 是基于 Foxit Softw ...
- word文档的生成、修改、渲染、打印,使用Aspose.Words
无需MS Word也可执行各种文档处理任务,包括文档的生成.修改.渲染.打印,文档格式转换和邮件合并等文档处理.
- -XX:-PrintClassHistogram 按下Ctrl+Break后,打印类的信息
-XX:+PrintClassHistogram –按下Ctrl+Break后,打印类的信息: num #instances #bytes class name ------ ...
- EOS下控制台以及图形界面打印sql语句
EOS下控制台以及图形界面打印sql语句 场景需求:在eos中打印sql语句,包括数据实体,查询实体和命名sql的sql语句. 所需资源: P6spy:负责拦截sql,并打印. Sqlprofiler ...
- Layui下拉选渲染
下拉选渲染有很多方式,这个比较简单,记录一下: HTML代码如下: <div class="layui-input-inline"> <input type=&q ...
- javaWeb项目springMVC框架下利用ITextpdf 工具打印PDF文件的方法(打印表单、插入图片)
方法一:打印PDF表单以及在PDF中加入图片 需要的资料: jar包:iTextAsian.jar ,itext-2.1.7.jar: 源码: public static void main(Stri ...
- C# 打印PDF文件之使用不同打印机打印所有页面或部分页面
C# 打印PDF文件之使用不同打印机打印所有页面或部分页面 最近在逛国外各大编程社区论坛的时候,发现很多人都在问一个关于PDF文件打印的问题:打印时如何选择非默认打印机并设置打印页面的范围.而一般情况 ...
- Winform 打印PDF顺序混乱,获取打印队列
工作中PDF打印顺序混乱着实让我疼痛了好久,其实决绝方法非常简单,但没有想到这个点子的时候确实让我走了很多弯路 这里文章写出来并不是为了炫耀什么,只是觉得发现些好东西就分享出来而已,同时也做个记录,方 ...
- 关于这两天研究Java打印pdf方法的记录
这两天在研究Java调用打印机打印PDF文件的方法,学到了不少东西,特别来记录一下. 关于Java打印网上最多的而且也是Java正统的打印方法就是使用PrintService,一套比較标准的打印代码例 ...
- PDFBox创建并打印PDF文件, 以及缩放问题的处理.
PDFBox带了一些很方便的API, 可以直接创建 读取 编辑 打印PDF文件. 创建PDF文件 public static byte[] createHelloPDF() { ByteArrayOu ...
随机推荐
- vector<char>转string的方法
要将 std::vector<char> 转换为 std::string,可以通过 std::string 的构造函数直接从 vector 中构建字符串. 假设 std::vector&l ...
- MMU和SMMU IOMMU使用场景和区别,SMMU技术与cache
1.各种MMU MMU是memory manage unit 内存管理单元: SMMU是system memory manage unit 系统内存管理单元: IOMMU和SMMU的功能基本相同,只是 ...
- eBPF 概述:第 2 部分:机器和字节码
1. 前言 我们在第 1 篇文章中介绍了 eBPF 虚拟机,包括其有意的设计限制以及如何从用户空间进程中进行交互.如果你还没有读过这篇文章,建议你在继续之前读一下,因为没有适当的介绍,直接开始接触机器 ...
- Java日期时间API系列20-----Jdk8中java.time包中的新的日期时间API类,ZoneId时区ID大全等。
Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格 ...
- vue 的常用指令以及作用 ·
1. v-model 多用于表单元素实现双向数据绑定(同 angular 中的 ng-model) 2. v-for 格式: v-for="字段名 in(of) 数组 json" ...
- LEAP: Learning to Prescribe Effective and Safe Treatment Combinations for Multimorbidity
LEAP: Learning to Prescribe Effective and Safe Treatment Combinations for Multimorbidity Authors: Yu ...
- Java开发23种设计模式(转)
[转载]https://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html 设计模式(Design Patterns) --可复用面 ...
- PHP中$GLOBALS和global的区别,简单了解符号表、zval
前言 单位里有一套老代码,写了这么一个换库逻辑. function conn() { global $conn; if ($conn) { unset($conn); } $conn = mysqli ...
- 使用 Cursor 和 Devbox 快速开发基于 Rust 的 WASM 智能合约
本教程以一个智能合约(使用 NEAR 的一个官方 Fungible Tokens 来实现)的例子来介绍一下 Devbox 的强大功能,轻松构建环境,轻松发布. NEAR 是一个去中心化的应用平台,使用 ...
- 4.7 Linux压缩文件或目录中文件为.bz2格式(bzip2命令)
bzip2 命令同 gzip 命令类似,只能对文件进行压缩(或解压缩),对于目录只能压缩(或解压缩)该目录及子目录下的所有文件.当执行压缩任务完成后,会生成一个以".bz2"为后缀 ...