C#使用Spire.PDF?for?.NET實(shí)現(xiàn)PDF文檔打印功能
在.NET企業(yè)級開發(fā)場景中,PDF打印功能的實(shí)現(xiàn)常面臨三大痛點(diǎn):傳統(tǒng)Adobe組件依賴導(dǎo)致Linux環(huán)境部署困難、打印機(jī)參數(shù)配置復(fù)雜易觸發(fā)異常、批量任務(wù)處理時(shí)內(nèi)存泄漏風(fēng)險(xiǎn)陡增。本文將以Spire.PDF for .NET為核心,詳解如何構(gòu)建穩(wěn)定高效的C# PDF打印解決方案。
一、環(huán)境搭建與基礎(chǔ)配置
通過NuGet安裝最新組件:
Install-Package Spire.PDF
基礎(chǔ)代碼需引用以下命名空間:
using Spire.Pdf; using Spire.Pdf.Print; using System.Drawing.Printing;
打印機(jī)權(quán)限檢測實(shí)現(xiàn)代碼:
// 檢測默認(rèn)打印機(jī)狀態(tài)
PrintServer server = new PrintServer();
PrintQueue queue = server.GetPrintQueue(PrinterSettings.InstalledPrinters[0]);
if (queue.IsNotAvailable || queue.IsInError)
{
throw new Exception("打印機(jī)不可用,錯誤代碼:" + queue.QueueStatus);
}
二、基本打印實(shí)現(xiàn)流程
1. PDF加載方式對比
// 方式1:文件路徑加載(推薦)
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("invoice.pdf");
// 方式2:流加載(適用于網(wǎng)絡(luò)文件)
using (FileStream fs = new FileStream("report.pdf", FileMode.Open))
{
doc.LoadFromStream(fs);
}
2. 打印參數(shù)配置
PdfPrintSettings settings = doc.PrintSettings; settings.Copies = 2; settings.Landscape = true;
3. 執(zhí)行打印操作
// 同步打印(阻塞主線程)
doc.Print();
// 異步打?。ㄍ扑]批量場景)
var thread = new Thread(() => { doc.Print(); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
4. 異常處理實(shí)踐
try
{
printDoc.Print();
}
catch (Spire.Pdf.PdfException ex)
{
Console.WriteLine($"PDF解析異常:{ex.Message}");
}
catch (PrintSystemException ex)
{
Console.WriteLine($"打印系統(tǒng)異常:{ex.Message}");
}
三、高級打印控制參數(shù)
| 參數(shù)類型 | 屬性名 | 取值范圍 | 應(yīng)用場景 |
|---|---|---|---|
| 頁面選擇 | SelectPageRange | 1-based索引 | 打印2-5頁: "2-5" |
| 份數(shù)設(shè)置 | Copies | 1-99 | 會議材料多份打印 |
| 方向控制 | Landscape | true/false | 橫向財(cái)務(wù)報(bào)表打印 |
| 縮放比例 | Zoom | 0.1-2.0 | 適應(yīng)A4紙張 |
四、企業(yè)級應(yīng)用優(yōu)化
批量打印內(nèi)存管理
foreach (var file in Directory.GetFiles("PDFs"))
{
using (PdfDocument doc = new PdfDocument(file)) // 自動釋放資源
{
doc.Print();
}
GC.Collect(); // 主動觸發(fā)內(nèi)存回收
}
關(guān)鍵技術(shù)要點(diǎn)
1.使用打印隊(duì)列服務(wù)防止任務(wù)堆積
2.Windows服務(wù)部署需配置[Allow service to interact with desktop]
3.通過EventLog記錄打印成功/失敗日志
4.監(jiān)控打印機(jī)狀態(tài):
PrintQueue.Refresh();
if (PrintQueue.IsPaperJammed) {...}
技術(shù)聲明:本方案基于.NET Framework 4.6+,需引用System.Drawing.Printing程序集。Windows服務(wù)部署時(shí),請?zhí)貏e注意會話0隔離限制,建議通過計(jì)劃任務(wù)觸發(fā)打印進(jìn)程。
五、知識拓展:使用C#為PDF文檔添加專業(yè)水印
在數(shù)字化時(shí)代,PDF文檔已成為信息傳遞和存儲的核心載體。無論是商業(yè)合同、技術(shù)報(bào)告還是內(nèi)部資料,保護(hù)文檔的版權(quán)、標(biāo)識其狀態(tài)或強(qiáng)化品牌形象都至關(guān)重要。為PDF文檔添加水印,正是實(shí)現(xiàn)這些目標(biāo)的一種高效且常見的方式。然而,手動為大量PDF文件添加水印,不僅效率低下,且極易出錯。
本文將深入探討如何利用C#編程語言,結(jié)合強(qiáng)大的Spire.PDF for .NET庫,實(shí)現(xiàn)PDF水印的自動化、專業(yè)化添加。告別繁瑣的手動操作,讓您的PDF處理流程更上一層樓!
為什么選擇 Spire.PDF for .NET
在眾多的PDF處理庫中,Spire.PDF for .NET以其卓越的性能、豐富的功能集和友好的API設(shè)計(jì)脫穎而出。它是一個(gè)專業(yè)的PDF組件,允許開發(fā)者在.NET應(yīng)用程序中輕松創(chuàng)建、讀寫、編輯、轉(zhuǎn)換和打印PDF文檔,而無需安裝Adobe Acrobat。
選擇Spire.PDF for .NET的理由包括:
- 功能全面: 支持文本、圖片、矢量圖形、表單、批注、加密、數(shù)字簽名等多種PDF元素操作。
- 易用性: 提供直觀的API,學(xué)習(xí)曲線平緩,開發(fā)者可快速上手。
- 高性能: 能夠高效處理大型PDF文件和批量操作。
- 兼容性: 嚴(yán)格遵循PDF標(biāo)準(zhǔn),確保生成和處理的PDF文件具有良好的兼容性。
要在您的項(xiàng)目中開始使用Spire.PDF for .NET,只需通過NuGet包管理器安裝即可:
Install-Package Spire.PDF
實(shí)現(xiàn)文本水?。悍植街改吓c代碼示例
文本水印是PDF文檔中最常見的水印類型,常用于標(biāo)注“機(jī)密”、“草稿”、“版權(quán)所有”等信息。
代碼示例:
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace AddTextWatermark
{
class Program
{
static void Main(string[] args)
{
// 加載文檔
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\AI.pdf");
// 創(chuàng)建字體和畫刷
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Black", 50f), true);
PdfBrush brush = PdfBrushes.Blue;
// 指定水印文字
string watermarkText = "DO NOT COPY";
// 設(shè)置透明度
float opacify = 0.6f;
// 遍歷頁
foreach (PdfPageBase page in doc.Pages)
{
// 繪制水印文字
AddWatermark(page, watermarkText, font, brush, opacify);
}
// 保存文檔
doc.SaveToFile("Watermark.pdf");
doc.Dispose();
}
private static void AddWatermark(PdfPageBase page, string watermarkText, PdfTrueTypeFont font, PdfBrush brush, float opacity)
{
page.Canvas.SetTransparency(opacity);
SizeF textSize = font.MeasureString(watermarkText);
float pageWidth = page.ActualSize.Width;
float pageHeight = page.ActualSize.Height;
float x = (pageWidth - textSize.Width) / 2;
float y = (pageHeight - textSize.Height) / 2;
//page.Canvas.RotateTransform(-45);
page.Canvas.DrawString(watermarkText, font, brush, x, y);
}
}
}
實(shí)現(xiàn)圖片水?。悍植街改吓c代碼示例
圖片水印常用于添加公司Logo、品牌圖標(biāo)或特殊的背景圖案。
代碼示例:
using Spire.Pdf;
using System.Drawing;
namespace AddImageWatermark
{
class Program
{
static void Main(string[] args)
{
//創(chuàng)建一個(gè)PdfDocument對象
PdfDocument document = new PdfDocument();
//加載示例PDF文檔
document.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");
//加載圖片
Image image = Image.FromFile(@"C:\Users\Administrator\Desktop\logo.png");
//獲取圖片寬度和高度
int imgWidth = image.Width;
int imgHeight = image.Height;
//遍歷頁面
for (int i = 0; i < document.Pages.Count; i++)
{
//獲取頁面寬度和高度
float pageWidth = document.Pages[i].ActualSize.Width;
float pageHeight = document.Pages[i].ActualSize.Height;
//設(shè)置背景不透明度
document.Pages[i].BackgroudOpacity = 0.3f;
//設(shè)置當(dāng)前頁面的背景圖片
document.Pages[i].BackgroundImage = image;
//將背景圖片置于頁面中央
Rectangle rect = new Rectangle((int)(pageWidth - imgWidth) / 2, (int)(pageHeight - imgHeight) / 2, imgWidth, imgHeight);
document.Pages[i].BackgroundRegion = rect;
}
//保存文檔
document.SaveToFile("AddImageWatermark.pdf");
document.Close();
}
}
}
到此這篇關(guān)于C#使用Spire.PDF for .NET實(shí)現(xiàn)PDF文檔打印功能的文章就介紹到這了,更多相關(guān)C#打印PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Unity3D運(yùn)行報(bào)DllNotFoundException錯誤的解決方案
這篇文章主要介紹了Unity3D運(yùn)行報(bào)DllNotFoundException錯誤的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
C#使用RabbitMq隊(duì)列(Sample,Work,Fanout,Direct等模式的簡單使用)
這篇文章主要介紹了C#使用RabbitMq隊(duì)列(Sample,Work,Fanout,Direct等模式的簡單使用),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
C# 字符串與unicode互相轉(zhuǎn)換實(shí)戰(zhàn)案例
這篇文章主要介紹了C# 字符串與unicode互相轉(zhuǎn)換實(shí)戰(zhàn)案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
C#使用protobuf-net進(jìn)行序列化的詳細(xì)操作
本文帶領(lǐng)大家學(xué)習(xí)C#中protobuf-net工具的另一種使用體驗(yàn),這個(gè)工具的使用體驗(yàn)屬于Code-First模式,先定義類型,并使用注解進(jìn)行標(biāo)記,不需要先編寫.proto文件,感興趣的朋友跟隨小編一起看看吧2021-11-11
C#類繼承中構(gòu)造函數(shù)的執(zhí)行序列示例詳解
這篇文章主要給大家介紹了關(guān)于C#類繼承中構(gòu)造函數(shù)的執(zhí)行序列的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09

