一、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( * ); 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();
// 找到对话框内的保存按钮
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();
// 读取队列的最新信息
queue.Refresh();
} while (queue.NumberOfJobs > ); 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();
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 = )
{
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 <= )
{
beginPageNum = ;
} if (endPageNum > pdfDoc.GetNumPages() || endPageNum <= )
{
endPageNum = pdfDoc.GetNumPages();
} if (beginPageNum > endPageNum)
{
throw new ArgumentException("参数\"beginPageNum\"必须小于\"endPageNum\"!");
} if (format == null)
{
format = ImageFormat.Png;
} if (zoom <= )
{
zoom = ;
} //转换
for (int i = beginPageNum; i <= endPageNum; i++)
{
//取出当前页
pdfPage = (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i - );
//得到当前页的大小
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 = ;
pdfRect.right = (short)imgWidth;
pdfRect.Top = ;
pdfRect.bottom = (short)imgHeight; //将当前页的裁剪区的内容编成图片后复制到剪贴板中
pdfPage.CopyToClipboard(pdfRect, , , (short)( * zoom)); IDataObject clipboardData = Clipboard.GetDataObject(); //检查剪贴板中的对象是否是图片,如果是图片则将其保存为指定格式的图片文件
if (clipboardData.GetDataPresent(DataFormats.Bitmap))
{
Bitmap pdfBitmap = (Bitmap)clipboardData.GetData(DataFormats.Bitmap); pdfBitmap.Save(
Path.Combine(imageDirectoryPath, i.ToString("") + "." + format.ToString()), format); pdfBitmap.Dispose();
}
} //关闭和释放相关COM对象
pdfDoc.Close();
Marshal.ReleaseComObject(pdfRect);
Marshal.ReleaseComObject(pdfPoint);
Marshal.ReleaseComObject(pdfPage);
Marshal.ReleaseComObject(pdfDoc); }

三、第三方组件

其他参考:

C#实现MS-Office文档转Pdf(Word、Execel、PowerPoint、Visio、Project)

用C#实现Word,PPT,EXECL 图片输出

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

  1. Word/Excel 在线预览

    前言 近日项目中做到一个功能,需要上传附件后能够在线预览.之前也没做过这类似的,于是乎就查找了相关资料,.net实现Office文件预览大概有这几种方式: ① 使用Microsoft的Office组件 ...

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

    Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结 1. office word  excel pdf 的web预览要求 ...

  3. 在线操作word和在线预览查找的资料记录

    在线操作word和在线预览查找的资料记录 在线操作word查找的资料记录 富文本操作 http://fex.baidu.com/ueditor/ 控件类 通过 js 调用控件操作 word 文档 1. ...

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

    http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术 ...

  5. DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

    DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库. 它是轻量级的,不依赖任何其他类库(如JQuery)并且高度可定制. 试试看! 将文件拖至此处或点击上传.(这仅仅是 dropzo ...

  6. JS魔法堂之实战:纯前端的图片预览

    一.前言 图片上传是一个普通不过的功能,而图片预览就是就是上传功能中必不可少的子功能了.在这之前,我曾经通过订阅input[type=file]元素的onchange事件,一旦更改路径则将图片上传至服 ...

  7. js实现图片预览

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. 普通图片预览及demo(非分块)

    演示地址: http://codeman35.itongyin.com:19003/v2/image.html 功能:通过加载大图预览,这种方式无法和google art 比较.只能应用于简单的图片预 ...

  9. html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

    以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上 ...

随机推荐

  1. arguments.callee查询调用b函数的是哪个函数

    // function functionname(){ // function b(){ // console.log(arguments.callee.caller.name); // } // b ...

  2. bzoj 3676: [Apio2014]回文串 回文自动机

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 844  Solved: 331[Submit][Status] ...

  3. efficient c++,单线程内存池

    基于 http://www.cnblogs.com/diegodu/p/4555018.html operator new的知识基础上 介绍这个章节的内容 对于一般直接 new 与delete 性能较 ...

  4. 多线程 (三)iOS中的锁

    锁的类别:互斥锁,递归锁,条件锁,自旋锁等 锁的实现方式:NSLock,NSRecursiveLock, NSConditionLock,@synchronized,GCD的信号量等 下面说一下常用的 ...

  5. 阿里云 EDAS-HSF 用户指南

    阿里云 EDAS-HSF 用户指南 针对 EDAS v2.3.0©Alibaba EDAS 项目组2015/8/19 1 前言本文档旨在描述阿里云 EDAS 产品中应用服务化模块的基本概念,以及如何使 ...

  6. BZOJ 3925 ZJOI2015 地震后的幻想乡

    假设我们用了边权前i小的边使得图连通,那么对答案的贡献为i/m+1 又因为期望的线性性质,我们只需要求用了i条边就可以了 不妨设g(S)(i)表示用了i条边使得点集S连通的概率 设f(S)(i)表示用 ...

  7. codeforces #310 div1 D

    一开始写了个暴力模拟绳子的摆动轨迹 然后在Test 16 T掉了 后来%了一下别人的代码,发现需要对特殊情况进行特殊处理 首先我们考虑绳子的向右摆动,设当前位置为p,绳子当前长度为L 如果其旋转中心位 ...

  8. Java中List的排序

    第一种方法,就是list中对象实现Comparable接口,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2 ...

  9. ios开发--网页中调用JS与JS注入

    先将网页弄到iOS项目中: 网页内容如下, 仅供测试: <html> <head> <meta xmlns="http://www.w3.org/1999/xh ...

  10. *IntelliJ IDEA使用Hibernate连接数据库

    在IntelliJ IDEA中配置MySQL Database.