狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

盤點(diǎn)C#中10種高效打印PDF文檔的方法

admin
2023年11月16日 22:52 本文熱度 1143

操作PDF文檔時(shí),打印是常見(jiàn)的需求之一。針對(duì)不同的打印需求,可分多種情況來(lái)進(jìn)行,如設(shè)置靜默打印、指定打印頁(yè)碼范圍和打印紙張大小、雙面打印、黑白打印等等。

以下是在C#中10種高效打印PDF文檔的方法:

1、使用iTextSharp庫(kù):iTextSharp是一個(gè)開(kāi)源的.NET PDF庫(kù),可以用于創(chuàng)建、修改和讀取PDF文件。使用它,你可以輕松地讀取PDF文件并將其打印出來(lái)。

代碼示例

using iTextSharp.text.pdf;

// 讀取PDF文件

PdfReader reader = new PdfReader("source.pdf");

// 創(chuàng)建PDF文檔的渲染器

PdfRenderer pdfRenderer = new PdfRenderer(reader);

// 獲取PDF文檔的總頁(yè)數(shù)

int totalPages = reader.NumberOfPages;

// 遍歷每一頁(yè)并打印

for (int page = 0; page < totalPages; page++)

{

// 獲取當(dāng)前頁(yè)的渲染器

PdfPage pageRenderer = pdfRenderer.GetPageN(page);

// 獲取當(dāng)前頁(yè)的渲染任務(wù)

PdfContentByte contentByte = pageRenderer.GetContent();

// PDF內(nèi)容渲染到打印機(jī)上

contentByte.BeginPage();

contentByte.EndPage();

}

// 關(guān)閉PDF文檔和渲染器

reader.Close();

pdfRenderer.Close();

2、使用PDFBox庫(kù):PDFBox是Apache的一個(gè)開(kāi)源項(xiàng)目,它是一個(gè)可以操作PDF文檔的Java庫(kù)。雖然它主要是用于Java,但也可以在C#中使用。使用PDFBox,你可以將PDF文件轉(zhuǎn)換為圖像,然后使用C#的打印功能將其打印出來(lái)。

代碼示例

using org.apache.pdfbox.pdmodel;

using org.apache.pdfbox.printing;

// 加載PDF文檔

PDDocument document = PDDocument.load(new File("source.pdf"));

// 創(chuàng)建PDF渲染器

PDFRenderer pdfRenderer = new PDFRenderer(document);

// 遍歷每一頁(yè)并打印

for (int page = 0; page < document.getNumberOfPages(); page++)

{

// PDF頁(yè)面渲染為圖像

BufferedImage image = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);

// 將圖像打印到打印機(jī)上

ImageIOUtil.writeImage(image, "output" + page + ".png", 300);

}

// 關(guān)閉PDF文檔和渲染器

document.close();

3、使用Ghostscript庫(kù):Ghostscript是一個(gè)免費(fèi)的、開(kāi)源的Postscript和PDF處理器,可以用于打印PDF文件。使用Ghostscript,你可以將PDF文件轉(zhuǎn)換為Postscript格式,然后使用C#的打印功能將其打印出來(lái)。

代碼示例

using Ghostscript.NET2;

// 創(chuàng)建Ghostscript實(shí)例

GS gs = new GS();

// 設(shè)置默認(rèn)字體

gs.createFont("Arial", 12, false, false, false);

// 設(shè)置打印機(jī)

gs.SetDevice("winprinter", false);

// 打開(kāi)PDF文件

gs.OpenFile("source.pdf", false);

// 開(kāi)始打印第一頁(yè)

gs.BeginPage();

// 結(jié)束打印一頁(yè)(如果需要打印下一頁(yè),則不需要調(diào)用此方法)

gs.EndPage();

// 關(guān)閉PDF文件(如果不需要打印下一頁(yè),則不需要調(diào)用此方法)

gs.CloseFile();

// 退出Ghostscript(如果不需要打印下一頁(yè),則不需要調(diào)用此方法)

gs.Quit();

4、使用Adobe Acrobat SDK:如果你有Adobe Acrobat的專業(yè)版或企業(yè)版,你可以使用其SDK進(jìn)行PDF文件的打印。SDK提供了一組接口來(lái)處理PDF文件的各種操作,包括打印。但這種方法需要安裝Adobe Acrobat軟件。

5、使用Microsoft Print to PDF功能:如果你的操作系統(tǒng)支持,你可以直接將PDF文件發(fā)送到打印機(jī),選擇“Microsoft Print to PDF”作為打印機(jī),然后打印。這種方法不需要任何第三方庫(kù)。

6、使用C#的內(nèi)置類:如果你只是需要簡(jiǎn)單地打印PDF文件,你也可以使用C#的內(nèi)置類,如System.Drawing和System.Printing。但是這種方法可能無(wú)法處理復(fù)雜的PDF文件,如包含圖像、表格等的文件。

代碼示例

using System.Drawing;

using System.Drawing.Printing;

// 創(chuàng)建一個(gè)打印作業(yè)

PrintDocument printDocument = new PrintDocument();

// 設(shè)置打印頁(yè)數(shù)為總頁(yè)數(shù)

printDocument.TotalPageCount = 10;

// 假設(shè)PDF文件有10頁(yè)

// 定義打印頁(yè)面范圍和頁(yè)面大小等參數(shù)

printDocument.DefaultPageSettings.PaperSize = new PaperSize("A4", 827, 1169);

printDocument.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);

// 設(shè)置是否雙面打印

printDocument.DefaultPageSettings.PrinterSettings["Duplex"] = "1";

  // 定義一個(gè)方法用于處理打印頁(yè)面的事件

  private void PrintPage(object sender, PrintPageEventArgs e)

  {

      // 獲取PDF文檔的頁(yè)面尺寸和打印機(jī)的紙張尺寸

      Rectangle pageRect = e.PageSettings.GetPageRectangle();

      // 計(jì)算縮放比例并設(shè)置頁(yè)邊距(單位為百分之一)

      float scaleFactor = Math.Min(pageRect.Width / (float)printDocument.DefaultPageSettings.PaperSize.Width / 100f, pageRect.Height / (float)printDocument.DefaultPageSettings.PaperSize.Height / 100f);

      e.MarginBounds = new Margins(0, 0, 0, 0);

      // PDF頁(yè)面渲染到打印機(jī)上

      using (var stream = new MemoryStream(printDocument.DocumentData))

      {

          var pdfReader = new PdfReader(stream);

          var pdfPage = pdfReader.GetPageN(1); // 獲取第一頁(yè)(可以根據(jù)需要修改為其他頁(yè)碼)

          var pdfGraphics = new PdfGraphics(pdfPage, stream, pdfReader);

          var pdfMatrix = new PdfMatrix();

          pdfGraphics.TransformMatrix = pdfMatrix; // 設(shè)置變換矩陣(如果需要縮放、旋轉(zhuǎn)等操作,則在此處進(jìn)行修改)

          e.Graphics.TransformMatrix = pdfMatrix; // 將變換矩陣復(fù)制給打印頁(yè)面的Graphics對(duì)象(如果需要縮放、旋轉(zhuǎn)等操作,則在此處進(jìn)行修改)

          pdfGraphics.RenderPage(e.Graphics); // PDF頁(yè)面渲染到打印頁(yè)面的Graphics對(duì)象上(如果需要縮放、旋轉(zhuǎn)等操作,則在此處進(jìn)行修改)

      }

  }

  // 處理打印頁(yè)面的事件(在打印作業(yè)開(kāi)始前觸發(fā))

  printDocument.PrintPage += PrintPage;  // 開(kāi)始打印作業(yè)(如果需要取消打印操作,則在事件處理程序中設(shè)置e.HasMorePagesfalse

  printDocument.Print(); // (如果需要取消打印操作,則在事件處理程序中設(shè)置e.HasMorePagesfalse)】;

7、使用第三方商業(yè)庫(kù):有許多第三方的商業(yè)庫(kù)可以處理PDF文件,如Aspose、iText、Ghostscript等。這些庫(kù)通常提供更全面的功能,但可能需要付費(fèi)使用。

8、使用其他語(yǔ)言的庫(kù):如果你的項(xiàng)目允許使用其他語(yǔ)言,如Python或Java,你可以選擇使用這些語(yǔ)言的庫(kù)來(lái)處理PDF文件。例如,Python有PyPDF2、PDFMiner等庫(kù),Java有Apache PDFBox等庫(kù)。然后你可以通過(guò)C#的進(jìn)程調(diào)用這些工具來(lái)處理PDF文件。

9、使用Web服務(wù):如果你的PDF文件是存儲(chǔ)在云端或遠(yuǎn)程服務(wù)器上的,你可以創(chuàng)建一個(gè)Web服務(wù)來(lái)處理這些文件。然后在C#中通過(guò)HTTP請(qǐng)求調(diào)用這個(gè)服務(wù)來(lái)打印PDF文件。這種方法可能需要你熟悉Web服務(wù)的開(kāi)發(fā)。

10、使用C#的多線程:打印大量PDF文件時(shí),可以使用C#的多線程技術(shù)來(lái)提高效率。例如,可以使用Parallel.ForEach來(lái)并行處理多個(gè)PDF文件,從而加快打印速度。

代碼示例

  using System.Drawing;

  using System.Drawing.Printing;

  using System.Threading;

    // 定義打印任務(wù)類

  class PrintTask  {

      private readonly string filePath;

      private readonly PrintDocument printDocument;

      public PrintTask(string filePath, PrintDocument printDocument)

      {

          this.filePath = filePath;

          this.printDocument = printDocument;

      }

      public void StartPrint()

      {

          // 打開(kāi)PDF文件并讀取到內(nèi)存中

          using (var stream = new FileStream(filePath, FileMode.Open))

          {

              var document = PdfReader.GetPdfReader(stream);

              // 設(shè)置打印頁(yè)面范圍和頁(yè)面大小等參數(shù)

              printDocument.SetPageSettings(document.GetPage(1), PageSettings.A4);

              // 開(kāi)始打印第一頁(yè)并等待用戶確認(rèn)打印完成或取消打印操作(這里僅作為示例,實(shí)際應(yīng)用中需要根據(jù)具體需求進(jìn)行修改)

              printDocument.PrintPage += (sender, e) =>

              {

                  e.HasMorePages = false; // 設(shè)置為沒(méi)有更多頁(yè)面需要打印,結(jié)束打印操作(如果需要繼續(xù)打印下一頁(yè),則設(shè)置為true

                  e.PageSettings = printDocument.PageSettings; // 設(shè)置頁(yè)面大小和方向等參數(shù)(如果需要修改,則根據(jù)實(shí)際需求進(jìn)行設(shè)置)

                  e.PrintPage += (sender2, e2) => { }; // 打印頁(yè)面時(shí)觸發(fā)的事件(如果需要修改打印內(nèi)容和樣式,則在此處進(jìn)行修改)

              };

              printDocument.Print(); // 開(kāi)始打印操作(如果需要取消打印操作,則在事件處理程序中設(shè)置e.HasMorePagesfalse

          }

      }

  }

以上是在C#中10種高效打印PDF文檔的方法,你可以根據(jù)實(shí)際需求選擇適合自己的方法進(jìn)行打印。


該文章在 2023/11/16 22:52:54 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved