PdfiumViewer组件扩展(Pdfium.Net)

文章介绍了如何利用Pdfium.Net和PdfiumViewer库在C#环境下处理PDF文件,包括加载、渲染、复制文本、截取图像、合并PDF、拆分PDF以及后台打印等功能。还提到了对PdfiumViewer的扩展以满足特定需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

封装了一个Pdfium.Net 感兴趣的可以移步查看

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

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

前言:

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 rectangle
                   rectangle.Y, // y of the top/left point of clipping rectangle
                   rectangle.Width, // width of clipping reactangle
                   rectangle.Height, // height of clipping reactangle
                   PdfRotation.Rotate0, // no rotation
                   PdfRenderFlags.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");

使用此工具做了个提取不可复制PDF的工具,详情可移步查看

评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值