C# 打印本地PDF文件

通过几天的查找经测试后发现以下三种方法可以实现用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;

        /// <summary>
         /// 打印的代码
         /// </summary>
         /// <param name="url">要打印的PDF路径</param>
         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档打印

/// <summary>

    /// 实现PDF复制

    /// </summary>

    /// <param name="filePath">源PDF档</param>

    /// <param name="toPath">目标c1PDF档</param>

    /// <param name="print">是否实现自动打印</param> 

    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的界面,但是只能实现打印功能,不能另存。

时间: 2024-10-03 17:13:44

C# 打印本地PDF文件的相关文章

用apache做为代理下载本地pdf文件

有一些公司会用apache做为代理,下载服务器上的pdf文件.以下是apache做为代理的配置 一. 环境 centos6.5  192.168.69.3 二. yum安装apache 服务 [[email protected] ~]$ rpm -qa httpd    //查看是否有rpm包安装的apache服务httpd-2.2.15-60.el6.centos.5.x86_64 [[email protected] ~]$ rpm -e httpd-2.2.15-60.el6.centos

利用PDF.JS插件解决了本地pdf文件在线浏览问题(根据需要隐藏下载功能,只保留打印功能)

我是在IE11和谷歌上做的测试,都可以显示,把做出的东西记录下来,方便大家还有自己学习! 可以在IIS7服务器上也可以下载Tomcat来做服务器 Tomcat下载地址   http://pan.baidu.com/s/1dEEUFQD 根据百度经验安装和配置Tomcat   http://jingyan.baidu.com/article/870c6fc33e62bcb03fe4be90.html 有关pdf.js的介绍在如下网址   https://github.com/mozilla/pdf

虚拟打印为pdf文件

Ubuntu14.04下: 1. 安装cups 和cups-pdf,其中cups-pdf是虚拟打印的主要模块: sudo apt-get install cups-pdf 2. cups-pdf 的 backend 要求 root 权限,所以设置一下权限: sudo chmod 4755 /usr/lib/cups/backend/cups-pdf 3. 用文本编辑器打开文件,选打印->打印到文件(这里可以设置目标文件路径)->OK 现在就得到了pdf格式的文件了.

PDF文件如何阅读?PDF文件怎么生成?

办公我们都会用到PDF文件,那么PDF文件如何阅读?PDF文件怎么生成?我们要想阅读PDF文件,就该知道PDF文件是什么? PDF文件是便携式文档,从字面上就可以看出,这是一张方便携带的文档,PDF文件在各个操作系统是通用的,就是因为这一个特点,PDF文件现在已经成为通用文件啦. PDF文件用过的人都熟悉,那么PDF有那些优点? 1阅读方便:PDF文件可以在任何电脑上查看,手机上有些也能查看 2打印:PDF文件是以语言图像模型做基础,在那种打印机上都可以保证精确的打印效果 3加密:你可以随便控制

Print2Flash在线浏览打印pdf文件

原理:把 pdf 文件转换成 Flash 文件,再显示这个 Flash. 1 .安装print2flashsetup64.exe2.停止Print2Flash3服务(如果配置了服务并启动了的话)3.拷贝p2fServer.exe.Print2Flash.exe到安装目标文件夹替换原文件4.拷贝Print2FlashPrinter3_2.dll到以下文件夹替换原始文件: C:\Windows\System32\spool\drivers\x64\ 以及 C:\Windows\System32\sp

javaWeb项目springMVC框架下利用ITextpdf 工具打印PDF文件的方法(打印表单、插入图片)

方法一:打印PDF表单以及在PDF中加入图片 需要的资料: jar包:iTextAsian.jar ,itext-2.1.7.jar: 源码: 1 public static void main(String args[]) throws IOException, DocumentException { 2 String fileName = "D:/testPDF.pdf"; // pdf模板 3 InputStream input = new FileInputStream(new

Android 如何本地加载pdf文件

大部分app打开pdf文件是通过intent调起手机中能打开pdf文件的工具,来查看pdf文件,如果需求是,用户在app内下载好pdf文件后,不通过第三方的工具,本地打开. 这样的需求要怎么实现呢?上网查了一些资料,发现了一个很好用PDF开源库. 使用起来也很简单,首先添加PDFView的引用 compile 'com.github.barteksc:android-pdf-viewer:2.4.0' 布局中引用PdfView <LinearLayout xmlns:android="ht

加密PDF文件的打印问题

工作中遇到网上下载的PDF文件加密,并且不能打印 解决方法: 1.解密: 去网站下载解密软件,1M左右:http://www.onlinedown.net/soft/19939.htm 直接解压,运行 2.打印 建议用谷歌浏览器直接打开PDF文件,就可以打印了,也可以调整纸张大小. 3.错误须知: 想把PDF文件转换成word文档,有网上在线转换的,亲测 就迅捷的转换能用,但是还是有数据丢失的问题. 在线转换地址:http://app.xunjiepdf.com/pdf2word 若要转换了自己

java从远程服务器获取PDF文件并后台打印(使用pdfFox)

一.java原生方式打印PDF文件 正反面都打印,还未研究出只打印单面的方法,待解决 public static void printFile(String path) throws Exception { File file = new File(path); File[] fies=file.listFiles(); for(File f:fies){ System.out.println("file "+f.getName()); String fileExt=f.getName