偶遇需要解析Word为单张图,此做
http://git.oschina.net/jiailiuyan/OfficeDecoder
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Text;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Aspose.Words.Rendering; namespace Helpers
{
public static class WordHelper
{ /// <summary> 获取 Word 每一页的高度 此项获得整个页面</summary>
/// <param name="pageinfo"></param>
/// <returns></returns>
private static int GetWordHeight(PageInfo pageinfo)
{
var flag = BindingFlags.NonPublic | BindingFlags.Instance;
// 经过反编译看到 Word 中 PageInfo 的高度属性被混淆为 Int32_1
var pageheight = pageinfo.GetType().GetProperty("Int32_1", flag);
if (pageheight != null)
{
var height = pageheight.GetValue(pageinfo, null);
if (height != null)
{
return (int)height;
}
} return (int)pageinfo.WidthInPoints;
} /// <summary> 获取 Word 每一页的宽度 此项获得整个页面 </summary>
/// <param name="pageinfo"></param>
/// <returns></returns>
private static int GetWordWidth(PageInfo pageinfo)
{
var flag = BindingFlags.NonPublic | BindingFlags.Instance;
// 经过反编译看到 Word 中 PageInfo 的宽度属性被混淆为 Int32_0
var pagewidth = pageinfo.GetType().GetProperty("Int32_0", flag);
if (pagewidth != null)
{
var width = pagewidth.GetValue(pageinfo, null);
if (width != null)
{
return (int)width;
}
} return (int)pageinfo.WidthInPoints;
} /// <summary> 转换 Word 的每一页为图片 </summary>
/// <param name="wordfile"></param>
/// <param name="savedirectory"></param>
/// <returns></returns>
public static List<string> ConvertToImages(string wordfile, string savedirectory = "")
{
// 返回的图片绝对路径集合
List<string> images = new List<string>(); // 获取 Word 文件名称
var wordname = System.IO.Path.GetFileNameWithoutExtension(wordfile); // 如果指定了保存路径,则使用传入的路径,否则在 Word 文件的同级创建同名文件夹当作保存路径
savedirectory = string.IsNullOrWhiteSpace(savedirectory) ? System.IO.Path.GetDirectoryName(wordfile) : savedirectory;
savedirectory = System.IO.Path.Combine(savedirectory, wordname);
// 防止保存的路径不存在因此创建保存文件夹
Directory.CreateDirectory(savedirectory); var doc = new Aspose.Words.Document(wordfile); int count = doc.PageCount;
// Aspose.Word 的单页获取索引从 0 开始
for (int i = ; i < count; i++)
{
var imagefile = System.IO.Path.Combine(savedirectory, i + ".jpg"); PageInfo pageInfo = doc.GetPageInfo(i);
var size = pageInfo.GetSizeInPixels(, );
int width = size.Width;
int height = size.Height; using (var img = new Bitmap(width, height))
{
using (var gr = Graphics.FromImage(img))
{
gr.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
gr.FillRectangle(System.Drawing.Brushes.White, , , width, height);
doc.RenderToSize(i, gr, , , width, height);
} // 生成图像
img.Save(imagefile);
images.Add(imagefile);
}
} return images;
} /// <summary> 把 Word 转换为 Pdf </summary>
/// <param name="wordfile"></param>
/// <param name="pdffile"></param>
/// <returns></returns>
public static bool ConvertWordToPdf(string wordfile, string pdffile)
{
try
{
var doc = new Aspose.Words.Document(wordfile);
doc.Save(pdffile, Aspose.Words.SaveFormat.Pdf);
return true;
}
catch { }
return false;
} }
}