【发布时间】:2018-01-25 19:28:15
【问题描述】:
我正在尝试使用 c# 以编程方式打印 pdf。我尝试了不同的库(PostSharp、PDFium 等)以及 adobe SDK。但是,我找不到任何有关打印和装订打印输出的信息。
我尝试使用 PrintTicket 对象 (Microsoft) 来设置 Stapling 属性,但它不起作用。我已确认我安装了正确的打印驱动程序。我可以在手动打印时装订打印输出,所以我确定打印机支持它。
我编辑了帖子以包含完整的代码。我在这里使用的 PDF 库是 PdfiumViewer。我没有检查这段代码中的返回值,但如果我运行它,我得到的返回值会给我“ConflictStatus.ConflictResolved”。
using (var server = new PrintServer("print server name"))
{
var printerName = "printer with stapling capabilities name";
var queues = server.GetPrintQueues();
using (var queue = queues.FirstOrDefault(x => x.FullName == printerName))
{
var printTicket = queue.DefaultPrintTicket;
printTicket.Collation = Collation.Collated;
printTicket.Stapling = Stapling.StapleTopLeft;
queue.UserPrintTicket = printTicket;
queue.CurrentJobSettings.CurrentPrintTicket = printTicket;
var ret = queue.MergeAndValidatePrintTicket(queue.UserPrintTicket, printTicket);
using (var pdfDoc = PdfDocument.Load("path to pdf"))
{
using (var printDoc = pdfDoc.CreatePrintDocument())
{
printDoc.PrinterSettings.PrinterName = printerName;
printDoc.PrinterSettings.ToPage = 2;
printDoc.Print();
}
}
}
}
【问题讨论】:
-
Print Pdf in C#的可能重复
-
尝试致电
queue.MergeAndValidatePrintTicket(queue.UserPrintTicket, printTicket)合并门票。一定要检查返回值。 -
感谢大家的回复。使用 MergeAndValidate 运气不好。它似乎使装订属性无效。我注意到的另一件事是,当我调用 queue.GetPrintCapabilities(printTicket) 时,StaplingCapability 属性显示计数为零,尽管打印机支持装订(就像我之前提到的,当我通过手动打印文档时,我可以装订文档Adobe 阅读器)。还有其他想法吗?
-
@h.o.m.a.n,感谢您的提示,但这不是骗人的,因为我无法在网上找到任何有关在 adobe 中装订的信息。我什至查看了 Adobe SDK,不幸的是,他们的 IAC 框架似乎不支持它。您发布的链接没有提及装订。
-
@JDoh':将
queue.UserPrintTicket分配给您的票证,然后将其与该票证合并,没有任何作用。