计算机系统应用教程网站

网站首页 > 技术文章 正文

使用Aspose.Words处理word模板 aspose教程

btikc 2024-10-26 08:48:30 技术文章 7 ℃ 0 评论

前言

公司项目(2018.04.15所写)中,大多模板都是Word格式,处理word也是一直是Office COM组件处理,最近是在一台机器上老是遇到打印假死,且异常捕捉不到,即使捕捉到也是RPC不可用.在我电脑上一直没遇到这种情况,所以就有换替换处理Word组件的想法.

因为公司项目是很早的项目,还是使用.Net Framework 3.5,所以最终尝试使用Aspose.Words组件.

处理Word组件大体有这几类:

  1. Microsoft.Office.Interop COM,要创建word/execl进程,使用中会遇到各种问题.
  2. OpenXml 微软开源的Office组件,在项目中引用不可用.对.Net Framework 4.0支持较好.
  3. NPOI 开源组件,基于Java POI组件移植,处理Excel比较好,对Word不太好.
  4. DocX 开源组件(更推荐这个,当然这个也有收费版本),支持.Net Framework 4.0及更高版本.


使用Aspose.Words将Word转PDF 中,简单使用了替换文本,书签替换. 这里主要简绍怎么使用处理长文本替换和插入图片.

长文本替换(主要是使用创建表格方式实现)

/// <summary>
/// 长文本要用书签替换内容
/// </summary>
/// <param name="doc">文档</param>
/// <param name="bookmarkName">书签名</param>
/// <param name="content">长文本</param>
public static void replaceLongTxt(Document doc, string bookmarkName, string content)
{
    if (doc.Range.Bookmarks[bookmarkName] != null)
    {
        DocumentBuilder builder = new DocumentBuilder(doc);
        builder.MoveToBookmark(bookmarkName);
        doc.Range.Bookmarks[bookmarkName].Text = "";
        builder.StartTable();       //创建table
        builder.CellFormat.Width = 480;                          //设置单元格宽度
        builder.CellFormat.Borders.LineStyle = LineStyle.None;   //设置单元格边框
        Cell cell = builder.InsertCell();
        builder.Write(content);
        builder.EndTable();         //结束table创建
    }
}

插入图片

/// <summary>
/// 插入图片,指定宽度和高度
/// </summary>
/// <param name="doc">文档</param>
/// <param name="imgName">图片名称</param>
/// <param name="width">宽度</param>
/// <param name="height">高度</param>
public static void insertImg(Document doc, string imgName, double width, double height)
{
    DocumentBuilder builder = new DocumentBuilder(doc);
    builder.InsertImage(imgName,width,height);
}
/// <summary>
/// 根据书签位置,插入图片
/// </summary>
/// <param name="doc">文档</param>
/// <param name="bookMarkName">书签</param>
/// <param name="imgName">图片名称(包含图片地址)</param>
/// <param name="width">宽度</param>
/// <param name="height">高度</param>
private static void insertImg(Document doc, string bookMarkName, string imgName, double width, double height)
{
    if (doc.Range.Bookmarks[bookMarkName] != null)
    {
        DocumentBuilder builder = new DocumentBuilder(doc);
        builder.MoveToBookmark(bookMarkName);
        builder.InsertImage(imgName,width,height);
    }
}

测试代码

static void Main(string[] args)
{
    Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"));
    //长文本内容
    string longStr = @"逆向合成的基本原则是“逆向思维”,将目标化合物分子分解成基本的、可获得的组分,然后分析可以用哪些容易得到的试剂、通过哪些已知的化学反应步骤来合成。提出这一方法的美国哈佛大学教授E.J。科里曾获1990年诺贝尔化学奖。

“逆向合成是有机化学的终极学科,化学家需要数年才能掌握它——就如同下棋一样,除了学习专业知识,还需要很好的直觉和创造性。";

    Document doc = new Document("提取pdf.docx");  //加载docx文档
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.MoveToBookmark("jcbg");             //先将光标移动书签位置
    insertImg(doc, "insert.png", 485, 560);     //插入图片1
    insertImg(doc, "insert2.jpg", 485, 560);    //插入图片2
    replaceLongTxt(doc, "jcbg", longStr);       //替换长文本

    insertImg(doc, "qm1", "1.jpg", 50, 30);     //直接根据书签插入图片
     
    Guid guid = Guid.NewGuid();
    doc.Save(string.Format("{0}.pdf", guid), SaveFormat.Pdf);   //生成pdf

    Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"));
    Console.ReadKey();
}

以上只是一个模板所需的功能,还没有在正式的项目经过测试.以后用到那些在补充吧!

个人能力有限,如果您发现有什么不对,请私信我

如果您觉得对您有用的话,可以点个赞或者加个关注,欢迎大家一起进行技术交流

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表