c# - 如何通过“Microsoft 打印到 PDF”以编程方式将文件和网页打印到 PDF?
问题描述
我正在开发一个用 c# 编写的 UWP 应用程序,我需要转换为 pdf:-办公文档(doc、docx、xls、xlsx、ppt、pptx)-图像-网页
该应用程序必须在 x86、x64、ARM、ARM64 架构中工作。
我知道市场上有第三方转换器库,但只有少数在 ARM64 环境或 UWP 中工作。
我的想法是使用(在 Windows 10 中)允许用户将大多数文件格式保存为 PDF 的“Microsoft PDF 打印机”。
我发现很多帖子都在问同样的问题,但没有一个真正包含有用的答案。
我找到并测试的代码如下:
PrintDocument doc = new PrintDocument()
{
//DocumentName = safeDir + fileName,
PrinterSettings = new PrinterSettings()
{
// set the printer to 'Microsoft Print to PDF'
PrinterName = "Microsoft Print to PDF",
// tell the object this document will print to file
PrintToFile = true,
// set the filename to whatever you like (full path)
PrintFileName = safeDir + fileName,
}
};
doc.Print();
上面的代码生成一个有效但为空的 pdf。我应该如何设置原始文件内容?
例如,如果我有一个名为myreport.docx的 Word 文件,我是否应该将其转换为字节数组并将其设置在某个地方?
先感谢您。
解决方案
使用 PrintDocument 类时,您应该将尝试打印的文件读取到文件流中,如下面的示例所示:https ://docs.microsoft.com/en-us/dotnet/api/system.drawing.printing.printdocument ?view=网络框架-4.8
我个人更喜欢使用 Word 和 Excel 的 Microsoft.Office.Interop 库进行打印。有了这些,您只需加载文档,将打印机设置为“Adobe PDF”,然后保存文档。
推荐阅读
- linux - 如何根据第二个文件中的相应值在一个文件中打印一行?
- asp.net-web-api - Google Cloud 身份令牌 oidcToken.GetAccessTokenAsync() 失败且没有错误消息
- reactjs - 无法在 Spring 中显示来自 React 的 index.html
- javascript - 在 Bootstrap 4.5 中使用图标
- c - 是否有内置函数来获取 strsep() 的后半部分?
- git - 删除和内联子模块后如何挑选或变基?
- r - R - 如何从相异矩阵中找到最近的邻居?
- autohotkey - 为什么计时器不能正确处理全局变量?
- c++ - 添加新行时工作代码抛出异常。调试提示?
- ios - MPMediaItemArtwork bounds.size 为零,而 iOS 音乐中提供了封面