Я покажу контент в двух отдельных окнах веб-браузера в приложении WPF. Как правило, это содержимое в формате PDF или XPS, представленное программой Adobe Control или средством просмотра XPS. Файлы изображений (например, JPG, PNG и т. Д.), А также содержимое HTML отображаются в веб-браузере в исходном формате.
Все работает хорошо, но я не могу настроить отображаемое содержимое по ширине или высоте окна при отображении файла PDF в элементе управления Acrobat. Я могу настроить содержимое до желаемого размера (масштабирование) с помощью мыши ( Ctrl + колесо мыши) или с помощью клавиатуры ( Ctrl + 0 / Ctrl + 1 ), но как мне это сделать в программном коде?
Я пробовал это с ExecWB: он работает для других форматов (htmp, jpg, png, xps и т. Д.), Но он падает, когда файл PDF отображается в элементе управления Acrobat. Вот мой код:
public static partial class WebBrowserExtensions
{
public static int Zoom = 100;
public static void SetZoom(this WebBrowser wb, int _Zoom, string DocumentType, string Source)
{
if ((Zoom += _Zoom) < 20)
{
Zoom = 20;
}
else if (Zoom > 400)
{
Zoom = 400;
}
if (DocumentType == "PDF")
{
wb.Source = new Uri("about:blank");
wb.Source = new Uri($"{Source}#zoom={Zoom}");
wb.Refresh();
}
else
{
object zoom = Zoom;
var OLECMDEXECOPT_DODEFAULT = 0;
var OLECMDID_OPTICAL_ZOOM = 63;
FieldInfo fiComWebBrowser = null;
object objComWebBrowser = null;
if ((fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic)) != null &&
(objComWebBrowser = fiComWebBrowser.GetValue(wb)) != null)
{
objComWebBrowser.GetType().InvokeMember("ExecWB", BindingFlags.InvokeMethod, null, objComWebBrowser, new object[] { OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DODEFAULT, zoom, IntPtr.Zero });
}
}
}
}
Теперь я пытаюсь в «ветке PDF» с параметром «# zoom = factor» перезагрузить файл PDF, но веб-браузер тогда показывает только серое окно. Но если я сделаю этот параметр при первой загрузке файла PDF, он будет работать.
Если бы я мог перезагрузить и отобразить PDF-файл с параметром "# zoom = factor", я бы закончил, даже если это не очень хорошее решение.
Я тоже пробовал mshtml.IHTMLDocument2
:
public static class Extensionmethod
{
public static void SetZoom(this System.Windows.Controls.WebBrowser WebBrowser1, double Zoom)
{
// For this code to work: add the Microsoft.mshtml .NET reference
mshtml.IHTMLDocument2 doc = WebBrowser1.Document as mshtml.IHTMLDocument2;
doc.parentWindow.execScript("document.body.style.zoom=" + Zoom.ToString().Replace(",", ".") + ";");
}
}
Результат не очень хороший: страница увеличена, а не содержимое. Это также означает, что при уменьшении части, которые ранее были вне видимой области, по-прежнему не отображаются, а отображаются только в белой области.
Как настроить элемент управления Acrobat для правильного увеличения содержимого в элементе управления веб-браузера?