在接下來的程式碼範例中,除了參考「Printing PDF documents in C#」的做法外,同時亦採用 Clifton Nock 所著「Data Access Patterns」一書中的 Retryer Pattern。以下程式碼是實作 IRetryable 介面的類別,用來執行列印 PDF 文件的工作:
using System;
using System.Diagnostics;
using NDde;
using NDde.Client;
namespace PdfPrintExample
{
class PdfPrintOperation : IRetryable
{
private DdeClient _client;
private string _filePath;
public PdfPrintOperation(string filePath)
{
_filePath = filePath;
_client = new DdeClient("acroview", "control");
}
public bool Attemp()
{
try
{
_client.Connect();
return true;
}
catch (DdeException)
{
// ignore exception
}
return false;
}
public void Recover()
{
// try running Adobe Reader
Process p = new Process();
p.StartInfo.FileName = "AcroRd32.exe";
p.Start();
p.WaitForInputIdle();
}
public void Print()
{
_client.Execute("[DocOpen(\"" + _filePath + "\")]", 60000);
_client.Execute("[FilePrintSilent(\"" + _filePath + "\")]", 60000);
_client.Execute("[DocClose(\"" + _filePath + "\")]", 60000);
_client.Execute("[AppExit]", 60000);
}
}
}
以下是簡單的使用範例:
namespace PdfPrintExample
{
class Program
{
static void Main(string[] args)
{
PdfPrintOperation operation = new PdfPrintOperation(@"C:\sample.pdf");
Retryer retryer = new Retryer(operation);
retryer.Perform(10, 5000);
// print the file
operation.Print();
}
}
}
使用 Retryer Pattern 的好處在於連結 DDE Server 發生 DDEException 例外狀況時,可以自動嘗試重新連線,直到連接成功或是達到最大重試次數為止。
參考資料:
Printing PDF documents in C#
0 comments :: Printing PDF Documents using C#
張貼留言