我目前工作的一個打印應用。此應用程序要求某些頁面需要來自打印機上的特定紙盤。下面是我到目前爲止已經鼓起勇氣:XPSDocumentWriter - 打印特定頁面的具體托盤
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;然後我創建一個固定的文檔。然後我修改打印票看看適當的托盤。
- 然後我爲每個文檔類型構建每個單獨的頁面;並將它們添加到固定文檔
- 一旦固定文檔的建設完成;我將它附加到DocumentSequence。
- 然後我發送FixedDocumentSequence到xpsWriter。
但出於某種原因;這些設置不被尊重。我將所有打印出來的文檔都放在同一個紙盒中。
下面是我的一些意見至今:
- 打印票據的修改做工作;我已經通過發送修改後的printTicket到xpsWriter來驗證這一點;但是這將設置應用於整個作業;這對我來說是不行的。
- 查詢我的打印功能時;我注意到我只有JobInputBin。我不完全認爲這意味着這款打印機不支持該功能;作爲一個類似的WindowsForms應用程序(它使用PageSettings.PaperSource)的多托盤打印作品
關於我可以嘗試下一步的任何想法?有沒有人成功做過這樣的事情?