博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PDF/WORD/EXCEL 图片预览
阅读量:5131 次
发布时间:2019-06-13

本文共 14003 字,大约阅读时间需要 46 分钟。

一、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{    ///     /// Interaction logic for Window1.xaml    ///     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)
///         /// 把Word文件转换成为PDF格式文件        ///         /// 源文件路径        /// 目标文件路径         /// 
true=转换成功
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

 

三、第三方组件

 

其他参考:

 

转载于:https://www.cnblogs.com/i-blog/p/4260754.html

你可能感兴趣的文章
SQL更新某列包含XX的所有值
查看>>
网易味央第二座猪场落户江西 面积超过3300亩
查看>>
面试时被问到的问题
查看>>
spring 事务管理
查看>>
VS2008 去掉msvcr90的依赖
查看>>
当前记录已被另一个用户锁定
查看>>
Bootstrap
查看>>
Node.js 连接 MySQL
查看>>
ACM-ICPC 2018 world final A题 Catch the Plane
查看>>
那些年,那些书
查看>>
面向对象六大基本原则的理解
查看>>
注解小结
查看>>
java代码编译与C/C++代码编译的区别
查看>>
Bitmap 算法
查看>>
转载 C#文件中GetCommandLineArgs()
查看>>
list control控件的一些操作
查看>>
精读《useEffect 完全指南》
查看>>
SNF快速开发平台MVC-EasyQuery-拖拽生成SQL脚本
查看>>
DrawerLayout实现双向侧滑
查看>>
MySQL入门很简单-触发器
查看>>