当前位置: 首页 > 知识库问答 >
问题:

使用System. NET Core在. NET Core中打印PDF。绘图。打印

国高杰
2023-03-14

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

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,我的应用程序应该是跨平台的。

共有1个答案

空俊语
2023-03-14

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

  1. 直接将数据发送到打印机,无需光栅图像
  2. 使用系统。绘画打印
  3. 跨平台

例如,1和2在Windows上可以正常工作。有跨平台的PDF库,可以直接解析和打印PDF到系统中。绘画图样看看这个例子。

问题是这个系统。绘图在Linux和macOS上无法正常工作。它使用libgdiplus,这种实现有许多实际问题<例如,libgdiplus不能很好地处理裁剪路径。我修复了一些相关问题(545、#547、#552),并找到了一些严重的拦截器进行进一步改进。

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

第二个障碍是内部架构。应该重新考虑两种旧的区域实现(基于位图和矩形)。然而,如果没有与维护人员的沟通,也不可能进行架构更改。

我认为你有两个选择:

>

  • 自己修复在libgdiplus中发现的问题,在生产中使用自定义版本

不要使用系统。绘画印刷

 类似资料:
  • 我有一个连接到CUPS的打印机,它支持双面打印,如何通过java例程将其设置为单面打印或双面打印? 我曾尝试使用它的库使用ASET添加和addViewer首选项没有任何运气。 有人能提供一些建议吗?

  • 我目前的工作是创建机械图纸,用于发送给客户和作为施工图。当我的绘图完成后,我导出一个. pdf文件,并将其发送给客户端。 我们的客户非常喜欢黑白画,所以我试着提供他们。但是我用来画画的软件效果不好。它只有一个选项“所有颜色都是黑色”,我的画上有一些白色的“隐藏线”。当然,这些显示使用所有颜色作为黑色选项。 我找到了一个解决方案,那就是使用pdf打印机。效果很好,效果也很好。 现在我想打印这个。pd

  • 我已经在我的PDF上写和画了一些数字和文本,但在我的预览时打印,或当我打印PDF时,它不出来的文本和数字在PDF上。我尝试了选项“表单和注释”和“打印为图像”,但这不起作用。我是怎么算出来的?在“评论”选项卡中,你可以添加一条评论,突出显示一些内容,并添加文本和图形。我也用其他应用程序在平板电脑上绘制了一些内容,但这也会在Acrobat Reader中显示,所以应该不是问题。我该怎么做才能确保所有

  • 我尝试使用PrintTicket对象(Microsoft)设置订书钉属性,但它不起作用。我已验证是否安装了正确的打印驱动程序。当我手动打印时,我能够钉上打印输出,所以我确信打印机支持它。 我编辑了这篇文章以包含完整的代码。我在这里使用的PDF库是pdfiumviewer。我没有检查这段代码中的返回值,但如果我运行它,得到的返回值给我“ConflictStatus.ConflictResolved”

  • 问题内容: 我想使用PDFBox打印 由iText创建的 PDF文件 。我已经使用PDDocument类及其方法print()成功尝试了此操作。您可以在此处找到文档: http //pdfbox.apache.org/apidocs/。 (我正在使用此代码:) 方法print()很好用,但是 有一个问题:当我需要打印多个文件时,该方法要求我为每个文档选择打印机。 有什么办法只能设置一次打印机吗?

  • 使用飞碟以PDF格式打印图像。 超文本标记语言代码: 当我使用飞碟将HTML转换为PDF时。生成的PDF不会打印图像。 我需要使用任何特定的软件包来打印PDF格式的图像吗。如果你有任何问题,请告诉我。