【发布时间】:2011-01-26 18:04:02
【问题描述】:
我有一个 C# 应用程序,当用户单击打印时,该应用程序使用 ITextSharp 在内存流中创建一个 PDF。我需要将此 PDF 自动打印到特定的打印机和托盘。 我已经搜索过这个,但我能找到的只是使用 javascript,但它不会打印到特定的托盘。 有没有人有这样做的例子? 谢谢。
【问题讨论】:
我有一个 C# 应用程序,当用户单击打印时,该应用程序使用 ITextSharp 在内存流中创建一个 PDF。我需要将此 PDF 自动打印到特定的打印机和托盘。 我已经搜索过这个,但我能找到的只是使用 javascript,但它不会打印到特定的托盘。 有没有人有这样做的例子? 谢谢。
【问题讨论】:
您可以使用此代码更改打印机托盘。
string _paperSource = "TRAY 2"; // Printer Tray
string _paperName = "8x17"; // Printer paper name
//Tested code comment. The commented code was the one I tested, but when
//I was writing the post I realized that could be done with less code.
//PaperSize pSize = new PaperSize() //Tested code :)
//PaperSource pSource = new PaperSource(); //Tested code :)
/// Find selected paperSource and paperName.
foreach (PaperSource _pSource in printDoc.PrinterSettings.PaperSources)
if (_pSource.SourceName.ToUpper() == _paperSource.ToUpper())
{
printDoc.DefaultPageSettings.PaperSource = _pSource;
//pSource = _pSource; //Tested code :)
break;
}
foreach (PaperSize _pSize in printDoc.PrinterSettings.PaperSizes)
if (_pSize.PaperName.ToUpper() == _paperName.ToUpper())
{
printDoc.DefaultPageSettings.PaperSize = _pSize;
//pSize = _pSize; //Tested code :)
break;
}
//printDoc.DefaultPageSettings.PaperSize = pSize; //Tested code :)
//printDoc.DefaultPageSettings.PaperSource = pSource; //Tested code :)
【讨论】:
过去,我花了很多时间在网上搜索将 pdf 文件打印到特定打印机托盘的解决方案。
我的要求是:从服务器目录中收集几个 pdf 文件,并将每个文件循环发送到不同的打印机托盘。
所以我已经测试了很多 3rd 方工具(试验)和在 web.xml 中找到的最佳实践。 一般来说,所有这些工具都可以分为两类:a)以直接方式将 pdf 文件发送到打印机(在 UI 中静默)或 b)使用内置的 pdf 预览器在 UI 中打开 pdf 文件与 .Net-PrintDocument 一起使用。
解决我的要求的唯一解决方案是来自veryPdf 的PDFPrint(缺点:它不是无价的,但我的公司买了它)。所有其他工具和解决方案都不可靠,这意味着:使用参数调用它们的打印例程,例如id = 258(定义托盘 2;从已安装的打印机获取)但在托盘 3 中打印 pdf 文件或在打印预览器 (UI) 中打开 pdf 时出现图像丢失或内容完全空白等情况。
希望能有所帮助。
【讨论】:
【讨论】: