zoukankan      html  css  js  c++  java
  • WPF解析Word为图片

      偶遇需要解析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 = 0; i < count; i++)
                {
                    var imagefile = System.IO.Path.Combine(savedirectory, i + ".jpg");
    
                    PageInfo pageInfo = doc.GetPageInfo(i);
                    var size = pageInfo.GetSizeInPixels(1, 96);
                    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, 0, 0, width, height);
                            doc.RenderToSize(i, gr, 0, 0, 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;
            }
    
        }
    }
    View Code
  • 相关阅读:
    传值,传引用?一切都是传地址
    前端神器sublime
    PHP中文乱码的常见解决方法总结
    css mainDiv和popbox居中
    中文系统 上传file的input显示英文
    css 任何元素都可以加背景图
    xpath的简明语法
    JQuery技巧总结
    当工作和爱情不如意的时候...
    微软2008年将发布的产品全表
  • 原文地址:https://www.cnblogs.com/jiailiuyan/p/4838504.html
Copyright © 2011-2022 走看看