码迷,mamicode.com
首页 > 其他好文 > 详细

PDF/WORD/EXCEL 图片预览

时间:2015-01-29 20:49:19      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:

一、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

 

三、第三方组件

 

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

 

PDF/WORD/EXCEL 图片预览

标签:

原文地址:http://www.cnblogs.com/i-blog/p/4260754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!