博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 打印本地PDF文件
阅读量:5011 次
发布时间:2019-06-12

本文共 4500 字,大约阅读时间需要 15 分钟。

通过几天的查找经测试后发现以下三种方法可以实现用C#直接打印PDF文件。

方法一:通过调用命令行:

using System.Drawing.Printing;using System.Diagnostics;using System.Collections.Specialized;//打印方法private void pdfPrint(string filePath){PrintDocument pd = new PrintDocument();Process p = new Process();ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.CreateNoWindow = true;startInfo.WindowStyle = ProcessWindowStyle.Hidden;startInfo.UseShellExecute = true;startInfo.FileName = filePath;startInfo.Verb = "print";startInfo.Arguments = @"/p /h \" + filePath + "\"\"" + pd.PrinterSettings.PrinterName + "\"";p.StartInfo = startInfo;p.Start();p.WaitForExit();}protected void btn_print_Click(object sender, EventArgs e){string filePath="C:\\Documents and Settings\\AuYeungCK\\My Documents\\myfile\\1.pdf";pdfPrint(filePath);}

  

总结:以上方法单击打印后会跳出一个adobe窗口,但是不会显示任何内容,打印机会自动打印,经测试现在一个问题,在打印我公司的通告时打印出来的内容是异常的。

 

 

方法二:通过调用其他的类库(PDFRender4NET)实现

需要引用O2S.Components.PDFView4NET.dll和O2S.Components.PDFRender4NET.dll

using O2S.Components.PDFRender4NET;         ///          /// 打印的代码         ///          /// 要打印的PDF路径         private int  printShow(string url)         {             int isOK = 0;             PDFFile file = PDFFile.Open(url);             PrinterSettings settings = new PrinterSettings();             System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();             settings.PrinterName = "hp LaserJet 1160 PCL 5e";             settings.PrintToFile = false ;             //设置纸张大小(可以不设置,取默认设置)3.90 in,  8.65 in             PaperSize ps = new PaperSize("test",4,9);             ps.RawKind = 9; //如果是自定义纸张,就要大于118,(A4值为9,详细纸张类型与值的对照请看http://msdn.microsoft.com/zh-tw/library/system.drawing.printing.papersize.rawkind(v=vs.85).aspx)             O2S.Components.PDFRender4NET.Printing.PDFPrintSettings pdfPrintSettings = new O2S.Components.PDFRender4NET.Printing.PDFPrintSettings(settings);             pdfPrintSettings.PaperSize = ps;             pdfPrintSettings.PageScaling = O2S.Components.PDFRender4NET.Printing.PageScaling.FitToPrinterMarginsProportional;             pdfPrintSettings.PrinterSettings.Copies = 1;             try             {                 file.Print(pdfPrintSettings);                 isOK = 1;             }             catch (Exception)             {                 isOK = -1;                 throw;             }             finally             {                 file.Dispose();             }             return isOK;         }

 总结:以上方法单击打印后会直接打印,不会跳出adobe的窗口。

 

方法三:加载adobe的com组件

1、打开winform界面,然后在左边的在工具栏中右击->单击choose Items->单击COM Components在里面将Adobe PDF Reader勾上确定。

2、将刚加载进来的Adobe PDF Reader控件拖到winform界面。

3、然后在加载界面输入如下代码:

string fileName = "C:\\Documents and Settings\\AuYeungCK\\My Documents\\myfile\\aa1.pdf";

 this.axAcroPDF1.LoadFile(fileName);

axAcroPDF.1setShowToolbar(false);

 axAcroPDF1.LoadFile(fileName);

  axAcroPDF1.printAll();

 

另:拖过来的axAcroPDF1也可以自己创建如下代码:

AxAcroPDFLib.AxAcroPDF axAcroPDF 1= new AxAcroPDFLib.AxAcroPDF();

            axAcroPDF1.Location = new System.Drawing.Point(0, 24);
            axAcroPDF1.Size = new System.Drawing.Size(292, 242);
            axAcroPDF1.Dock = DockStyle.Fill;
            Controls.Add(axAcroPDF1);

 

总结:以上方法完成了显示PDF档以及打印功能,但是这样运行后会先跳出一个提示窗口是否打印,不管你是否打印都会显示一个无任何内容的adobe窗口,然后也会在winform中显示PDF档。

方法四:用第三方控件iTextSharp复制PDF档打印

///     /// 实现PDF复制    ///     /// 源PDF档    /// 目标c1PDF档    /// 是否实现自动打印     private void ConvertPDFToPDF(string filePath, string toPath, bool print)    {        PdfReader reader = new PdfReader(filePath);        Document document = new Document(reader.GetPageSizeWithRotation(1));        int n = reader.NumberOfPages;        FileStream baos = new FileStream(toPath, FileMode.Create, FileAccess.Write);        PdfCopy copy = new PdfCopy(document, baos);        copy.ViewerPreferences = PdfWriter.HideToolbar | PdfWriter.HideMenubar;        //往pdf中写20837 ¤J内23481 ®e          document.Open();        for (int i = 1; i <= n; i++)        {            PdfImportedPage page = copy.GetImportedPage(reader, i);            copy.AddPage(page);        }        if (print)        {            PdfAction.JavaScript("myOnMessage();", copy);             copy.AddJavaScript("this.print(true);function myOnMessage(aMessage) {app.alert('Test',2);} var msgHandlerObject = new Object();doc.onWillPrint = myOnMessage;this.hostContainer.messageHandler = msgHandlerObject;");        }        document.Close();        reader.Close();    }

  总结:此方法是实现将PDF复制到另一个地方,然后用户去打开复制的PDF档后就会直接打印,此档也会跳出Adobe的界面,但是只能实现打印功能,不能另存。

转载于:https://www.cnblogs.com/MyTechnicalGrowthLog/p/4643020.html

你可能感兴趣的文章
程序员必须知道的几个Git代码托管平台
查看>>
导电塑料入梦来
查看>>
C# 线程手册 第五章 扩展多线程应用程序 - 什么是线程池
查看>>
笔记1126ASP.NET面试题(转)
查看>>
考研路茫茫--单词情结 - HDU 2243(AC自动机+矩阵乘法)
查看>>
HTTP运行期与页面执行模型
查看>>
tableView优化方案
查看>>
近期思考(2019.07.20)
查看>>
Apache2.4使用require指令进行访问控制
查看>>
冗余关系_并查集
查看>>
做最好的自己(Be Your Personal Best)
查看>>
如何搭建github+hexo博客-转
查看>>
HW2.2
查看>>
将Windows Server 2016 打造成工作站(20161030更新)
查看>>
5大主浏览器css3和html5兼容性大比拼
查看>>
hdu-5894 hannnnah_j’s Biological Test(组合数学)
查看>>
scss常规用法
查看>>
css定位position属性深究
查看>>
android中不同版本兼容包的区别
查看>>
Static 与 new 的问题【待解决】
查看>>