gpt4 book ai didi

c# - 使用 System.Drawing.Printing 在 .NET Core 中打印 PDF

转载 作者:行者123 更新时间:2023-12-04 03:58:26 28 4
gpt4 key购买 nike

我通过使用 PDFiumSharp 将每一页转换为 PNG 图像来打印 PDF 文件。接下来,我将此图像绘制到 Graphics。

private void PrintPage(object sender, PrintPageEventArgs ev)
{
ev.Graphics.DrawImage(images[pageNum], ev.Graphics.VisibleClipBounds);
pageNum++;
if (pageNum == images.Count)
{
ev.HasMorePages = false;
}
else
{
ev.HasMorePages = true;
}
}

public void Print()
{
printDocument.PrintPage += new PrintPageEventHandler(PrintPage);
pageNum = 0;

if (printDocument.PrinterSettings.IsValid)
{
printDocument.Print();
}
else
{
throw new Exception("Printer is invalid.");
}
}

问题是打印机接收到非常大的数据,整个过程运行缓慢。我尝试在 Windows 上使用 lpr 命令。它直接处理 PDF 文件,但我的应用程序需要支持双面打印、不同纸张来源等,这在 lpr 中不可用。

如何在不转换为图像的情况下使用 System.Drawing.Printig(或其他提供类似功能的东西)打印 PDF?我使用 .NET Core 3.1,我的应用程序应该是跨平台的。

最佳答案

实际上,您需要选择 3 个中的任意 2 个:

  1. 无需光栅图像直接将数据发送到打印机
  2. 使用System.Drawing.Printing
  3. 跨平台

例如,1 和 2 在 Windows 上工作正常。有跨平台的 PDF 库可以解析 PDF 并将其直接打印到 System.Drawing.Graphics。看这个sample .

问题是 System.Drawing 在 Linux 和 macOS 上运行不佳。它使用 libgdiplus而且这个实现有很多实际问题。
例如,libgdiplus 不能很好地处理剪切路径。我在那里修复了几个相关问题(#545#547#552),并发现了严重的障碍,需要进一步改进。

第一个是维护者。他们没有回答问题,而是按月审查简单的拉取请求。看来微软对这个项目不是很感兴趣。

第二个障碍是内部架构。有 2 个旧的区域实现(基于位图和矩形)应该重新考虑。但是,如果不与维护者沟通,也无法进行架构更改。

我认为您有 2 个选择:

  1. 使用无需中间图像即可打印到 System.Drawing.Graphics 的 PDF 库(如上面的示例)。它会在 Windows 上正常工作。在 Linux 上,您需要:

    • 自行修复 libgdiplus 中发现的问题,在您的产品中使用自定义版本。
    • 将 PDF 渲染为图像,然后打印光栅图像。
  2. 不使用System.Drawing.Printing

关于c# - 使用 System.Drawing.Printing 在 .NET Core 中打印 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63504710/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com