如何将html转为word(怎样把html文件转换成word)
做开发的都知道,在项目开发中要操作导出word都挺麻烦的,大家都尽量选择使用开源的工具。
小编简单分析了下,大家现在整理三种方法供大家参考:
一、使用jquery.wordexport.js
首先引用三个文件:jquery.wordexport.js依赖于jquery以及 FileSaver.js
调用方法:
function exportword(){
$("#content").wordExport("word标题");
}
是不是超级简单。。。。。
二、使用DotNetCore.NPOI, 直接操作生成 word
首先在项目中添加nuget DotNetCore.NPOI
提供一个封装的类:NpoiWordHelper.cs
using NPOI.OpenXmlFormats.Wordprocessing;
using NPOI.XWPF.UserModel;
using System;
using System.IO;
namespace TianFeng.FrameworkCore
{
///
/// NPOI操作Word
///
public class NpoiWordHelper
{
///
/// 创建文档
///
///
public static void ExportDocument(DocumentSetting setting)
{
XWPFDocument docx = new XWPFDocument();
MemoryStream ms = new MemoryStream();
//设置文档
docx.Document.body.sectPr = new CT_SectPr();
CT_SectPr setPr = docx.Document.body.sectPr;
//获取页面大小
Tuple
setPr.pgSz.w = (ulong)size.Item1;
setPr.pgSz.h = (ulong)size.Item2;
//创建一个段落
CT_P p = docx.Document.body.AddNewP();
//段落水平居中
p.AddNewPPr().AddNewJc().val = ST_Jc.center;
XWPFParagraph gp = new XWPFParagraph(p, docx);
XWPFRun gr = gp.CreateRun();
//创建标题
if (!string.IsNullOrEmpty(setting.TitleSetting.Title))
{
gr.GetCTR().AddNewRPr().AddNewRFonts().ascii = setting.TitleSetting.FontName;
gr.GetCTR().AddNewRPr().AddNewRFonts().eastAsia = setting.TitleSetting.FontName;
gr.GetCTR().AddNewRPr().AddNewRFonts().hint = ST_Hint.eastAsia;
gr.GetCTR().AddNewRPr().AddNewSz().val = (ulong)
setting.TitleSetting.FontSize;//2号字体
gr.GetCTR().AddNewRPr().AddNewSzCs().val = (ulong)setting.TitleSetting.FontSize;
gr.GetCTR().AddNewRPr().AddNewB().val =
setting.TitleSetting.HasBold; //加粗
gr.GetCTR().AddNewRPr().AddNewColor().val = "black";//字体颜色
gr.SetText(setting.TitleSetting.Title);
}
//创建文档主要内容
if (!string.IsNullOrEmpty(setting.MainContentSetting.MainContent))
{
p = docx.Document.body.AddNewP();
p.AddNewPPr().AddNewJc().val = ST_Jc.both;
gp = new XWPFParagraph(p, docx)
{
IndentationFirstLine = 2
};
//单倍为默认值(240)不需设置,1.5倍=240X1.5=360,2倍=240X2=480
p.AddNewPPr().AddNewSpacing().line = "400";//固定20磅
p.AddNewPPr().AddNewSpacing().lineRule = ST_LineSpacingRule.exact;
gr = gp.CreateRun();
CT_RPr rpr = gr.GetCTR().AddNewRPr();
CT_Fonts rfonts = rpr.AddNewRFonts();
rfonts.ascii = setting.MainContentSetting.FontName;
rfonts.eastAsia = setting.MainContentSetting.FontName;
rpr.AddNewSz().val = (ulong)
setting.MainContentSetting.FontSize;//5号字体-21
rpr.AddNewSzCs().val = (ulong)setting.MainContentSetting.FontSize;
rpr.AddNewB().val = setting.MainContentSetting.HasBold;
gr.SetText(setting.MainContentSetting.MainContent);
//// 创建表格对象列数写死了,可根据自己需要改进或者自己想想解决方案
//XWPFTable table = docx.CreateTable(list.Count(), 4);
//for (int i = 0; i < list.Count(); i )
//{
// table.GetRow(i).GetCell(0).SetText(list[i].Id.ToString());
// table.GetRow(i).GetCell(1).SetText(list[i].Title);
// table.GetRow(i).GetCell(2).SetText(list[i].Content);
// table.GetRow(i).GetCell(3).SetText(list[i].AddTime);
//}
}
//开始写入
docx.Write(ms);
using (FileStream fs = new FileStream(setting.SavePath, FileMode.Create, FileAccess.Write))
{
byte[] data = ms.ToArray();
fs.Write(data, 0, data.Length);
fs.Flush();
}
ms.Close();
}
///
/// 设置文档
///
public class DocumentSetting
{
///
/// 文档类型,默认为A4纵向
///
public PaperType PaperType { get; set; } = PaperType.A4_V;
///
/// 保存地址,包含文件名
///
public string SavePath { get; set; }
///
/// 文档标题相关
///
public ContentItemSetting TitleSetting { get; set; }
///
/// 文档主要内容
///
public ContentItemSetting MainContentSetting { get; set; }
}
///
/// 文档内容相关
///
public class ContentItemSetting
{
///
/// 标题
///
public string Title { get; set; }
///
/// 主要内容
///
public string MainContent { get; set; }
///
/// 使用字体
///
public string FontName { get; set; } = "宋体";
///
/// 字体大小,默认2号字体
///
public int FontSize { get; set; } = 44;
///
/// 是否加粗,默认不加粗
///
public bool HasBold { get; set; } = false;
}
///
/// 纸张类型
///
public enum PaperType
{
///
/// A4纵向
///
A4_V,
///
/// A4横向
///
A4_H,
///
/// A5纵向
///
A5_V,
///
/// A5横向
///
A5_H,
///
/// A6纵向
///
A6_V,
///
/// A6横向
///
A6_H
}
#region 私有方法
///
/// 获取纸张大小,单位:Twip
///
///
///
///
private static Tuple
{
Tuple
switch (type)
{
case PaperType.A4_V:
res = new Tuple
break;
case PaperType.A4_H:
res = new Tuple
break;
case PaperType.A5_V:
res = new Tuple
break;
case PaperType.A5_H:
res = new Tuple
break;
case PaperType.A6_V:
res = new Tuple
break;
case PaperType.A6_H:
res = new Tuple
break;
}
return res;
}
#endregion
}
}
调用方法:
NpoiWordHelper.ExportDocument(
new DocumentSetting
{
PaperType = PaperType.A4_V,
SavePath="word标题.docx",
TitleSetting=new ContentItemSetting
{
Title="我的word标题",
FontSize=44,
HasBold=true,
FontName="宋体"
},
MainContentSetting = new ContentItemSetting
{
MainContent= "这里是word内容这里是word内容这里是word内容这里是word内容这里是word内容",
FontSize = 14,
FontName = "宋体"
}
}
);
是不是一样很简单,但有个遗憾,这个封装的类不支持插入表格、图片,需要的还请大家自行扩展。
三、使用aspose.words
这个是第三方的,未开源,要有license不然会有水印,巧的是在nuget上发一个破解的。。大家偷偷用就好。
调用方法:
Aspose.Words.Document doc = new Aspose.Words.Document();
Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);
builder.InsertHtml("html内容");
doc.Save("word.docx", Aspose.Words.SaveFormat.Docx);
这个使用应该来说是最后简单,强烈推荐,Aspose.Words同时可以进行转pdf,等文件的互转,功能非常强大。其他功能,大家自行研究吧。