Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Конвертация HTML в PDF средствами C#

#c_sharp #html #pdf


Имеется 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 
    


Ответы

Ответ 1



Есть замечательный сервис для конвертации HTML в PDF средствами C#: http://wkhtmltopdf.org Так же есть небольшая библиотека для ускорения работы: https://github.com/codaxy/wkhtmltopdf Думаю сможете разобраться.

Ответ 2



Можете попробовать использовать библиотеку для c# iTextsharp, является портом с java itext. Библиотека имеет большой функционал, а так же поддерживает метод перегонки из HTML в PDF. Вот небольшой кусок моего кода, может поможет. html >

Акционерное общество «одуванчик»

Тема:

[THEME]

Выполнил:

[AUTHOR]

[CITY] [YEAR]г.

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 list = HTMLWorker.ParseToList(new StringReader(stringBuilder.ToString()), ST); foreach (var element in list) { doc.Add(element); } Сама библиотека https://sourceforge.net/projects/itextsharp/

Комментариев нет:

Отправить комментарий