Xaml UWP生成PDF-best方法
我正在开发一个UWP应用程序,作为其中一个需求,我需要动态生成一个PDF文件 我需要澄清以下几个约束/要求:Xaml UWP生成PDF-best方法,xaml,pdf,uwp,Xaml,Pdf,Uwp,我正在开发一个UWP应用程序,作为其中一个需求,我需要动态生成一个PDF文件 我需要澄清以下几个约束/要求: 需要能够直接/离线从UWP应用程序生成PDF 可能需要能够在服务器上生成报告-理想情况下是从同一源模板生成 报告需要具有一定的动态性(即,不编译到应用程序中,并且在不重新编译应用程序的情况下可编辑格式) 理想情况下-不依赖于封闭源属性库/组件 关于如何实现这一点,我有两个想法: 拥有一个XAML页面,并通过一个隐藏的打印对话框将该XAML视图打印为PDF格式,从而将其转换为PDF格式
- 需要能够直接/离线从UWP应用程序生成PDF
- 可能需要能够在服务器上生成报告-理想情况下是从同一源模板生成
- 报告需要具有一定的动态性(即,不编译到应用程序中,并且在不重新编译应用程序的情况下可编辑格式)
- 理想情况下-不依赖于封闭源属性库/组件
过去是否有人取得过类似的成就?如果是,您采取了什么方法?目前,有许多第三方付费软件包用于在UWP中生成PDF,例如和。像这样的免费库在UWP中是不可用的。既然你不想要付费的,你可以考虑用免费的库创建经典的应用程序,然后创建一个AppService来处理它。更多详情请参考 拥有一个XAML页面,并通过打印将其转换为PDF 按功能生成PDF可以很好地工作。但对于您的要求,“通过隐藏打印对话框”是不可能的,打印UI不能隐藏打印 对WebView和HTML执行类似的操作 开放库可以帮助您通过JavaScript将HTML生成为PDF。您可以通过
WebView
获取PDF结果返回。例如:
JavaScript
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.4/jspdf.debug.js"></script>
<script type='text/javascript'>
function print() {
var doc = new jsPDF()
doc.text('Hello world!', 10, 10);
doc.circle(50, 50, 50);
var pdfresult = doc.output();
document.getElementById('myDiv').innerText = pdfresult;
//doc.save('a4.pdf');
return pdfresult;
}
</script>
</head>
<body>
<div id='myDiv'>Hello</div>
</body>
</html>
毕竟,你可以考虑自己编写PDF文件格式。是windows phone的文档,但您仍可以引用
如果我们还想在该pdf中插入一个图像文件,该怎么办?最终使用了Syncfusion组件。@Suntenwu您的代码似乎很有希望,但它在本地文件夹中创建了大小为0kb
的test.pdf
。我甚至在test.html
文件中添加了大量测试,使其大小为8kb。但是生成的test.pdf
文件仍然是空的(0kb
size)。
Webview.Navigate(new Uri("ms-appx-web:///Assets/test.html"));
string pdfresult = await Webview.InvokeScriptAsync("eval", new string[] { "print()" });
StorageFile pdf = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.pdf");
await FileIO.WriteTextAsync(pdf, pdfresult);