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;
        }

  • 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("完成");
        }

  • 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)
        {

        }
    }
}

二、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;
        }

  • 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);

        }

三、第三方组件

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

时间: 2024-10-12 08:49:13

PDF/WORD/EXCEL 图片预览的相关文章

Word/Excel 在线预览

① 使用Microsoft的Office组件将文件直接转换为html文件(优点:代码实现最简单,工作强度最小.缺点:效果极差) ②使用Microsoft的Office组件将文件转换为PDF格式文件,然后再使用pdf2swf转换为swf文件,也就是flash文件在使用FlexPaper展示出来(优点:预览效果能接受,缺点:代码量大) ③使用Office online(优点:表现完美,缺点:不适合中小企业应用)

Atitit.office&#160;word&#160;&#160;excel&#160;&#160;ppt&#160;pdf&#160;的web在线预览方案与html转换方案&#160;attilax&#160;总结

Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结 1. office word  excel pdf 的web预览要求1 1.1. 显示效果要好1 1.2. 可以自定义显示界面1 1.3. 不需要控件,兼容性好1 1.4. 支持编辑操作1 2. 纯html预览解决之道(自由的格式)1 3. 转换swf flash方案2 4. 转换pdf方式..更多的浏览器已经直接支持pdf格式查看2 5. 控件方式2 6. Hyb

dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术:HTML5的api,作为一名前端的菜鸟,没什么可说的,直接分享自己学习的资料: 关于HTML5 的这些新的特性大家可以到Mozilla的开发者社区MDN https://developer.mozilla.org/zh-CN/ 上查HTML5的资料 还有就是发掘到的比较牛逼的一篇博客:http:/

jquery实现上传图片及图片大小验证、图片预览效果代码

jquery实现上传图片及图片大小验证.图片预览效果代码 上传图片验证 */ function submit_upload_picture(){     var file = $('file_c').value;     if(!/.(gif|jpg|jpeg|png|gif|jpg|png)$/.test(file)){            alert("图片类型必须是.gif,jpeg,jpg,png中的一种")        }else{      $('both_form')

图片预览

下方点击小图标,上方显示大图标. 布局文件如下 <body> <h1>图片预览</h1> <p> <img id="largeImg" src="images/img1-lg.jpg" alt="Large Image" /> </p> <p class="thumbs"> <!-- 点击小图片 看到大图片 只是超连接的话 会新打开页面,

Uploadify—借助Uploadify插件实现图片预览时如何解决Chrome浏览器报“喔唷,崩溃啦”

今天借助Uploadify插件实现了图片预览及其上传的功能,可是在Chrome浏览器中会时不时地出现如下图所示的情况: 解决方法:使用这种方法引用该插件js文件: <script type="text/javascript"> document.write("<script type='text/javascript' src='<%=basePath %>js/uploadify/jquery.uploadify.min.js?" +

js 图片预览

图片预览 $('#pac_recipe').change(function() { var imgsrc = ''; if(this.files && this.files[0]) { //chrome firefox imgsrc = window.URL.createObjectURL(this.files[0]); } else { //IE下,使用滤镜 this.select(); imgsrc = document.selection.createRange().text; }

HTML5实现图片预览功能

两种方式实现 URL FileReader Index.jsp文件 <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

纯前端的图片预览

尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/3925827.html ^_^肥仔John 一.前言 图片上传是一个普通不过的功能,而图片预览就是就是上传功能中必不可少的子功能了.在这之前,我曾经通过订阅input[type=file]元素的onchange事件,一旦更改路径则将图片上传至服务器,接着就获取图片路径并赋值到img元素上.先不管文件异步提交的解决方案,就是服务端清理那些临时的预览图片已经增加不少工作量了. 偶然从MDN上找到纯前