【发布时间】:2014-03-18 14:15:37
【问题描述】:
我目前正在开发一个打印应用程序。此应用程序要求某些页面需要来自打印机上的特定纸盘。以下是我到目前为止的内容:
foreach (var dto in dispensersToPrint)
{
var documents = FilterDocumentSections(DispenserDocumentsToPrint.RetrieveByDispenserId(dto.DispenserId));
var groupedDocs = documents.GroupBy(t => t.DocumentTypeId);
var queueName = Properties.Settings.Default.PrinterName;
var queue = RawPrinterHelper.GetPrintQueue(queueName);
var seq = new FixedDocumentSequence();
var xpsWriter = PrintQueue.CreateXpsDocumentWriter(queue);
foreach (var docGroup in groupedDocs)
{
var printTicket = queue.DefaultPrintTicket.Clone();
var printTray = MapPrintTray((DocumentSectionType)docGroup.Key);
if (!printTray.IsNullOrEmpty())
{
printTicket = RawPrinterHelper.ModifyPrintTicket(printTicket, "psk:JobInputBin", printTray);
}
var fixedDoc = new FixedDocument();
fixedDoc.PrintTicket = printTicket;
foreach (var doc in docGroup)
{
var pageContent = new PageContent();
var fixedPage = new FixedPage();
var localFileName = string.Empty;
var unzippedFileName = string.Empty;
//copy files locally
localFileName = CopyFileToLocalMachine(doc.FileName);
//unzip file
unzippedFileName = EmfPrintingHelper.UnzipEmfFile(localFileName);
var itemToPrint = new PrintableEmfImage
{
DataContext = new EmfImageViewModel { FileName = unzippedFileName }
};
fixedPage.Children.Add(itemToPrint);
pageContent.Child = fixedPage;
fixedDoc.Pages.Add(pageContent);
}
var docRef = new DocumentReference();
docRef.SetDocument(fixedDoc);
seq.References.Add(docRef);
}
xpsWriter.Write(seq);
}
真正的高水平:
- 对于每个分配器(工单),我需要打印;我首先按 DocumentType 分组(即,将类型 A 打印到纸盒 1)
- 然后我创建一个新的 FixedDocumentSequence
- 对于每个 DocumentType;然后我创建一个固定的文档。然后我修改打印票以查看相应的托盘。
- 然后我为每种文档类型构建每个单独的页面;并将它们添加到 FixedDocument
- FixedDocument 构建完成后;我将它附加到 DocumentSequence。
- 然后我将 FixedDocumentSequence 发送到 xpsWriter。
但是出于某种原因;这些设置没有得到尊重。我从同一个托盘打印所有文件。
以下是我目前的一些观察结果:
- 打印票的修改确实有效;我已经通过将修改后的 printTicket 发送到 xpsWriter 来验证这一点;但这会将设置应用于整个作业;这对我来说是不行的。
- 查询我的打印能力时;我注意到我只有 JobInputBin。我不认为这意味着这台打印机不支持该功能。因为多托盘打印工作来自类似的 WindowsForms 应用程序(使用 PageSettings.PaperSource)
关于我接下来可以尝试什么的任何想法?以前有没有人成功地做过这样的事情?
【问题讨论】: