最近這兩天一直在研究直接列印PDF檔案的問題。找到三種比較好的列印方式,可是各有各的問題。
方法一 : 使用PrintDocument類列印
優點 : 列印速度快
缺點 : 1. 需要安裝 Adobe Reader
2. 不能手動選擇列印機。即使設定了自己想要的列印機,也還是會使用默認列印機列印
3. 列印中,Adobe Reader會打開PDF檔案,有時可以自動關閉,有時關閉不掉。
代碼如下所示:
private static void printPDF2(string filePath)
{
PrintDocument pd = new PrintDocument();
Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
pd.PrinterSettings.PrinterName = "Send To OneNote 2016";
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.UseShellExecute = true;
startInfo.FileName = filePath;
startInfo.Verb = "print";
String sysPrintName = pd.PrinterSettings.PrinterName;
String printName = "Send To OneNote 2016";
startInfo.Arguments = @"/p /h \" + filePath + "\"\"" + printName + "\"";
//startInfo.Arguments = @"/p /h \" + filePath + "\"\"" + pd.PrinterSettings.PrinterName + "\"";
p.StartInfo = startInfo;
p.Start();
p.WaitForExit();
}
方法二 : 使用AcroRd32.exe 列印
優點: 1. 列印速度快
2. 可以選擇列印機
缺點 : 會自動使用Adobe Reader程式打開檔案,然后自動關掉 偶爾也有關不掉的情況
代碼如下所示:
private static void printPDF3(string filePath)
{
Process p = new Process();
string appPath = @"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe";
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = appPath;
String argument = "/h /t \"D:\\Projects\\11111.pdf\" \"Send To OneNote 2016\"";
startInfo.Arguments = argument;// "/h /t \"D:\\Projects\\11111.pdf\" \"Send To OneNote 2016\"";
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.UseShellExecute = true;
p.StartInfo = startInfo;
p.Start();
p.WaitForExit();
}
方法三 :使用Spire.PDF for .NET列印
優點: 1. 列印時,完全靜默列印,不會彈出Adobe Reader程式,并打開關閉PDF檔案
2. 可以選擇列印機
缺點 : 列印速度慢
代碼在不在家里,因此就不上了。大致如下: (網上隨便找的)
using Spire.Pdf;
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(@"C:\xxx.pdf", FileFormat.PDF);
Console.WriteLine(doc.UsedFonts);
PrintDocument printDoc = doc.PrintDocument;
printDoc.PrintController = new StandardPrintController();
printDoc.Print();
doc.Close();
此種列印方式,感覺是將原本很小的PDF檔案,重新生成后,再送入列印機,從列印機里的大小來看,比我原來的檔案大了好幾倍,30頁的檔案,花了40秒左右才送完,前兩種方式,幾乎只花了幾秒。
請問各位大神,有沒有比較好的方式解決以上問題呢,只解決其中一種,也是感激不盡。
謝謝。
uj5u.com熱心網友回復:
試試aspose.pdf 列印uj5u.com熱心網友回復:
謝謝 屬于第三方控制元件嗎uj5u.com熱心網友回復:
最近發布的Spire.PDF有個比較新的5.4.1版本,在列印速度上做了提升和優化,你可以試下這個版本或及其以上版本的uj5u.com熱心網友回復:
我只看到了5.1的版本的 請問這個版本的 如何下載呢 收費嗎uj5u.com熱心網友回復:
網上搜mupdf這個,C#封裝一下,自己對pdf檔案進行單頁渲染成圖片,然后用Graphics繪制到列印機就行。C#使用mupdf的方法,網上有朋友寫的博客可以參考。
列印速度上的優化,你需要自己調整渲染pdf頁面內容成圖片時的dpi,適當調低點速度會快些。
優點:不需要在客戶機上安裝adobe reader。
Spire.PDF這個第三方組件,我記得是要收費的吧,是不是免費版會有相關限制,比如只能列印10頁以內的內容?
uj5u.com熱心網友回復:
Pdfium 了解下其實福昕的最好,就是太貴了
uj5u.com熱心網友回復:
你試下5.4.9版本的,這個是收費的,你可以發郵件問他們售后要一個臨時授權證書,功能是完全沒有限制的uj5u.com熱心網友回復:
aspose是收費的 不過能弄到授權碼uj5u.com熱心網友回復:
你試下5.4.9版本的,這個是收費的,你可以發郵件問他們售后要一個臨時授權證書,功能是完全沒有限制的
我只看到了5.1的版本的 請問這個版本的 如何下載呢 收費嗎 最近發布的Spire.PDF有個比較新的5.4.1版本,在列印速度上做了提升和優化,你可以試下這個版本或及其以上版本的
uj5u.com熱心網友回復:
Pdfium 了解下
其實福昕的最好,就是太貴了
uj5u.com熱心網友回復:
aspose是收費的 不過能弄到授權碼
uj5u.com熱心網友回復:
aspose是收費的 不過能弄到授權碼
uj5u.com熱心網友回復:
公司用才需要買,小心產生糾紛uj5u.com熱心網友回復:
本人己試過,C# 自帶的可以列印,但是有彈出框;Spire.PDF的速度比較慢,雙面列印很慢。 破解的目前只有4.8版本。 其它的還沒有試過。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/144662.html
標籤:C#
上一篇:C#如何轉換成VB.net呢?
