欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#使用Spire.PDF?for?.NET實(shí)現(xiàn)PDF文檔打印功能

 更新時(shí)間:2025年08月27日 15:06:47   作者:LSTM97  
本文將以Spire.PDF?for?.NET為核心,為大家詳細(xì)介紹一下如何構(gòu)建穩(wěn)定高效的C#?PDF打印解決方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

在.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)用場景
頁面選擇SelectPageRange1-based索引打印2-5頁: "2-5"
份數(shù)設(shè)置Copies1-99會議材料多份打印
方向控制Landscapetrue/false橫向財(cái)務(wù)報(bào)表打印
縮放比例Zoom0.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錯誤的解決方案

    這篇文章主要介紹了Unity3D運(yùn)行報(bào)DllNotFoundException錯誤的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#操作XML文件步驟

    C#操作XML文件步驟

    在本篇文章里小編給大家分享了關(guān)于C#操作XML文件步驟教學(xué)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2019-01-01
  • C#使用RabbitMq隊(duì)列(Sample,Work,Fanout,Direct等模式的簡單使用)

    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)案例

    這篇文章主要介紹了C# 字符串與unicode互相轉(zhuǎn)換實(shí)戰(zhàn)案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • c# base關(guān)鍵字的具體使用

    c# base關(guān)鍵字的具體使用

    base關(guān)鍵字用于從派生類中訪問基類的成員,本文主要介紹了c# base關(guān)鍵字的具體使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • C#使用listView增刪操作實(shí)例

    C#使用listView增刪操作實(shí)例

    這篇文章主要介紹了C#使用listView增刪操作的實(shí)現(xiàn)方法,實(shí)例分析了C#中使用listView控件進(jìn)行動態(tài)添加、選中刪除等操作的技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • C#使用protobuf-net進(jìn)行序列化的詳細(xì)操作

    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í)行序列示例詳解

    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
  • c#實(shí)現(xiàn)pdf的另存為功能

    c#實(shí)現(xiàn)pdf的另存為功能

    今天跟大家分享一個(gè)實(shí)現(xiàn)PDF另存為的效果,是調(diào)用Acrobat SDK的JavaScript實(shí)現(xiàn)的,需要的朋友可以參考下
    2014-03-03
  • c#實(shí)現(xiàn)爬蟲程序

    c#實(shí)現(xiàn)爬蟲程序

    這篇文章介紹了c#實(shí)現(xiàn)爬蟲程序的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評論