是否可以在UWP应用中将HTML字符串转换为PDF文件?我已经看到可以在常规.NET应用程序中完成许多不同的方法(似乎有很多第三方库),但是我还没有看到可以在Universal / UWP应用程序中完成此方法的方法。有谁知道该怎么做?
如果没有纯代码解决方案,也许有某种方法可以挂入“ Microsoft Print to PDF”选项。
还是有一种绕行的方法,也许像在C#UWP应用程序中使用Javascript和https://github.com/MrRio/jsPDF一样?我不确定,抓着稻草...
我已将Grace Feng-MSFT提供的解决方案标记为正确的方法,以证明可以通过使用打印对话框中的Microsoft Print to PDF选项将HTML转换为PDF。谢谢
如果没有纯代码解决方案,也许有某种方法可以挂入“ Microsoft Print to PDF”选项。
是的,但是使用这种方式,您首先需要在诸如RichEditBox
或的控件中显示HTML字符串,该控件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 StackOverflow)'");
sb.AppendLine("ET");
然后,您可以创建一个PDF文件并将其保存到该文件中。但是,由于您要将HTML转换为PDF,这可能是一项艰巨的工作,我想您不想这样做。
还是有一种绕行的方法,也许像在C#UWP应用程序中使用Javascript和https://github.com/MrRio/jsPDF一样?我不确定,抓着稻草...
老实说,使用Libs或Web服务将HTML转换为PDF也是一种方法,有很多方法,我只是在搜索它们,但找不到免费的WinRT。因此,我认为这里最实用的方法是第一种方法,将其连接到Microsoft Print to PDF。为此,您可以检查官方的打印样本。
更新:使用@Jerry Nixon-如何在Windows Store应用程序中打印WebView内容中的MSFT代码?,这是一个很好的例子。我只是添加了附加页打印一些代码,在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();
}
对于其他代码,您可以参考官方印刷样本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句