UWP C# 环境下PNG图片转换为PDF文件的实现方法咨询
UWP C# PNG转PDF实现方案
可行实现思路
UWP环境下可以通过两种稳定方案实现需求,全程无需用户交互,可后台批量处理:
方案1:使用微软官方Win2D库实现(推荐,代码量最少)
Win2D是微软官方维护的UWP图形库,原生支持PDF导出,适配所有UWP版本,无商业授权风险。
- 第一步:通过NuGet安装
Win2D.uwp包到你的项目中 - 第二步:在项目清单中配置对应权限:如果需要写入PNG所在的非沙盒路径,需开启
broadFileSystemAccess权限,或者提前将目标文件夹加入应用的FutureAccessList持久化权限列表 - 核心实现代码参考:
using Microsoft.Graphics.Canvas; using System.IO; using Windows.Foundation; using Windows.Storage; public async Task PngToPdfAsync(StorageFile sourcePng) { // 生成同路径同文件名的PDF文件 var parentFolder = await sourcePng.GetParentAsync(); var pdfName = Path.ChangeExtension(sourcePng.Name, ".pdf"); var targetPdf = await parentFolder.CreateFileAsync(pdfName, CreationCollisionOption.ReplaceExisting); // 匹配1280×720横向页面尺寸,DPI默认96 var pageSize = new Size(1280, 720); using (var pdfStream = await targetPdf.OpenAsync(FileAccessMode.ReadWrite)) using (var pdfRenderer = CanvasPdfRenderer.Create(pdfStream, pageSize, 96)) { // 加载PNG文件 using (var pngStream = await sourcePng.OpenReadAsync()) using (var pngBitmap = await CanvasBitmap.LoadAsync(pdfRenderer.Device, pngStream)) { // 绘制到PDF页面 using (var ds = pdfRenderer.CreateDrawingSession(pageSize)) { ds.DrawImage(pngBitmap, new Rect(0, 0, pageSize.Width, pageSize.Height)); } // 完成PDF写入 await pdfRenderer.FinalizeAsync(); } } }
方案2:原生打印API静默导出
如果不想引入额外依赖,可以调用UWP原生PrintManagerAPI配置静默打印任务,指定输出格式为PDF,设置页面尺寸为1280×720横向,直接输出到目标路径即可,代码量相对更大,但完全无第三方依赖。
批量处理注意事项
- 大量图片转换建议放到后台线程执行,避免阻塞UI线程
- 可通过
Parallel.ForEachAsync控制并发数,避免内存占用过高 - 转换过程完全不需要用户交互,所有逻辑可在后台静默运行
内容的提问来源于stack exchange,提问作者Nathan Cosbie-Ross
相关产品推荐
相关产品推荐

