带有“复制”参数的WebBrowser.Document.ExecCommand在C# Windows应用程序中不起作用

问题描述 投票:0回答:2

我正在尝试在 C# Windows 应用程序中将 HTML 文本转换为 RTF。 为此,

  • 我用 C# 创建了一个示例 Windows 应用程序。
  • 使用网络浏览器控件。
  • 将 HTML 文本加载到其中。
  • 使用“Select”和“Copy”参数依次调用Web浏览器的文档对象ExecCommand方法。
  • 选择命令选择文本,但复制命令不会将所选文本复制到剪贴板。

以下是我使用过的代码:

 //Load HTML text
 System.Windows.Forms.WebBrowser webBrowser = new System.Windows.Forms.WebBrowser();
 webBrowser.IsWebBrowserContextMenuEnabled = true;
 webBrowser.Navigate("about:blank");
 webBrowser.Document.Write(htmlText);//htmlText = Valid HTML text

 //Copy formatted text from web browser
 webBrowser.Document.ExecCommand("SelectAll", false, null);
 webBrowser.Document.ExecCommand("Copy", false, null); // NOT WORKING

 //Paste copied text from clipboard to Rich Text Box control
 using (System.Windows.Forms.RichTextBox objRichTextBox = new System.Windows.Forms.RichTextBox())
       {
           objRichTextBox.SelectAll();
           objRichTextBox.Paste();
           string rtfTrxt = objRichTextBox.Rtf;
       }

备注:

  • 我还将 Main 方法标记为 STAThreadAttribute
  • 这不适用于客户端系统(Windows Server 2019)
  • 在我的系统(Windows 7 32 位)上运行良好
  • 我的系统和客户端系统上的浏览器版本相同,即 IE 11
  • 我们不想使用任何付费工具,如 SautinSoft。
c# windows webbrowser-control
2个回答
0
投票

我也有同样的问题。 这有帮助:

            webBrowser.DocumentText = value;
            while (webBrowser.DocumentText != value) Application.DoEvents();
            webBrowser.Document.ExecCommand("SelectAll", false, null);
            webBrowser.Document.ExecCommand("Copy", false, null);
            richTextBoxActually.Text = "";
            richTextBoxActually.Paste();

wb 可能需要多次迭代才能绘制可以复制的文本。


0
投票

我已使用此解决方案来完成我们的任务:

 // The conversion process will be done completely in memory.
        string inpFile = @"..\..\..\example.html";
        string outFile = @"ResultStream.rtf";
        byte[] inpData = File.ReadAllBytes(inpFile);
        byte[] outData = null;

        using (MemoryStream msInp = new MemoryStream(inpData))
        {

            // Load a document.
            DocumentCore dc = DocumentCore.Load(msInp, new HtmlLoadOptions());

            // Save the document to RTF format.
            using (MemoryStream outMs = new MemoryStream())
            {
                dc.Save(outMs, new RtfSaveOptions() );
                outData = outMs.ToArray();                    
            }
            // Show the result for demonstration purposes.
            if (outData != null)
            {
                File.WriteAllBytes(outFile, outData);
                System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outFile) { UseShellExecute = true });
            }
© www.soinside.com 2019 - 2024. All rights reserved.