首页新闻找找看学习计划

Html转为word

0
悬赏园豆:50 [已解决问题] 解决于 2013-05-22 16:33

在Html转到word的时候我用到了Microsoft.Office.Interop.Word,程序集,操作将Html转为word,在之前我将Html中的图片已下载到本地,之后通过open()和SaveAs()方法打开和保存word但现在有问题,程序在本地运行没有问题,但如果将word考走word中的图片就都将不显示,这是因为word并没有将图片嵌入到当中,只是引用,之后我想把word的doc转为docx格式,之后压缩之后将图片塞到压缩包里去,并修改其中的xml,但修改之后word还是打不开,已损坏,之后我想逐字节的处理html将其插入word但有性能问题,并且逐字节处理很麻烦,老大们又不让用第三方的组件,我好怎么做呢?

像个战士一样的主页 像个战士一样 | 初学一级 | 园豆:123
提问于:2013-05-17 09:27
< >
分享
最佳答案
0

我以前也弄过,图片也可以嵌入到word里呀,就是用的这个程序集。你用的哪个方法将图片加入到word里的,我回去看看我以前写的代码

收获园豆:30
会长 | 大侠五级 |园豆:6159 | 2013-05-17 10:10

Microsoft.Office.Interop.Word是可以把图片嵌入到word中,但这些图片是引入的地址,如果把word考到别人的电脑上word打开后都是小叉,但如果用第三方的组件Aspose.Words.dll一切问题都没有,但领导不让用

像个战士一样 | 园豆:123 (初学一级) | 2013-05-20 09:30

public static void CreateWord(string HtmlPath,string WordSavePath)
{
string wordPath = System.Web.HttpContext.Current.Server.MapPath("~/Word/");//拼接要保存的图片的地址
string inputName = HtmlPath;
//string ext = Path.GetExtension(inputName);
string outputName = WordSavePath;
if (File.Exists(inputName))
{

object oMissing = System.Reflection.Missing.Value;
object oTrue = true;
object oFalse = false;

Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word._Document oWordDoc = new Microsoft.Office.Interop.Word.Document();

oWord.Visible = false;

// 这里是打开文件的扩展名
object openFormat = Microsoft.Office.Interop.Word.WdOpenFormat.wdOpenFormatWebPages;

object openName = inputName;


oWordDoc = oWord.Documents.Open(ref openName, ref oMissing, ref oTrue, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref openFormat, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);


object saveFileName = outputName;

oWord.ActiveWindow.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdPrintView;//将web视图修改为默认视图,不然打开word的时候会以web视图去展示,而不是默认视图。(唯独这句代码是自己加的 = =|||)


// 这里是保存文件的扩展名
object saveFormat = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocumentDefault;

//去掉软回车
oWordDoc.Content.Find.Text = "^l";
object FindText, ReplaceWith, Replace;//
object MissingValue = Type.Missing;
FindText = "^l";//要查找的文本
ReplaceWith = "^p";//替换文本
Replace = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
/**/
/*wdReplaceAll - 替换找到的所有项。
* wdReplaceNone - 不替换找到的任何项。
* wdReplaceOne - 替换找到的第一项。
* */
oWordDoc.Content.Find.ClearFormatting();
//移除Find的搜索文本和段落格式设置
if (oWordDoc.Content.Find.Execute(
ref FindText, ref MissingValue,
ref MissingValue, ref MissingValue,
ref MissingValue, ref MissingValue,
ref MissingValue, ref MissingValue, ref MissingValue,
ref ReplaceWith, ref Replace,
ref MissingValue, ref MissingValue,
ref MissingValue, ref MissingValue))
{

}
oWordDoc.SaveAs(ref saveFileName, ref saveFormat, ref oMissing, ref oMissing, ref oFalse, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

oWordDoc.Close(ref oTrue, ref oMissing, ref oMissing);
oWord.Quit(ref oTrue, ref oMissing, ref oMissing);
}

}

//测试

string HtmlSavePath = Context.Server.MapPath("~/Html/" + Name + ".htm");
string WordSavePath = Context.Server.MapPath("~/Word/" + Name + ".docx");
CreateWord(HtmlSavePath, WordSavePath);

像个战士一样 | 园豆:123 (初学一级) | 2013-05-20 16:40

还希望您给看一下,问什么图片的包就是不能打入到word中,我是意思是说将word压为zip格式,之后打开压缩包,再压缩包的word文件加下应该有一个专门放图片文件的文件夹,但现在没有,只是引用本滴下载的图片路径,这样一旦把word考出电脑,在其他电脑打开word中的图片就会有问题,

像个战士一样 | 园豆:123 (初学一级) | 2013-05-20 16:45

@王荟越:  看了你的代码,确实如你所说。我的代码和你的情况不一样,你是直接把html文件保存为了doc。我是把图片(Image)插到了word的某个位置了。我有空再看看你这种方式有没有办法吧图片也保存为doc的一部分。

会长 | 园豆:6159 (大侠五级) | 2013-05-20 23:00

@王荟越: 最好还是说服你们老大用第三方的吧:http://www.e-iceblue.com/Knowledgebase/Spire.Doc/Program-Guide/How-to-Convert-HTML-to-Word.html ,自己研究费劲,等我有空了再研究研究,最近太忙了,不好意思,你的情况和我的情况不同,我当你是把图片下载到本地,然后把图片插入到word中呢

会长 | 园豆:6159 (大侠五级) | 2013-05-20 23:14

@会长: 非常感谢已经解决了,用到的技术是ooxml将docx中的配置文件进行修改,之后用package递归的将图片插入到docx中

像个战士一样 | 园豆:123 (初学一级) | 2013-05-22 16:31

@王荟越: 哈哈,我也没帮上什么忙。

会长 | 园豆:6159 (大侠五级) | 2013-05-22 17:11
其他回答(4)
0

图片编码下,然后使用base64直接显示出来。

比如web的可以这样写。

 <img src=“data:image/png;base64,XXXXX”/>

收获园豆:10
````` | 园豆:14268 (专家六级) | 2013-05-17 10:21
0

你并没有实际上下载这些图片到到本地,而是仅仅存在于缓存上的一个哈希表键值,我相信你要是断开网络你的word中的图片就无法显示了,所有你不得不把它真正的下载到本地再做之后的处理。两种方式,一是从网页上直接down下来,二是从缓存区中提取出来。可以参考那些扒网站的开源工具,原理差不多。我有个问题一直不懂,也请关注下,如果你或者你的朋友了解,还望不吝赐教。谢谢。

收获园豆:10
woocool | 园豆:190 (初学一级) | 2013-05-17 10:42

不是的,我已经把图片吓到了本地的文件夹下,但Microsoft.Office.Interop.Word是可以把图片嵌入到word中,但这些图片是引入的地址,如果把word考到别人的电脑上word打开后都是小叉,但如果用第三方的组件Aspose.Words.dll一切问题都没有,但领导不让用

支持(0) 反对(0) 像个战士一样 | 园豆:123 (初学一级) | 2013-05-20 09:32
0

可以共享一下解决方案不

~395947417 | 园豆:202 (菜鸟二级) | 2017-07-05 10:18
0

请问题主有做过带公式的html转word吗

沐辰东 | 园豆:202 (菜鸟二级) | 2019-11-25 10:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册