Unity3D之日常操作-Aspose.Words.dll-U3D读写word

记录日常操作。而且发现Aspose.Words.dll 关于U3D 的帖子不是太多,再此分享下,也算记录下防止自己日后忘记。
直接展示用法和代码
dll:
Aspose.Words.dll 解析word的核心
I18N.dll、I18N.CJK.dll、I18N.West.dll 这三个为辅助,否则打包后会报错。

ReplaceAndInsertImage 类 引用其他帖子,不过我又加了改进,新增了重载及宽高

public class ReplaceAndInsertImage : IReplacingCallback
{
	public enum ImageType 
    {
        File,
        Byte,
        Stream
    }
    public ImageType type;
    /// <summary>
    /// 需要插入的图片路径
    /// </summary>
    public string url { get; set; }
    public byte[] Byt { get; set; }
    public Stream Strea { get; set; }
    public double W { get; set; }
    public double H { get; set; }
    public ReplaceAndInsertImage( string url,double w=20d,double h = 20d, ImageType imageType=ImageType.File)
    {
        this.W = w;
        this.H = h;
        this.url = url;
        this.type = imageType;
    }
    public ReplaceAndInsertImage( byte[] byt, double w = 20d, double h = 20d, ImageType imageType=ImageType.Byte)
    {
        this.W = w;
        this.H = h;
        this.Byt = byt;
        this.type = imageType;
    }
    public ReplaceAndInsertImage(Stream stre, double w = 20d, double h = 20d, ImageType imageType=ImageType.Stream)
    {
        this.W = w;
        this.H = h;
        this. Strea = stre;
        this.type = imageType;
    }
    public ReplaceAction Replacing(ReplacingArgs e)
    {
        //获取当前节点
        var node = e.MatchNode;
        //获取当前文档
        Document doc = node.Document as Document;
        DocumentBuilder builder = new DocumentBuilder(doc);
        //将光标移动到指定节点
        builder.MoveTo(node);
        //插入图片
        switch (type)
        {
            case ImageType.File:
                builder.InsertImage(url, W, H);
                break;
            case ImageType.Byte:
                builder.InsertImage(Byt, W, H);
                break;
            case ImageType.Stream:
                builder.InsertImage(Strea, W, H);
                break;
            default:
                break;
        }
        return ReplaceAction.Replace;
    }
}

下边是使用方法:

1.导出word

/// <summary>
/// Aspose.Words   导出word 示例,
/// 已打包测试没问题
/// 利用替换法 快速替换word模板中的内容, (文字 或者图片)
/// </summary>
public class WordTemplateReadandWrite : MonoBehaviour
{

    void Start()
    {
        Load();
    }
    public Text t;
    Document Doc;
    public void Load() 
    {
        //前提 模板不 能是打开状态,不能被任何进程占用
		// try 只是我测试的时候随便加的   
        try
        {
            string path = Application.streamingAssetsPath + "/WordTemplateOne.doc";
            Doc = new Aspose.Words.Document(path);
            t.text = "成功";
        }
        catch (System.Exception e)
        {
            t.text = e.Message;
        }
        FindReplaceOptions findReplaceOptions = new FindReplaceOptions();
        //替换特殊标志形式   替换  &施工单位&     为 安筑1
        Doc.Range.Replace("&施工单位&", "安筑1", findReplaceOptions);
        //替换特殊标志形式   替换  &工程名称&     为 安筑
        Doc.Range.Replace("&工程名称&","安筑", findReplaceOptions);


        //这里只是展示了  Regex 和string  两个参数的用法,并非是一定要用某个
        //下边展示了图片插入的三种方法。完整路径----字节byte[]-----文件流Stream
        Regex regex = new Regex("&Image&");
        FindReplaceOptions findReplaceOptions1 = new FindReplaceOptions(new ReplaceAndInsertImage(@"C:\Users\Miggle\Desktop\111.png"));
        Doc.Range.Replace(regex,"", findReplaceOptions1);

        FindReplaceOptions findReplaceOptions2 = new FindReplaceOptions(new ReplaceAndInsertImage(File.ReadAllBytes(@"C:\Users\Miggle\Desktop\111.png")));
        Doc.Range.Replace("&Image1&", "", findReplaceOptions2);

        FindReplaceOptions findReplaceOptions3 = new FindReplaceOptions(new ReplaceAndInsertImage(new FileStream(@"C:\Users\Miggle\Desktop\111.png", FileMode.Open)));
        Doc.Range.Replace("&Image2&", "", findReplaceOptions3);


        string Savepath1 = Application.streamingAssetsPath + "/WordTemplateOne1.doc";
        //   覆盖保存
        Doc.Save(Savepath1);
       
    }
}


2.word 转图片


        #region Word
        /// <summary>
        /// Word 转图片
        /// </summary>
        /// <param name="path">word 路径</param>
        /// <param name="Resolution">图片分辨率</param>
        /// <returns></returns>
        public static List<Texture2D> WordToTextures(string path,float Resolution=96)
        {
            List<Texture2D> textures = new List<Texture2D>();
            try
            {
                var doc = new Aspose.Words.Document(path);
                Aspose.Words.Saving.ImageSaveOptions imageOptions = new Aspose.Words.Saving.ImageSaveOptions(Aspose.Words.SaveFormat.Png);
                imageOptions.PrettyFormat = true;
                imageOptions.Resolution = Resolution;//设置图片质量(越大越清晰)
                for (int i = 0; i < doc.PageCount; i++)
                {
                    imageOptions.PageIndex = i;
                    using (MemoryStream stream = new MemoryStream())
                    {
                        try
                        {
                            doc.Save(stream, imageOptions);
                            System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
                            int width = image.Width; int height = image.Height;
                            image.Dispose();
                            Texture2D texture2D = new Texture2D(width, height);
                            texture2D.LoadImage(stream.ToArray());
                            textures.Add(texture2D);
                        }
                        catch (Exception e)
                        {
                            ToolMessageManager.OutputMessage(e.Message);
                            textures.Add(null);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                ToolMessageManager.OutputMessage(e.Message);
            }
            return textures;
        }

        /// <summary>
        /// 加载word 后保存的临时变量
        /// </summary>
        private static Aspose.Words.Document Doc = null;
        private static Aspose.Words.Saving.ImageSaveOptions ImageOptions = null;
        /// <summary>
        /// 临时word页码长度
        /// </summary>
        public static int? WordPageCount
        {
            get
            {
                try
                {
                    return Doc?.PageCount;
                }
                catch (Exception e)
                {
                    ToolMessageManager.OutputMessage(e.Message);
                }
                return 0;
            }
        }
        /// <summary>
        /// 加载Word
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="Resolution">分辨率</param>
        /// <returns></returns>
        public static bool LoadWord(string path, float Resolution = 96)
        {
            Doc = null;
            ImageOptions = null;
            try
            {
                Doc = new Aspose.Words.Document(path);
                ImageOptions = new Aspose.Words.Saving.ImageSaveOptions(Aspose.Words.SaveFormat.Png);
                ImageOptions.PrettyFormat = true;
                ImageOptions.Resolution = Resolution;//设置图片质量(越大越清晰)
                return Doc != null;
            }
            catch (Exception e)
            {
                ToolMessageManager.OutputMessage(e.Message);
            }
            return false;
        }
        /// <summary>
        /// 卸载临时Word
        /// </summary>
        public static void ReleaseWord()
        {
            Doc = null;
        }
        /// <summary>
        /// 加载Word(指定页码) 并转换为图片
        /// </summary>
        /// <param name="index">索引</param>
        /// <returns></returns>
        public static Texture2D WordToTexture(int index = 0)
        {
            if (Doc == null || Doc.PageCount <= index)
                return null;
            try
            {
                ImageOptions.PageIndex = index;
                using (MemoryStream stream = new MemoryStream())
                {
                    try
                    {
                        Doc.Save(stream, ImageOptions);
                        System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
                        int width = image.Width; int height = image.Height;
                        image.Dispose();
                        Texture2D texture2D = new Texture2D(width, height);
                        texture2D.LoadImage(stream.ToArray());
                        return texture2D;
                    }
                    catch (Exception e)
                    {
                        ToolMessageManager.OutputMessage(e.Message);
                    }
                }
                return null;
            }
            catch (Exception e)
            {
                ToolMessageManager.OutputMessage(e.Message);
            }
            return null;
        }
        #endregion

一上方法亲测有效,仅限于win平台,其他平台可去Aspose官网找相关sdk

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值