Combinación de vales de impresión
Importante
La plataforma de impresión moderna es el medio preferido de Windows para comunicarse con impresoras. Se recomienda usar el controlador de clase de bandeja de entrada IPP de Microsoft, junto con aplicaciones de soporte técnico de impresión (PSA), para personalizar la experiencia de impresión en Windows 10 y 11 para el desarrollo de dispositivos de impresora.
Para obtener más información, consulte Plataforma de impresión moderna y la Guía de diseño de aplicaciones para compatibilidad con impresión.
Los objetos PrintTicket procesados en el controlador de impresión tienen una relación jerárquica basada en el elemento de documento al que están asociados. En el diagrama siguiente se muestra la relación de estas partes dentro de un documento XPS.
Cada uno de los niveles de vale de impresión de la jerarquía tiene un ámbito diferente. Los módulos de filtro del controlador de impresión que usan la información del vale de impresión deben mantener ese ámbito a medida que los objetos de vale de impresión se leen desde la secuencia de documentos. En el diagrama siguiente se muestra cómo se puede hacer en un módulo de filtro de controladores de impresión.
A medida que el filtro lee los elementos del documento, los objetos de vale de impresión se leen, combinan y validan y almacenan en caché mediante el filtro para configurar cómo procesará el filtro cada elemento de documento. En el diagrama anterior se muestra cómo se combinan lógicamente los distintos niveles de vale de impresión y el pseudocódigo siguiente ilustra cómo se puede implementar esta combinación.
class Filter
{
PrintTicket Saved_FDS_PT;
PrintTicket Saved_FD_PT;
ProcessFDS(pIFixedDocumentSequence)
{
Saved_FDS_PT = pIFixedDocumentSequence->GetPrintTicket();
// continue processing the FixedDocumentSequence part
}
ProcessFD(pIFixedDocument)
{
Saved_FD_PT->Release();
temp = pIFixedDocument->GetPrintTicket();
Saved_FD_PT = PrintTicketMergeAndValidate(
Saved_FDS_PT, temp);
// continue processing the FixedDocument part
}
ProcessPage(IFixedPage)
{
temp = pIFixedPage->GetPrintTicket();
PagePT = PrintTicketMergeAndValidate(Saved_FD_PT, temp);
// continue processing the FixedPage part
}
PrintTicket PrintTicketMergeAndValidate(
ParentPT,
PartPT)
{
// Entries in the Part PrintTicket
// take precedence over the corresponding entries
// in the Parent PrintTicket
}
};