gpt4 book ai didi

c# - 在 WebBrowser 控件中查看 Docx 文档

转载 作者:行者123 更新时间:2023-11-30 17:03:47 24 4
gpt4 key购买 nike

几天来,我一直在尝试将 word docx 文件加载到存在于 Windows 窗体 c# 中的 Web 浏览器控件中。经过数天的努力才完成这项工作,但在 Google 的帮助和一些有用的帖子的帮助下,我已经设法做到了,而且它很漂亮。我已经完成了:

  1. 将 docx 文件转换为临时 html 文件。
  2. 我将我的网络浏览器控件导航到该临时 html 文档。

只有我注意到一个问题:webbrowser 控件似乎在 Web 布局中查看文件。那就是Ms-Word Web Layout,你知道Ms-Word有3种主要的查看布局,Read Mode,Print Layout,和Web Layout。这样做的问题是,一些格式很重的 docx 文件在该 Web 浏览器控件中会完全倾斜,因为它会将它们展开,就好像它们会出现在实际的 Web 浏览器应用程序中一样。

现在我想要实现的是能够以类似于 Ms-Word 中的打印布局的方式查看该 web 浏览器控件的内容,或者至少让控件在控件自身的大小内重新调整内容。

(如果需要我的代码我可以提供)

最佳答案

发现于 http://codinglight.blogspot.de/2008/10/simple-docbrowser-control.html

这使用 webBrowser-Control,但将您的文档转换为 HTML 文件。此外,您还必须安装 MS Word。

使用以下代码创建一个类:

using System;
using System.Linq;
using System.Windows.Forms;
using Microsoft.Office.Interop.Word;
using System.IO;

namespace WordControls
{
public partial class DocBrowser : UserControl
{
private System.Windows.Forms.WebBrowser webBrowser1;

delegate void ConvertDocumentDelegate(string fileName);

public DocBrowser()
{
InitializeComponent();

// Create the webBrowser control on the UserControl.
// This code was moved from the designer for cut and paste
// ease.
webBrowser1 = new System.Windows.Forms.WebBrowser();

webBrowser1.Dock = System.Windows.Forms.DockStyle.Fill;
webBrowser1.Location = new System.Drawing.Point(0, 0);
webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
webBrowser1.Name = "webBrowser1";
webBrowser1.Size = new System.Drawing.Size(532, 514);
webBrowser1.TabIndex = 0;

Controls.Add(webBrowser1);

// set up an event handler to delete our temp file when we're done with it.
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}

string tempFileName = null;

public void LoadDocument(string fileName)
{
// Call ConvertDocument asynchronously.
ConvertDocumentDelegate del = new ConvertDocumentDelegate(ConvertDocument);

// Call DocumentConversionComplete when the method has completed.
del.BeginInvoke(fileName, DocumentConversionComplete, null);
}

void ConvertDocument(string fileName)
{
object m = System.Reflection.Missing.Value;
object oldFileName = (object)fileName;
object readOnly = (object)false;
ApplicationClass ac = null;

try
{
// First, create a new Microsoft.Office.Interop.Word.ApplicationClass.
ac = new ApplicationClass();

// Now we open the document.
Document doc = ac.Documents.Open(ref oldFileName, ref m, ref readOnly,
ref m, ref m, ref m, ref m, ref m, ref m, ref m,
ref m, ref m, ref m, ref m, ref m, ref m);

// Create a temp file to save the HTML file to.
tempFileName = GetTempFile("html");

// Cast these items to object. The methods we're calling
// only take object types in their method parameters.
object newFileName = (object)tempFileName;

// We will be saving this file as HTML format.
object fileType = (object)WdSaveFormat.wdFormatHTML;

// Save the file.
doc.SaveAs(ref newFileName, ref fileType,
ref m, ref m, ref m, ref m, ref m, ref m, ref m,
ref m, ref m, ref m, ref m, ref m, ref m, ref m);

}
finally
{
// Make sure we close the application class.
if (ac != null)
ac.Quit(ref readOnly, ref m, ref m);
}
}

void DocumentConversionComplete(IAsyncResult result)
{
// navigate to our temp file.
webBrowser1.Navigate(tempFileName);
}

void webBrowser1_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
if (tempFileName != string.Empty)
{
// delete the temp file we created.
File.Delete(tempFileName);

// set the tempFileName to an empty string.
tempFileName = string.Empty;
}
}

string GetTempFile(string extension)
{
// Uses the Combine, GetTempPath, ChangeExtension,
// and GetRandomFile methods of Path to
// create a temp file of the extension we're looking for.
return Path.Combine(Path.GetTempPath(),
Path.ChangeExtension(Path.GetRandomFileName(), extension));
}
}
}

将控件添加到表单并调用 LoadDocument 方法。

docBrowser1.LoadDocument(@"Path_to_Doc_as_String");

关于c# - 在 WebBrowser 控件中查看 Docx 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18239208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com