首页 > 代码库 > PDF/WORD/EXCEL 图片预览

PDF/WORD/EXCEL 图片预览

一、PDF/WORD/EXCEL 转 XPS 转 第一页内容 转 图片

  • WORD、EXCEL转XPS (Office2010)
技术分享
 public bool WordToXPS(string sourcePath, string targetPath)        {            bool result = false;            Microsoft.Office.Interop.Word.WdExportFormat exportFormat = Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatXPS;            Microsoft.Office.Interop.Word.ApplicationClass application = null;            Microsoft.Office.Interop.Word.Document document = null;            try            {                application = new Microsoft.Office.Interop.Word.ApplicationClass();                application.Visible = false;                document = application.Documents.Open(sourcePath);                document.SaveAs2();                document.ExportAsFixedFormat(targetPath, exportFormat);                result = true;            }            catch (Exception e)            {                Console.WriteLine(e.Message);                result = false;            }            finally            {                if (document != null)                {                    document.Close();                    document = null;                }                if (application != null)                {                    application.Quit();                    application = null;                }                GC.Collect();                GC.WaitForPendingFinalizers();                GC.Collect();                GC.WaitForPendingFinalizers();            }            return result;        }
View Code
  • PDF转XPS (将机器上默认打印机设置为Microsoft XPS Document Writer)
技术分享
        //Win32 Api定义        [DllImport("user32.dll")]        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);        [DllImport("user32.dll")]        static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfeter, string lpszClass, string lpszWindow);        [DllImport("user32.dll")]        static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, String lParam);        [DllImport("user32.dll")]        static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);        //Win32消息定义        const uint WM_SETTEXT = 0x000c;        const uint WM_IME_KEYDOWN = 0x0290;        const uint WM_LBUTTONDOWN = 0x0201;        const uint WM_LBUTTONUP = 0x0202;        private void button3_Click(object sender, EventArgs e)        {            string pdf_filepath = @"d:\原文件.pdf"; // 需要转换的PDF文件            string xps_filepath = @"d:\目标文件.xps"; // 目标XPS文件            System.Diagnostics.Process p = new System.Diagnostics.Process();            //不现实调用程序窗口,但是对于某些应用无效            p.StartInfo.CreateNoWindow = true;            p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;            //采用操作系统自动识别的模式            p.StartInfo.UseShellExecute = true;            //要打印的文件路径,可以是WORD,EXCEL,PDF,TXT等等            p.StartInfo.FileName = pdf_filepath;            //p.StartInfo.FileName = @"C:\Documents and Settings\Administrator\桌面\MouseWithoutBorders\2.bmp";            //指定执行的动作,是打印,即print,打开是 open            p.StartInfo.Verb = "print";            //开始            p.Start();            System.Threading.Thread.Sleep(5 * 1000);            IntPtr hWnd = FindWindow("#32770", "文件另存为");            IntPtr hChild;            // 由于输入框被多个控件嵌套,因此需要一级一级的往控件内找到输入框            hChild = FindWindowEx(hWnd, IntPtr.Zero, "DUIViewWndClassName", String.Empty);            hChild = FindWindowEx(hChild, IntPtr.Zero, "DirectUIHWND", String.Empty);            hChild = FindWindowEx(hChild, IntPtr.Zero, "FloatNotifySink", String.Empty);            hChild = FindWindowEx(hChild, IntPtr.Zero, "ComboBox", String.Empty);            hChild = FindWindowEx(hChild, IntPtr.Zero, "Edit", String.Empty); // File name edit control            // 向输入框发送消息,填充目标xps文件名            SendMessage(hChild, WM_SETTEXT, IntPtr.Zero, xps_filepath);            // 等待1秒钟            System.Threading.Thread.Sleep(1000);            // 找到对话框内的保存按钮            hChild = IntPtr.Zero;            hChild = FindWindowEx(hWnd, IntPtr.Zero, "Button", "保存(&S)");            // 向保存按钮发送2个消息,以模拟click消息,借此来按下保存按钮            PostMessage(hChild, WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero);            PostMessage(hChild, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);            /***** 跟踪打印机队列中的文件打印状况,知道文件打印完成为止 *****/            // 调用本地打印机队列            System.Printing.LocalPrintServer prtSrv = new System.Printing.LocalPrintServer();            System.Printing.PrintQueue queue = prtSrv.GetPrintQueue("Microsoft XPS Document Writer");            //一直监视打印队列,知道打印队列中没有打印任务时结束            do            {                // 等待处理                  System.Threading.Thread.Sleep(1000);                // 读取队列的最新信息                queue.Refresh();            } while (queue.NumberOfJobs > 0);            MessageBox.Show("完成");        }
View Code
  • XPS转图片
技术分享
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using System.Windows.Xps.Packaging;using Microsoft.Win32;using System.Drawing.Imaging;using System.Drawing;using System.IO;namespace Xps_Reader{    /// <summary>    /// Interaction logic for Window1.xaml    /// </summary>    public partial class Window1 : Window    {        BitmapEncoder bitmapEncoder = null;        MemoryStream memoryStream = new MemoryStream();        public Window1()        {            InitializeComponent();                        AddCMD(ApplicationCommands.Open, MenuItem_Checked);            AddCMD(ApplicationCommands.Close, exitMenu_Checked);            AddCMD(ApplicationCommands.Save, saveMenu_Checked);        }        private XpsDocument xpsDocument;        //绑定菜单命令        private void AddCMD(ICommand cmd,ExecutedRoutedEventHandler e) {            var cb = new CommandBinding(cmd);            cb.Executed += new ExecutedRoutedEventHandler(e);            CommandBindings.Add(cb);        }        public MemoryStream OutputStream        {            get;            private set;        }       //打开xps文件        private void MenuItem_Checked(object sender, ExecutedRoutedEventArgs e)        {                       OpenFileDialog dlg = new OpenFileDialog();            dlg.Filter = "xps|*.xps";            //dlg.Filter = "jpg|*.jpg";            if (dlg.ShowDialog() == true) {                try                {                   if (xpsDocument != null)                                    xpsDocument.Close();                   xpsDocument = new XpsDocument(dlg.FileName, System.IO.FileAccess.Read);                   FixedDocumentSequence documentPageSequence = xpsDocument.GetFixedDocumentSequence();                   documentPageView1.Document = documentPageSequence;                   bitmapEncoder = new JpegBitmapEncoder();                   //for (int i = 0; i < documentPageSequence.DocumentPaginator.PageCount;i++ )                   //{                   //    DocumentPage documentPage = documentPageSequence.DocumentPaginator.GetPage(i);                   //    RenderTargetBitmap targetBitmap = new RenderTargetBitmap((int)documentPage.Size.Width, (int)documentPage.Size.Height, 96.0, 96.0, PixelFormats.Pbgra32);                   //    targetBitmap.Render(documentPage.Visual);                   //    bitmapEncoder.Frames.Add(BitmapFrame.Create(targetBitmap));                   //}                   ////bitmapEncoder.Save(memoryStream);                   DocumentPage documentPage = documentPageSequence.DocumentPaginator.GetPage(0);                   RenderTargetBitmap targetBitmap = new RenderTargetBitmap((int)documentPage.Size.Width, (int)documentPage.Size.Height, 96.0, 96.0, PixelFormats.Pbgra32);                   targetBitmap.Render(documentPage.Visual);                   bitmapEncoder.Frames.Add(BitmapFrame.Create(targetBitmap));                   xpsDocument.Close();                }                catch(Exception ex)                {                    throw (ex);                }                                            }                    }        private void exitMenu_Checked(object sender, ExecutedRoutedEventArgs e)        {            this.Close();        }        private void saveMenu_Checked(object sender, ExecutedRoutedEventArgs e)        {            //创建一个保存对话框对象            SaveFileDialog sfd = new SaveFileDialog();            //XpsImage image = new XpsImage();                       string a;            //设置对话框的各项属性            sfd.Title = "转化为";            sfd.OverwritePrompt = true;            sfd.CheckPathExists = true;            sfd.Filter = "gif|*.gif";            if (sfd.ShowDialog() == true)            {                string strFileName = sfd.FileName;                bitmapEncoder.Save(memoryStream);                Bitmap bitMap = new Bitmap(memoryStream);                bitMap.Save(strFileName);                //this.OutputStream = memoryStream;                //bitmap.Save(strFileName, ImageFormat.Jpeg);                //this.Text = "Image Converter: " + strFileName;                            }        }        private void MenuItem_Click(object sender, RoutedEventArgs e)        {        }    }}
View Code

 

二、WORD/EXCEL 转PDF 转 第一页内容 转 图片

  •  WORD/EXCEL 转 PDF (Office2010)
技术分享
        /// <summary>        /// 把Word文件转换成为PDF格式文件        /// </summary>        /// <param name="sourcePath">源文件路径</param>        /// <param name="targetPath">目标文件路径</param>         /// <returns>true=转换成功</returns>        public bool WordToPDF(string sourcePath, string targetPath)        {            bool result = false;            Microsoft.Office.Interop.Word.WdExportFormat exportFormat = Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatXPS;            Microsoft.Office.Interop.Word.ApplicationClass application = null;            Microsoft.Office.Interop.Word.Document document = null;            try            {                application = new Microsoft.Office.Interop.Word.ApplicationClass();                application.Visible = false;                document = application.Documents.Open(sourcePath);                document.SaveAs2();                document.ExportAsFixedFormat(targetPath, exportFormat);                result = true;            }            catch (Exception e)            {                Console.WriteLine(e.Message);                result = false;            }            finally            {                if (document != null)                {                    document.Close();                    document = null;                }                if (application != null)                {                    application.Quit();                    application = null;                }                GC.Collect();                GC.WaitForPendingFinalizers();                GC.Collect();                GC.WaitForPendingFinalizers();            }            return result;        }
View Code
  • PDF 转 图片 (Adobe Acrobat 9 Pro)
技术分享
public static void ConvertPdf2Image(string pdfFilePath, string imageDirectoryPath,            int beginPageNum, int endPageNum, ImageFormat format, double zoom = 1)        {            Acrobat.CAcroPDDoc pdfDoc = null;            Acrobat.CAcroPDPage pdfPage = null;            Acrobat.CAcroRect pdfRect = null;            Acrobat.CAcroPoint pdfPoint = null;            //生成操作Pdf文件的Com对象            pdfDoc = (Acrobat.CAcroPDDoc)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.PDDoc", "");            //检查输入参数            if (!pdfDoc.Open(pdfFilePath))            {                throw new FileNotFoundException(string.Format("源文件{0}不存在!", pdfFilePath));            }            if (!Directory.Exists(imageDirectoryPath))            {                Directory.CreateDirectory(imageDirectoryPath);            }            if (beginPageNum <= 0)            {                beginPageNum = 1;            }            if (endPageNum > pdfDoc.GetNumPages() || endPageNum <= 0)            {                endPageNum = pdfDoc.GetNumPages();            }            if (beginPageNum > endPageNum)            {                throw new ArgumentException("参数\"beginPageNum\"必须小于\"endPageNum\"!");            }            if (format == null)            {                format = ImageFormat.Png;            }            if (zoom <= 0)            {                zoom = 1;            }            //转换            for (int i = beginPageNum; i <= endPageNum; i++)            {                //取出当前页                pdfPage = (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i - 1);                //得到当前页的大小                pdfPoint = (Acrobat.CAcroPoint)pdfPage.GetSize();                //生成一个页的裁剪区矩形对象                pdfRect = (Acrobat.CAcroRect)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.Rect", "");                //计算当前页经缩放后的实际宽度和高度,zoom==1时,保持原比例大小                int imgWidth = (int)((double)pdfPoint.x * zoom);                int imgHeight = (int)((double)pdfPoint.y * zoom);                //设置裁剪矩形的大小为当前页的大小                pdfRect.Left = 0;                pdfRect.right = (short)imgWidth;                pdfRect.Top = 0;                pdfRect.bottom = (short)imgHeight;                //将当前页的裁剪区的内容编成图片后复制到剪贴板中                pdfPage.CopyToClipboard(pdfRect, 0, 0, (short)(100 * zoom));                IDataObject clipboardData = Clipboard.GetDataObject();                //检查剪贴板中的对象是否是图片,如果是图片则将其保存为指定格式的图片文件                if (clipboardData.GetDataPresent(DataFormats.Bitmap))                {                    Bitmap pdfBitmap = (Bitmap)clipboardData.GetData(DataFormats.Bitmap);                    pdfBitmap.Save(                        Path.Combine(imageDirectoryPath, i.ToString("0000") + "." + format.ToString()), format);                    pdfBitmap.Dispose();                }            }            //关闭和释放相关COM对象            pdfDoc.Close();            Marshal.ReleaseComObject(pdfRect);            Marshal.ReleaseComObject(pdfPoint);            Marshal.ReleaseComObject(pdfPage);            Marshal.ReleaseComObject(pdfDoc);        }
View Code

 

三、第三方组件

  • Aspose.Words for .NET
  • http://q.cnblogs.com/q/31997/

 

http://blog.csdn.net/baiyang_liu/article/details/8546443

 

PDF/WORD/EXCEL 图片预览