You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:06:04