Lavorare con i ticket di stampa | C++

Schema di stampa

I documenti XPS e il modello a oggetti XPS possono utilizzare gli oggetti ticket di stampa, descritti nella Specifica dello schema di stampa, per specificare le preferenze di stampa di un documento per stampanti e applicazioni di visualizzazione.

Lo schema di stampa è uno schema basato su XML strutturato gerarchicamente e utilizzato per organizzare e descrivere le proprietà di una stampante o di un processo di stampa. È costituito da due componenti principali: le Parole chiave dello schema di stampa e il Framework dello schema di stampa. Le Parole chiave dello schema di stampa sono istanze di elementi che descrivono gli attributi della stampante e l’intento di formattazione del processo di stampa, mentre il Framework dello schema di stampa definisce una raccolta di tipi di elementi XML in una struttura gerarchica e specifica come questi tipi di elementi possono essere utilizzati insieme.

La tecnologia Print Schema, denominata PrintTicket, è sviluppata utilizzando le Print Schema Keywords specificate dal Print Schema Framework. Le Print Schema Specification supportano le estensioni di schema di terze parti, in modo che gli utenti di Print Schema non siano limitati alle istanze Property, Feature, Option o ParameterInit definite dalle Print Schema Keywords. È possibile aggiungere istanze di elementi di terze parti alle istanze di elementi definite dalle Print Schema Keywords; tuttavia, le istanze Property private di terze parti devono appartenere a un namespace chiaramente associato alla terza parte che ha creato il namespace.

Supporto per Print Ticket in Aspose.Page per C++

L’API Aspose.Page per C++ include un set di classi che incapsulano gli elementi definiti dalle Print Schema Keywords. Poiché il numero di queste classi è piuttosto elevato, questo articolo tratta solo alcune delle tecniche più comuni per la manipolazione di print ticket in un documento XPS utilizzando l’API Aspose.Page. In primo luogo, discuteremo l’istanziazione di ogni feature class che desideriamo includere nel print ticket. Successivamente, vedremo come includere queste funzionalità in un ticket di stampa.

Come specificare il contenitore di input

La funzionalità JobInputBin descrive il contenitore di input installato in un dispositivo o l’elenco completo dei contenitori supportati da un dispositivo. Consente di specificare il contenitore di input per ogni processo. Sono disponibili anche le funzionalità DocumentInputBin e PageInputBin che consentono di specificare il contenitore di input rispettivamente per documento e per pagina. Ogni documento di ticket di stampa dovrebbe includere solo uno dei tre. Tutti ereditano dalla classe InputBin e hanno costruttori con la stessa firma, quindi useremo JobInputBin a scopo dimostrativo.

Il seguente codice

1new JobInputBin(InputBin.InputBinOption.AutoSelect);

Crea una funzionalità per un ticket di stampa che indica a un dispositivo di stampa di scegliere automaticamente l’opzione migliore in base alla configurazione.

La classe InputBin.InputBinOption definisce campi statici, ognuno dei quali funge da base per diverse opzioni del contenitore di input. Ogni opzione può contenere proprietà aggiuntive come InputBin.BinType, InputBin.FeedDirection, InputBin.FeedFace, InputBin.FeedType, InputBin.MediaCapacity, InputBin.MediaPath, InputBin.MediaSizeAutoSense, InputBin.MediaTypeAutoSense e InputBin.MediaSheetCapacity. Per specificarli, è necessario prima clonare la proprietà di base e poi chiamare il metodo Add() con un elenco di proprietà desiderate:

1new JobInputBin(InputBin.InputBinOption.Manual.Clone().Add(
2    InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100)));

Per l’elenco completo dei valori delle proprietà disponibili, fare riferimento alla specifica dello schema di stampa e alla sezione pertinente del riferimento API di Aspose.Page.

Come specificare il contenitore di output

La funzionalità JobOutputBin descrive il contenitore di output installato in un dispositivo o l’elenco completo dei contenitori supportati per un dispositivo. Le parole chiave JobOutputBin, DocumentOutputBin e PageOutputBin si escludono a vicenda; in un singolo ticket di stampa è necessario specificarne solo una.

Ogni opzione può contenere le seguenti proprietà: OutputBin.BinType e OutputBin.MediaSheetCapacity. Pertanto, una funzionalità JobOutputBin può essere costruita come segue:

1new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
2    new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100)));

Come specificare l’orientamento della pagina

La funzionalità PageOrientation descrive l’orientamento del foglio di supporto fisico. Le opzioni disponibili sono elencate nella sezione della classe PageOrientation.PageOrientationOption del riferimento API. Di seguito è riportato un esempio di come costruire la funzionalità:

1new PageOrientation(PageOrientation.PageOrientationOption.Landscape);

Come specificare la modalità duplex per l’output

La funzione JobDuplexAllDocumentsContiguously descrive le caratteristiche di stampa duplex dell’output. La funzione duplex consente la stampa su entrambi i lati del supporto. Tutti i documenti nel processo vengono stampati in fronte-retro in modo contiguo. JobDuplexAllDocumentsContiguously e DocumentDuplex si escludono a vicenda. Spetta al driver determinare la gestione dei vincoli tra queste parole chiave. Quest’ultima parola chiave indica che ogni documento nel processo viene stampato in fronte-retro separatamente.

Sono disponibili tre opzioni per questa funzionalità: OneSided, TwoSidedLongEdge e TwoSidedShortEdge. La prima non ha proprietà, mentre le altre due sono parametrizzate tramite Duplex.DuplexMode.

Ad esempio, se si desidera specificare la stampa fronte-retro per il file XPS in modo che la pagina venga capovolta parallelamente all’altezza del MediaSizeHeight, è possibile procedere come segue:

1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.TwoSidedLongEdge(Duplex.DuplexMode.Automatic));

Se non si desidera che il file venga stampato fronte-retro, è possibile aggiungere la seguente funzionalità al ticket di stampa:

1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.OneSided);

Come specificare le impostazioni colore per l’output

La funzione PageOutputColor descrive le caratteristiche delle impostazioni colore per l’output. Sono disponibili tre opzioni per questa funzione: Color, Grayscale e Monochrome, ciascuna delle quali ha due proprietà intere: DeviceBitsPerPixel e DriverBitsPerPixel.

Ad esempio, se si desidera che la stampante a colori stampi un file XPS in scala di grigi, è possibile aggiungere la seguente funzione al ticket di stampa:

1new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8));

Come lavorare con ticket di stampa di diversi livelli

Se si sta lavorando con un file XPS creato da qualcun altro, potrebbe essere necessario modificarne il ticket di stampa, qualora presente. Per ottenere un ticket di stampa a livello di processo, è sufficiente utilizzare la proprietà JobPrintTicket dell’oggetto XpsDocument:

1JobPrintTicket pt = document.JobPrintTicket;

Per ottenere un ticket di stampa per un documento specifico nel file XPS, è necessario utilizzare il metodo GetDocumentPrintTicket():

1DocumentPrintTicket pt = document.GetDocumentPrintTicket(<n>);

dove <n> è il numero del documento all’interno del file XPS.

Per ottenere un ticket di stampa per una pagina specifica del file XPS, è necessario utilizzare il metodo GetPagePrintTicket():

1PagePrintTicket pt = document.GetPagePrintTicket(<m>, <n>);

dove <m> è il numero del documento all’interno del file XPS e <n> è il numero della pagina all’interno dell’m-esimo documento.

Dopo aver ottenuto un’istanza del ticket di stampa, se non è null, è possibile aggiungere le funzionalità costruite come mostrato nelle sezioni precedenti:

1pt.Add(<features>);

dove <features> è un array di lunghezza variabile di feature appropriate per il ticket di stampa del livello specifico. Se il vecchio ticket di stampa conteneva già alcune delle feature che si sta tentando di aggiungere, queste verranno sovrascritte dalle nuove istanze.

Se non si desidera modificare i ticket di stampa esistenti, ma piuttosto assegnare un’istanza completamente nuova (come nel caso di un nuovo file XPS), per il ticket di stampa a livello di job, è necessario utilizzare nuovamente la proprietà JobPrintTicket:

1document.JobPrintTicket = new JobPrintTicket(<features>);

dove <features> è un array di lunghezza variabile di feature appropriate per il ticket di stampa del processo.

Se si desidera assegnare un ticket di stampa per un documento specifico all’interno del file XPS, è necessario utilizzare il metodo SetDocumentPrintTicket():

1document.SetDocumentPrintTicket(<n>, new DocumentPrintTicket(<features>));

dove <n> è il numero del documento all’interno del file XPS e <features> è un array di lunghezza variabile di feature appropriate per il ticket di stampa a livello di documento.

Infine, se si desidera assegnare un ticket di stampa per una pagina specifica all’interno del file XPS, è necessario utilizzare il metodo SetPagePrintTicket():

1document.SetPagePrintTicket(<m>, <n>, new PagePrintTicket(<features>));

dove <m> è il numero del documento all’interno del file XPS, <n> è il numero della pagina all’interno del documento m-esimo e <features> è un array di lunghezza variabile di feature appropriate per il ticket di stampa a livello di pagina.

Di seguito è riportato l’esempio di codice completo per il ticket di stampa a livello di processo tratto dal progetto di esempio Aspose.Page per 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

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.