HTML в PDF в универсальном приложении Windows (UWP)

Можно ли преобразовать строку HTML в файл PDF в приложении UWP? Я видел много разных способов сделать это в обычных приложениях.NET (кажется, что существует множество сторонних библиотек), но я еще не видел, как это можно сделать в приложении Universal/UWP. Кто-нибудь знает, как это можно сделать?

Возможно, есть какой-нибудь способ подключиться к опции "Microsoft Print to PDF", если нет решения с чистым кодом?

Или есть обходной способ сделать это, может быть, как-то с использованием Javascript и https://github.com/MrRio/jsPDF в приложении C# UWP? Я не уверен, хватаясь за соломинку...

РЕДАКТИРОВАТЬ

Я пометил решение, предоставленное Грейс Фенг - MSFT, как правильное для доказательства возможности преобразования HTML в PDF с помощью опции Microsoft Print to PDF в диалоговом окне печати. Спасибо

1 ответ

Решение

Возможно, есть какой-нибудь способ подключиться к опции "Microsoft Print to PDF", если нет решения с чистым кодом?

Да, но, используя этот способ, вам нужно будет сначала показать вашу HTML-строку в элементах управления, таких как RichEditBox или же TextBlock, только UIElement может быть для печати контента.

Вы также можете создать PDF-файл самостоятельно, вот основной синтаксис, используемый в PDF:

Ты можешь использовать BT а также ET создать абзац:

Вот пример в C#:

StringBuilder sb = new StringBuilder();
sb.AppendLine("BT"); // BT = begin text object, with text-units the same as userspace-units
sb.AppendLine("/F0 40 Tf"); // Tf = start using the named font "F0" with size "40"
sb.AppendLine("40 TL"); // TL = set line height to "40"
sb.AppendLine("230.0 400.0 Td"); // Td = position text point at coordinates "230.0", "400.0"
sb.AppendLine("(Hello World)'");
sb.AppendLine("/F2 20 Tf");
sb.AppendLine("20 TL");
sb.AppendLine("0.0 0.2 1.0 rg"); // rg = set fill color to  RGB("0.0", "0.2", "1.0")
sb.AppendLine("(This is Stackru)'");
sb.AppendLine("ET");

Затем вы можете создать файл PDF и сохранить его в этом файле. Но так как вы хотите конвертировать HTML в PDF, это может быть тяжелой работой, и я думаю, что вы не хотите этого делать.

Или есть обходной способ сделать это, может быть, как-то с использованием Javascript и https://github.com/MrRio/jsPDF в приложении C# UWP? Я не уверен, хватаясь за соломинку...

Честно говоря, использование Libs или Web-сервиса для конвертации HTML в PDF - это тоже метод, есть много, и я их просто искал, но я не могу найти ничего бесплатного для использования в WinRT. Поэтому я думаю, что самый практичный метод здесь - это первый способ - подключить Microsoft Print к PDF. Для этого вы можете проверить официальный образец печати.

Обновление: используется @Jerry Nixon - код MSFT в разделе Как распечатать содержимое WebView в приложении Магазина Windows? это отличный образец. Я просто добавил код для добавления страниц для печати в NavigationCompleted событие WebView:

private async void webView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
{
    MyWebViewRectangle.Fill = await GetWebViewBrush(webView);
    MyPrintPages.ItemsSource = await GetWebPages(webView, new Windows.Foundation.Size(842, 595));
}

Тогда в printDoc.AddPages += PrintDic_AddPages; событие (printDoc является экземпляром PrintDocument):

private void PrintDic_AddPages(object sender, AddPagesEventArgs e)
{
    foreach (var item in MyPrintPages.Items)
    {
        var rect = item as Rectangle;
        printDoc.AddPage(rect);
    }
    printDoc.AddPagesComplete();
}

Для другого кода вы можете обратиться к официальному образцу печати.

Другие вопросы по тегам