前言 PDF是一種常用的文件格式,實(shí)現(xiàn)其打印、查看操作是較為常見的需求。例如打印PDF格式的快遞面單、發(fā)票等。如何通過編寫C# 代碼實(shí)現(xiàn)打印、查看需求,可以使用一些三方C#組件庫。如Spire.PDF for .NET、PdfiumViewer等,本文介紹使用PdfiumViewer實(shí)現(xiàn)方式。
PdfiumViewer PdfiumViewer 是基于 Pdfium 庫的.NET PDF查看器組件??梢允刮覀冚p松地在應(yīng)用程序中嵌入PDF文檔,對(duì)文檔的查看與打印。 (或其他基于 Pdfium 庫.NET庫) 。 .NET Framework》PdfiumViewer;.NET 6》PdfiumViewer.Core
1、使用和附錄 https://github.com/pvginkel/PdfiumViewer
https://github.com/TimChen44/PdfiumViewer.Core
PdfiumViewer.Native.x86_64.v8-xfa:64位的Pdfium。 PdfiumViewer.Native.x86.v8-xfa:32位的Pdfium。
2、使用的類或 控件 類名 描述 PdfDocument 用于呈現(xiàn) PDF 文檔的類。 PdfRenderer 用于呈現(xiàn) PdfDocument 的控件類。 PdfViewer 托管 PdfRenderer 的控件。
示例代碼 1、打印示例 /// <summary>
/// 靜默打印
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void buttonPrint_Click (object sender, EventArgs e )
{
try
{
string printerName = "Microsoft Print to PDF" ;
string documentName = Guid.NewGuid().ToString("N" );
short printCopies = 1 ;
//
string fileName = string .Format(@"D:\Temp\{0}" , "20240512193805.pdf" );
// 判斷文件是否存在
if (!File.Exists(fileName))
{
MessageBox.Show(string .Format("【{0}】文件不存在!" ,fileName));
return ;
}
// 讀取文件內(nèi)容
byte [] fileBuffer = File.ReadAllBytes(fileName);
// 將字節(jié)內(nèi)容轉(zhuǎn)為流
MemoryStream memoryStream = new MemoryStream(fileBuffer);
//
fileBuffer = null ;
// 開始組件裝載文件
using (PdfiumViewer.PdfDocument pdfDocument = PdfiumViewer.PdfDocument.Load(memoryStream))
{
// 創(chuàng)建文檔輸出發(fā)送到打印機(jī)對(duì)像
PrintDocument printDocument = pdfDocument.CreatePrintDocument();
// 將文檔打印到打印機(jī)
printDocument.PrintController = new StandardPrintController();
if (!string .IsNullOrEmpty(printerName))
{
// 輸出的目標(biāo)打印機(jī)
printDocument.PrinterSettings.PrinterName = printerName;
}
// 打印文檔名稱
printDocument.DocumentName = documentName;
// 打印份數(shù)
printDocument.PrinterSettings.Copies = printCopies;
// 開始發(fā)送打印
printDocument.Print();
}
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}
2、查看示例 /// <summary>
/// 打開閱讀
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void button2_Click (object sender, EventArgs e )
{
try
{
// PDF 文件
string fileName = string .Format(@"D:\Temp\{0}" , "20240512193805.pdf" );
// 判斷文件是否存在
if (!File.Exists(fileName))
{
MessageBox.Show(string .Format("【{0}】文件不存在!" , fileName));
return ;
}
// 開始組件裝載文件
PdfiumViewer.PdfDocument pdfDocument = PdfiumViewer.PdfDocument.Load(fileName);
this .pdfViewer.Document = pdfDocument;
this .pdfViewer.Show();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}
3、其它示例 /// <summary>
/// 其它
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void buttonOther_Click (object sender, EventArgs e )
{
try
{
// PDF文件
string fileName = string .Format(@"D:\Temp\{0}" , "20240512193805.pdf" );
// 判斷文件是否存在
if (!File.Exists(fileName))
{
MessageBox.Show(string .Format("【{0}】文件不存在!" , fileName));
return ;
}
// 開始組件裝載文件
using (PdfiumViewer.PdfDocument pdfDocument = PdfiumViewer.PdfDocument.Load(fileName))
{
// 獲取文檔總頁數(shù)
int pageCount = pdfDocument.PageCount;
// 獲取文件信息
PdfInformation pdfInformation = pdfDocument.GetInformation();
// 在文件中搜索指定內(nèi)容
var finder = pdfDocument.Search("文本" ,false ,false );
}
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}
小結(jié) 以上是PdfiumViewer組件簡單介 紹,通過實(shí)現(xiàn)打印與查看示例了解其使用方式。對(duì).NET 6及以上版本使用PdfiumViewer.Core,有興趣的 可以試試。
該文章在 2024/7/2 8:35:40 編輯過