Как запустить процесс при нажатии на гиперссылку в WebBrowser с C #

1

Я хотел бы открыть PDF файл после нажатия гиперссылки. Я попытался добавить тег href но он не работал с WebBrowser. Кроме того, если это невозможно, есть ли набор инструментов для замены?

Изображение 174551


private void btSearch_Click(object sender, EventArgs e)
{
    this.webBro.DocumentText = initDoc();
    MessageBox.Show("Completed", "Completed", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

private string GetBodyText()
{
    StringBuilder strB = new StringBuilder();

    string[] filePaths = Directory.GetFiles(@"C:\Users\huydq\Downloads\Documents\", "*.pdf", SearchOption.AllDirectories);
    for (int i = 0; i < filePaths.Length; i++)
    {
        string settext = GetTextFromPDF(filePaths[i]).Replace("\r\n", " ").Replace("\n", " ").Replace("\r", " ").Replace("\t", " ");
        string searchText = tbSearch.Text;
        int prefix = 50, postfix = 50;
        int index = settext.IndexOf(searchText, StringComparison.OrdinalIgnoreCase);

        if (index >= 0)
        {
            string foundText = settext.Substring(index, searchText.Length);
            int contextStart = Math.Max(0, index - prefix);
            int contextLength = Math.Min(settext.Length - contextStart, searchText.Length + prefix + postfix);
            string contextText = settext.Substring(contextStart, contextLength);
            string files = Path.GetFileName(filePaths[i]);
            MessageBox.Show(contextText);
            strB.AppendFormat("<img src='" + pdficon + "' /> <a href='{0}'>{1}</a></br>{2}<br></br>", filePaths[i], files, contextText);
        }
    }
    return strB.ToString();
}

private string initDoc()
{
    StringBuilder sb = new StringBuilder();
    sb.Append(@"<!DOCTYPE HTML PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
    <html xmlns='http://www.w3.org/1999/xhtml'><head>
    <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>");
    sb.Append(string.Format(@"<title>{0}</title> ", "View Document"));
    sb.Append("<body>");
    sb.Append("<div id='Content'>");
    sb.Append(GetBodyText());
    sb.Append("</div>");
    sb.Append(@"</body></html>");
    return sb.ToString();
}
Теги:

4 ответа

0

Я только что нашел ответ, и все получилось очень хорошо.

private void webBro_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
    if (e.Url.ToString() != "about:blank")
    {
        e.Cancel = true;
        System.Diagnostics.Process.Start(e.Url.ToString());
    }
}
0

Попробуйте изменить ссылки на pdf файлы следующим образом:

<a href="file:///C:/myFolder/myfile.pdf">Click Here</a>

Подробнее см. Здесь.

EDIT Если вы хотите обработать щелчок по гиперссылке и запустить PDF как отдельный процесс:

    void Form_Load()
    {
        webBrowser1.DocumentText = "<html><body><a href=\"D:\\test.pdf\">Click Me!</a></body></html>";
        webBrowser1.Document.Click += Document_Click;
    }

    void Document_Click(object sender, HtmlElementEventArgs e)
    {
        if (webBrowser1.Document.ActiveElement.TagName == "A")
        {
            System.Diagnostics.Process.Start(webBrowser1.Document.ActiveElement.GetAttribute("HREF"));
        }
        e.ReturnValue = false;
    }
  • 0
    Действительно, Toolbox WebBrowser не получает тег href . Ничего не произошло.
  • 0
    Попробуйте увидеть вопросы здесь: stackoverflow.com/questions/7194851/…
Показать ещё 1 комментарий
0

Это должно сработать. System.Diagnostics.Process.Start(FilePath);

  • 0
    Куда мне его положить?
  • 0
    @ PMay1903 Если для ссылки есть событие или для всего квадрата, просто поместите его внутри события. Событие должно быть «Клик».
0

Вы не должны думать, какое приложение нужно начинать. Просто укажите URI, и система откроет для вас программу просмотра PDF.

Process.Start (новый ProcessStartInfo (/* AbsoluteUri */));

  • 0
    Куда мне его положить?
  • 0
    Если вы используете RichTextBox вместо WebBrowser, вы можете использовать Hyperlink и прикрепить к нему обработчик. Не знаю, как это сделать в простом WebBrowser. Может быть просто изменить ссылки на абсолютный URI, как файл: // C: /...etc
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню