Travailler avec des tickets imprimés | C++
Schéma d’impression
Les documents XPS et le Modèle d’objet XPS peuvent utiliser les objets de ticket d’impression, qui sont décrits dans la Spécification du schéma d’impression, pour spécifier les préférences d’impression d’un document aux imprimantes et aux applications de visualisation.
Le Print Schema est un schéma basé sur XML structuré hiérarchiquement et utilisé pour organiser et décrire les propriétés d’une imprimante ou d’un travail d’impression. Il se compose de deux composants principaux : les Print Schema Keywords et le Print Schema Framework. Les mots-clés du schéma d’impression sont des instances d’éléments qui décrivent les attributs de l’imprimante et l’intention de formatage du travail d’impression, tandis que le cadre de schéma d’impression définit une collection de types d’éléments XML dans une structure hiérarchique et spécifie comment ces types d’éléments peuvent être utilisés ensemble.
La technologie Print Schema, appelée PrintTicket, est construite à l’aide des mots-clés Print Schema tels que spécifiés par Print Schema Framework. La spécification de schéma d’impression prend en charge les extensions de schéma par des tiers, de sorte que les utilisateurs de schéma d’impression ne soient pas limités aux instances Property, Feature, Option ou ParameterInit définies par les mots-clés du schéma d’impression. Des instances d’éléments tiers peuvent être ajoutées aux instances d’éléments définies par les mots-clés du schéma d’impression ; cependant, les instances Property privées et tierces doivent appartenir à un espace de noms clairement associé au tiers qui a créé l’espace de noms.
Le support Print Ticket dans Aspose.Page pour C++
L’API Aspose.Page pour C++ comprend un ensemble de classes qui encapsulent des éléments définis par les mots-clés du schéma d’impression. Le nombre de ces classes étant assez important, cet article ne couvre que quelques techniques les plus courantes de manipulation des tickets d’impression dans un document XPS à l’aide de l’API Aspose.Page. Nous discuterons d’abord de l’instanciation de chaque classe de fonctionnalités que nous souhaitons inclure dans le ticket d’impression. Ensuite, nous verrons comment inclure ces fonctionnalités dans un ticket imprimé.
Comment spécifier le bac d’entrée
La fonctionnalité JobInputBin décrit le bac d’entrée installé dans un périphérique ou la liste complète des bacs pris en charge pour un périphérique. Il permet de spécifier le bac d’entrée pour chaque tâche. Il existe également les fonctionnalités DocumentInputBin et PageInputBin qui permettent de spécifier le bac d’entrée par document et par page, respectivement. Tout document Print Ticket est censé inclure un seul des trois. Tous héritent de la classe InputBin et ont des constructeurs avec la même signature, nous utiliserons donc JobInputBin à des fins de démonstration.
Le code suivant
1new JobInputBin(InputBin.InputBinOption.AutoSelect);
crée une fonctionnalité pour un ticket d’impression de travail qui demande à un périphérique d’impression de choisir automatiquement la meilleure option en fonction de la configuration.
La classe
InputBin.InputBinOption définit des champs statiques, dont chacun sert de base à diverses options de bac d’entrée. Chaque option peut contenir des propriétés supplémentaires telles que
InputBin.BinType,
InputBin.FeedDirection,
InputBin.FeedFace,
InputBin.FeedType,
InputBin.MediaCapacity,
InputBin.MediaPath,
InputBin.MediaSizeAutoSense,
InputBin.MediaTypeAutoSense et
InputBin.MediaSheetCapacity . Pour les spécifier, vous devez d’abord cloner la propriété de base, puis appeler la méthode Add()
avec une liste de propriétés souhaitées :
1new JobInputBin(InputBin.InputBinOption.Manual.Clone().Add(
2 InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100)));
Pour la liste complète des valeurs de propriété disponibles, reportez-vous à la spécification du schéma d’impression et à la section correspondante de Aspose.Page référence API.
Comment spécifier le bac de sortie
La fonctionnalité
JobOutputBin décrit le bac de sortie installé dans un périphérique ou la liste complète des bacs pris en charge pour un périphérique. Les mots-clés JobOutputBin
,
DocumentOutputBin et
PageOutputBin s’excluent mutuellement ; un seul doit être spécifié dans un seul ticket imprimé.
Chaque option peut contenir les propriétés suivantes :
OutputBin.BinType et
OutputBin.MediaSheetCapacity. Ainsi, une fonctionnalité JobOutputBin
peut être construite comme suit :
1new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
2 new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100)));
Comment spécifier l’orientation de la page
La fonctionnalité PageOrientation décrit l’orientation de la feuille de support physique. Les options disponibles sont répertoriées dans la section de classe PageOrientation.PageOrientationOption de la référence API. Vous trouverez ci-dessous un exemple de la façon de construire la fonctionnalité :
1new PageOrientation(PageOrientation.PageOrientationOption.Landscape);
Comment spécifier le mode duplex pour la sortie
La fonctionnalité
JobDuplexAllDocumentsContiguous décrit les caractéristiques duplex de la sortie. La fonction recto verso permet d’imprimer des deux côtés du support. Tous les documents du travail sont recto verso de manière contiguë. JobDuplexAllDocumentsContiguous
et
DocumentDuplex s’excluent mutuellement. C’est au pilote de déterminer la gestion des contraintes entre ces mots-clés. Ce dernier mot-clé signifie que chaque document du travail est recto verso séparément.
Il existe
trois options pour cette fonctionnalité - OneSided
, TwoSidedLongEdge
et TwoSidedShortEdge
. Le premier n’a aucune propriété et les deux autres sont paramétrés avec le
Duplex.DuplexMode.
Par exemple, si vous souhaitez spécifier l’impression recto verso pour votre fichier XPS de telle sorte que la page soit retournée parallèlement à MediaSizeHeight, vous pouvez procéder comme suit :
1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.TwoSidedLongEdge(Duplex.DuplexMode.Automatic));
Si vous ne souhaitez pas que votre fichier soit recto verso, vous pouvez ajouter la fonctionnalité suivante au ticket d’impression :
1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.OneSided);
Comment spécifier les paramètres de couleur pour la sortie
La fonctionnalité PageOutputColor décrit les caractéristiques des paramètres de couleur pour la sortie. Il existe trois options pour cette fonctionnalité : « Couleur », « Niveaux de gris » et « Monochrome », chacune ayant deux propriétés entières : « DeviceBitsPerPixel » et « DriverBitsPerPixel ».
Par exemple, si vous souhaitez que votre imprimante couleur imprime un fichier XPS en niveaux de gris, vous pouvez ajouter la fonctionnalité suivante au ticket d’impression :
1new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8));
Comment travailler avec des tickets imprimés de différents niveaux
Si vous travaillez avec un fichier XPS créé par quelqu’un d’autre, vous souhaiterez peut-être modifier son ticket d’impression au cas où il serait présent. Pour obtenir un ticket d’impression au niveau du travail, vous pouvez simplement utiliser la propriété
JobPrintTicket de l’objet XpsDocument
:
1JobPrintTicket pt = document.JobPrintTicket;
Pour obtenir un ticket d’impression pour un document spécifique dans le fichier XPS, vous devez utiliser la méthode GetDocumentPrintTicket() :
1DocumentPrintTicket pt = document.GetDocumentPrintTicket(<n>);
où <n>
est le numéro du document dans le fichier XPS.
Pour obtenir un ticket d’impression pour une page spécifique du fichier XPS, vous devez utiliser la méthode GetPagePrintTicket() :
1PagePrintTicket pt = document.GetPagePrintTicket(<m>, <n>);
où <m>
est le numéro du document dans le fichier XPS et <n>
est le numéro de la page dans le m-ième document.
Après avoir obtenu une instance de ticket d’impression, si elle n’est pas « nulle », vous pouvez ajouter vos fonctionnalités construites comme indiqué dans les sections ci-dessus :
1pt.Add(<features>);
où <features>
est un tableau de fonctionnalités de longueur variable approprié pour le ticket d’impression d’un niveau particulier. Si l’ancien ticket d’impression comportait déjà certaines des fonctionnalités que vous essayez d’ajouter, elles seront écrasées par les nouvelles instances.
Si vous ne souhaitez pas modifier les tickets d’impression existants, mais plutôt attribuer une instance entièrement nouvelle (ce qui est également le cas d’un nouveau fichier XPS), alors pour le ticket d’impression au niveau du travail, vous devez utiliser à nouveau la propriété JobPrintTicket
:
1document.JobPrintTicket = new JobPrintTicket(<features>);
où <features>
est un tableau de longueur variable de fonctionnalités appropriées au ticket d’impression de travail.
Si vous souhaitez attribuer un ticket d’impression pour un document spécifique dans le fichier XPS, la méthode
SetDocumentPrintTicket() doit être utilisée :
1document.SetDocumentPrintTicket(<n>, new DocumentPrintTicket(<features>));
où <n>
est le numéro du document dans le fichier XPS et <features>
est un tableau de fonctionnalités de longueur variable approprié pour le ticket d’impression au niveau du document.
Enfin, si vous souhaitez attribuer un ticket d’impression pour une page spécifique du fichier XPS, vous devez utiliser la méthode SetPagePrintTicket() :
1document.SetPagePrintTicket(<m>, <n>, new PagePrintTicket(<features>));
où <m>
est le numéro du document dans le fichier XPS, <n>
est le numéro de la page dans le m-ème document et <features>
est un tableau de longueur variable de fonctionnalités appropriées pour le ticket d’impression au niveau de la page.
Vous trouverez ci-dessous l’exemple de code complet pour le ticket d’impression au niveau de la tâche de l’exemple de projet Aspose.Page pour C++ :
1 // ExStart:CreateCustomPrintTicket
2 // For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-.NET
3 // The path to the documents directory.
4 System::String dir = RunExamples::GetDataDir_WorkingWithPrintTickets();
5
6 // Create new XPS document
7 {
8 System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>();
9 // Clearing resources under 'using' statement
10 System::Details::DisposeGuard<1> __dispose_guard_0({ document});
11 // ------------------------------------------
12
13 try
14 {
15 // Set a custom job-level print ticket
16 document->set_JobPrintTicket(System::MakeObject<JobPrintTicket>(
17 System::MakeArray<System::SharedPtr<IJobPrintTicketItem>>({
18 // Specify input bin.
19 System::MakeObject<JobInputBin>(System::MakeArray<System::SharedPtr<InputBin::IInputBinItem>>({InputBin::InputBinOption::Manual->Clone()->Add(System::MakeArray<System::SharedPtr<InputBin::IInputBinOptionItem>>(
20 {InputBin::FeedFace::FaceDown, InputBin::FeedDirection::LongEdgeFirst, System::MakeObject<InputBin::MediaSheetCapacity>(100)}))})),
21 // Specify output bin.
22 System::MakeObject<JobOutputBin>(System::MakeArray<System::SharedPtr<OutputBin::IOutputBinItem>>({
23 System::MakeObject<OutputBin::OutputBinOption>(System::MakeArray<System::SharedPtr<OutputBin::IOutputBinOptionItem>>(
24 {OutputBin::BinType::Sorter})),
25 System::MakeObject<OutputBin::OutputBinOption>(System::MakeArray<System::SharedPtr<OutputBin::IOutputBinOptionItem>>(
26 {OutputBin::BinType::Stacker, System::MakeObject<OutputBin::MediaSheetCapacity>(100)}))})),
27 // Specify page orientation.
28 System::MakeObject<PageOrientation>(System::MakeArray<System::SharedPtr<PageOrientation::PageOrientationOption>>(
29 {PageOrientation::PageOrientationOption::Landscape})),
30 // Specify duplex mode for the output.
31 System::MakeObject<JobDuplexAllDocumentsContiguously>(System::MakeArray<System::SharedPtr<Duplex::DuplexOption>>(
32 {Duplex::DuplexOption::TwoSidedLongEdge(Duplex::DuplexMode::Automatic)})),
33 // Specify the color settings for the output.
34 System::MakeObject<PageOutputColor>(System::MakeArray<System::SharedPtr<PageOutputColor::IPageOutputColorItem>>(
35 {PageOutputColor::PageOutputColorOption::Grayscale(0, 8)}))})));
36
37 // Save the document with the custom job-level print ticket.
38 document->Save(dir + u"output1.xps");
39 }
40 catch(...)
41 {
42 __dispose_guard_0.SetCurrentException(std::current_exception());
43 }
44 }
45 // ExEnd:CreateCustomPrintTicket