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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM