最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間: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ù)處理時內(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ù)部署時,請?zhí)貏e注意會話0隔離限制,建議通過計(jì)劃任務(wù)觸發(fā)打印進(jìn)程。

五、知識拓展:使用C#為PDF文檔添加專業(yè)水印

在數(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ì)脫穎而出。它是一個專業(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)文本水印:分步指南與代碼示例

文本水印是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)圖片水印:分步指南與代碼示例

圖片水印常用于添加公司Logo、品牌圖標(biāo)或特殊的背景圖案。

代碼示例:

using Spire.Pdf;
using System.Drawing;

namespace AddImageWatermark
{
    class Program
    {
        static void Main(string[] args)
        {
            //創(chuàng)建一個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)文章

  • C#中把字符串String轉(zhuǎn)換為整型Int的小例子

    C#中把字符串String轉(zhuǎn)換為整型Int的小例子

    這篇文章主要介紹了C#中把字符串String轉(zhuǎn)換為整型Int的小例子,本文使用TryParse方法實(shí)現(xiàn)轉(zhuǎn)換,需要的朋友可以參考下
    2014-08-08
  • c# 類和成員的修飾詳細(xì)介紹

    c# 類和成員的修飾詳細(xì)介紹

    本文將詳細(xì)介紹c# 類和成員的修飾,需要的朋友可以參考下
    2012-11-11
  • C#如何使用XmlDocument訪問XML文件

    C#如何使用XmlDocument訪問XML文件

    本文介紹了XML文件的特點(diǎn)、用途、格式、示例、解析和處理方式,以及在C#中使用XmlDocument類進(jìn)行增刪改查操作的方法,XML文件是一種靈活的數(shù)據(jù)描述和存儲方式,適用于各種應(yīng)用場景,在C#中,通過XmlDocument類可以方便地對XML文件進(jìn)行操作
    2024-12-12
  • C#中實(shí)現(xiàn)在32位、64位系統(tǒng)下自動切換不同的SQLite dll文件

    C#中實(shí)現(xiàn)在32位、64位系統(tǒng)下自動切換不同的SQLite dll文件

    這篇文章主要介紹了C#中實(shí)現(xiàn)在32位、64位系統(tǒng)下自動切換不同的SQLite dll文件,本文使用C#代碼實(shí)現(xiàn)DLL文件的切換,需要的朋友可以參考下
    2014-09-09
  • C#11新特性之file關(guān)鍵字的用法教程

    C#11新特性之file關(guān)鍵字的用法教程

    C#11?添加了文件作用域類型功能:一個新的?file?修飾符,可以應(yīng)用于任何類型定義以限制其只能在當(dāng)前文件中使用。這樣,我們可以在一個項(xiàng)目中擁有多個同名的類。本文就來聊聊file關(guān)鍵字的用法,需要的可以參考一下
    2022-12-12
  • C#中通過反射將枚舉元素加載到ComboBo的實(shí)現(xiàn)方法

    C#中通過反射將枚舉元素加載到ComboBo的實(shí)現(xiàn)方法

    本文主要介紹了C#中通過反射將枚舉元素加載到ComboBo的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • VS2012 程序打包部署圖文詳解

    VS2012 程序打包部署圖文詳解

    VS2012雖然沒有集成打包工具,但它為我們提供了下載的端口,需要我們手動安裝一個插件InstallShield。網(wǎng)上有很多第三方的打包工具,但為什么偏要使用微軟提供的呢
    2016-12-12
  • C#用Topshelf創(chuàng)建Windows服務(wù)的步驟分享

    C#用Topshelf創(chuàng)建Windows服務(wù)的步驟分享

    這篇文章主要給大家介紹了關(guān)于C#如何利用Topshelf創(chuàng)建Windows服務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C#實(shí)現(xiàn)屏幕拷貝的方法

    C#實(shí)現(xiàn)屏幕拷貝的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)屏幕拷貝的方法,實(shí)例分析了兩種常用的屏幕拷貝實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • C# 動畫窗體(AnimateWindow)的小例子

    C# 動畫窗體(AnimateWindow)的小例子

    C# 動畫窗體(AnimateWindow)的小例子,需要的朋友可以參考一下
    2013-03-03

最新評論

卓尼县| 聂荣县| 哈巴河县| 双鸭山市| 杭锦后旗| 临江市| 治县。| 调兵山市| 张家口市| 灵石县| 玛纳斯县| 江达县| 涞源县| 达拉特旗| 塔城市| 新竹县| 玉门市| 兴海县| 双城市| 新邵县| 乌兰察布市| 通化市| 鞍山市| 思南县| 台东县| 荆州市| 兴宁市| 东海县| 台南县| 余庆县| 涟源市| 离岛区| 开平市| 霍城县| 五大连池市| 阿坝| 蚌埠市| 阜宁县| 平远县| 阿拉善左旗| 邯郸市|