Я хотел бы открыть PDF файл после нажатия гиперссылки. Я попытался добавить тег href
но он не работал с WebBrowser. Кроме того, если это невозможно, есть ли набор инструментов для замены?
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();
}
Я только что нашел ответ, и все получилось очень хорошо.
private void webBro_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (e.Url.ToString() != "about:blank")
{
e.Cancel = true;
System.Diagnostics.Process.Start(e.Url.ToString());
}
}
Попробуйте изменить ссылки на 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;
}
Это должно сработать. System.Diagnostics.Process.Start(FilePath);
Вы не должны думать, какое приложение нужно начинать. Просто укажите URI, и система откроет для вас программу просмотра PDF.
Process.Start (новый ProcessStartInfo (/* AbsoluteUri */));
href
. Ничего не произошло.