В настоящее время я работаю над приложением печати. Это приложение требует, чтобы определенные страницы приходили с определенных лотков на принтер. Вот кишки, что у меня до сих пор: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);
}
на реальном высоком уровне:
- Для каждого диспенсера (Work Order), мне нужно напечатать; Сначала я начинаю с группировки с помощью типа DocumentType (то есть типа печати A в лоток 1)
- Затем я создаю новый параметр FixedDocumentSequence
- Для каждого типа DocumentType; Затем я создаю фиксированный документ. Затем я изменяю билет на печать, чтобы посмотреть соответствующий лоток.
- Затем я создаю каждую отдельную страницу для каждого типа документа; и добавить их в FixedDocument
- Как только здание FixedDocument будет завершено; Я добавляю его в DocumentSequence.
- Затем я отправляю FixedDocumentSequence в xpsWriter.
Но почему-то; эти настройки не выполняются. Я получаю все документы, распечатывающие один лоток.
Вот некоторые из моих наблюдений до сих пор:
- Модифицирующая билета печати делает работу; Я проверил это, отправив измененный printTicket в xpsWriter; но это относится к настройкам ко всему заданию; это не для меня.
- При запросе моих возможностей печати; я заметил, что у меня только JobInputBin. Я не совсем думаю, что это означает, что этот принтер не поддерживает функциональность; поскольку печать с несколькими лотками работает из аналогичного приложения WindowsForms (которое использует PageSettings.PaperSource)
Любые идеи о том, что я мог бы попробовать дальше? Кто-нибудь успешно делал что-то подобное раньше?