Имеется HTML-страница, состоящая из 3х таблиц(пустых), которые заполняются с помощью JavaScript с определенной периодичностью(данные таблиц обновляются). Страница простматривается с помощью WebBrowser
в WPF приложениии. Необходимо сформировать PDF документ, в котором будет содержимое страницы в определенный момент времени (заполненные таблицы). Какими библиотеками это можно выполнить?
Пробовал выполнить 2мя способами первый через ExecWB
IOleServiceProvider sp = Browser.Document as IOleServiceProvider;
if (sp != null)
{
Guid IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11d0-8A3E-00C04FC9E26E");
const int OLECMDID_PRINT = 6;
const int OLECMDEXECOPT_DONTPROMPTUSER = 2; const short PRINT_WAITFORCOMPLETION = 2;
dynamic wb;
sp.QueryService(IID_IWebBrowserApp, IID_IWebBrowser2, out wb);
if (wb != null)
{
wb.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, PRINT_WAITFORCOMPLETION,null,null);
}
}
Вместо null-ов можно подставить in и out параметры, при попытке указать путь сохранения получаю UnautorisedAccessException
Второй способ через PdfSharp, но там я получаю в файле только ту часть WebBrowser
, которую вижу на экране, а не всю страницу целиком
Альтернативным решением может являться получение чистого Html файла, после выполнения JavaScript
Есть замечательный сервис для конвертации HTML в PDF средствами C#: http://wkhtmltopdf.org
Так же есть небольшая библиотека для ускорения работы: https://github.com/codaxy/wkhtmltopdf
Думаю сможете разобраться.
Можете попробовать использовать библиотеку для c# iTextsharp, является портом с java itext. Библиотека имеет большой функционал, а так же поддерживает метод перегонки из HTML в PDF.
Вот небольшой кусок моего кода, может поможет.
html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"content="text/html;charset=utf-8">
<title></title>
</head>
<body>
<table border="0" <!--style="width: 100%; padding: 10px 15px;"--> >
<tr>
<td><h2 align="center">Акционерное общество «одуванчик»</h2></td>
</tr>
<tr>
<td>
<p align="center">Тема:</p>
<p align="center">[THEME]</p>
</td>
</tr>
<tr>
<td>
<div align="right">
<p>Выполнил:</p>
<p>[AUTHOR]</p>
</div>
</td>
</tr>
<tr>
<td><p align="center">[CITY] [YEAR]г.</p></td>
</tr>
</table>
</body>
</html>
c#
// Read in the contents of the html file...
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(File.ReadAllText(@"..\..\TitlePage.html"));
//string contents = File.ReadAllText(@"..\..\TitlePage.html");
// Replace the placeholders with the user-specified text
stringBuilder = stringBuilder.Replace("[THEME]", theme);
stringBuilder = stringBuilder.Replace("[AUTHOR]", authorName);
stringBuilder = stringBuilder.Replace("[CITY]", plase);
stringBuilder = stringBuilder.Replace("[YEAR]", year);
// Step 4: Parse the HTML string into a collection of elements...
//var parsedHtmlElements = HTMLWorker.ParseToList(new StringReader(contents), null);
//Path to our font
string arialuniTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");
//Register the font with iTextSharp
iTextSharp.text.FontFactory.Register(arialuniTff);
//Create a new stylesheet
iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet();
//Set the default body font to our registered font's internal name
ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.FACE, "Arial Unicode MS");
//Set the default encoding to support Unicode characters
ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H);
List<IElement> list = HTMLWorker.ParseToList(new StringReader(stringBuilder.ToString()), ST);
foreach (var element in list)
{
doc.Add(element);
}
Сама библиотека https://sourceforge.net/projects/itextsharp/
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Необходима работать с базой данных MySql с помощью Entity FrameworkВерсия платформы:
Все установил, запустил проект, создал бд в MySQL, натсроил пользователья и дал ему праваВ сеттингах: