日期:2014-05-18 浏览次数:20706 次
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Drawing.Printing; using Microsoft.Win32; using System.Diagnostics; using Word = Microsoft.Office.Interop.Word; class PDFControl { private string adobePdfPrint = "Adobe PDF"; private string adobeDisPrint = "Acrobat Distiller"; private string regRoot = "SOFTWARE\\Adobe\\Acrobat Distiller\\"; private string printerFileName = "acrodist.exe"; private string regName = "InstallPath"; /// <summary> /// 获取acrodist.exe的安装路径 /// </summary> /// <returns></returns> private string GetAdobeDisFilePath() { RegistryKey regKey = null; RegistryKey acrodistKey = null; string printerName = string.Empty; int i; string regRootVersion = string.Empty; regKey = Registry.LocalMachine; // acrodist的4-8版本适用 for (i = 4; i < 9; i++) { regRootVersion = string.Format("{0}{1}.0", regRoot, i); acrodistKey = regKey.OpenSubKey(regRootVersion); if (acrodistKey != null) { printerName = acrodistKey.GetValue(regName, "") + "\\" + printerFileName; if (File.Exists(printerName)) { return printerName; } } } throw new Exception("Acrobat Distiller printer not found!"); } /// <summary> /// 获取Adobe Printer /// "Adobe PDF" 或 "Acrobat Distiller" /// </summary> /// <returns></returns> private string GetAdobePrinter() { foreach (string printername in PrinterSettings.InstalledPrinters) { if (printername.ToUpper().IndexOf(adobePdfPrint.ToUpper()) != -1 || printername.ToUpper().IndexOf(adobeDisPrint.ToUpper()) != -1) { return printername; } } return string.Empty; } public void ConvertWord2Pdf(string sourceFile) { if (PrinterSettings.InstalledPrinters.Count == 0) throw new Exception("Did not find the printer, please install the printer."); if (!File.Exists(sourceFile)) throw new Exception(string.Format("File not found:{0}", sourceFile)); string strDir = Path.GetDirectoryName(sourceFile); string strName = Path.GetFileNameWithoutExtension(sourceFile); string prnFile = string.Format("{0}\\{1}.prn",strDir,strName); string pdfFile = string.Format("{0}\\{1}.pdf",strDir,strName); object objPrnFile = (object)prnFile; object background = true; object printToFile = true; object collate = true; object append = false; object manualDuplexPrint = false; object copies = false; object range = Word.WdPrintOutRange.wdPrintAllDocument; object missing = System.Reflection.Missing.Value; string msg = string.Empty; string adobePrinter = GetAdobePrinter(); if (adobePrinter.Length == 0) throw new Exception("Did not find Adobe PDF printer or Acrobat Distiller printer, please install the printer.&quo