Робота з друком квитків | C++

Схема друку

Документи XPS і Об’єктна модель XPS можуть використовувати об’єкти квитка для друку, які описано в [специфікації схеми друку]( https://download.microsoft.com/download/D/E/C/DECA6E6B-3E81 -48E7-B7EF-6D92A547D03C/print-schema-spec-2-0.zip), щоб указати параметри друку документа для принтерів і програм для перегляду.

Схема друку — це ієрархічно структурована схема на основі XML, яка використовується для організації та опису властивостей принтера або завдання друку. Він складається з двох основних компонентів: Ключові слова схеми друку та Система схеми друку. Ключові слова схеми друку — це екземпляри елементів, які описують атрибути принтера та призначення форматування завдання друку, тоді як Framework Print Schema Framework визначає набір типів елементів XML в ієрархічній структурі та визначає, як ці типи елементів можна використовувати разом.

Технологія Print Schema, яка називається PrintTicket, створена з використанням ключових слів схеми друку, визначених Framework Print Schema. Специфікація схеми друку підтримує розширення схеми третіми сторонами, тому користувачі схеми друку не обмежуються екземплярами Property, Feature, Option або ParameterInit, які визначаються ключовими словами схеми друку. Екземпляри сторонніх елементів можна додати до екземплярів елементів, визначених ключовими словами схеми друку; однак приватні сторонні екземпляри Property мають належати до простору імен, який чітко пов’язаний із третьою стороною, яка створила простір імен.

Підтримка Print Ticket в Aspose.Page для C++

API Aspose.Page для C++ містить набір класів, які інкапсулюють елементи, визначені ключовими словами схеми друку. Оскільки кількість цих класів є досить великою, ця стаття охоплює лише кілька найпоширеніших методів маніпулювання друкованими квитками в документі XPS за допомогою API Aspose.Page. Спочатку ми обговоримо екземпляр кожного класу функцій, який ми хочемо включити в заявку на друк. Потім ми побачимо, як включити ці функції в друкований квиток.

Як вказати вхідний ящик

Функція JobInputBin описує встановлений вхідний ящик на пристрої або повний список підтримуваних контейнерів для пристрою. Це дозволяє визначати вхідний лоток для кожного завдання. Є також DocumentInputBin і [PageInputBin]( https://reference.aspose.com/page/ cpp/aspose.page.xps.xpsmetadata/pageinputbin/) функції, які дозволяють специфікувати вхідний ящик для кожного документа та для кожної сторінки відповідно. Передбачається, що будь-який документ Print Ticket має містити лише одне з трьох. Усі вони успадковують клас InputBin і мають конструктори з однаковою сигнатурою, тому ми використовуватимемо JobInputBin для демонстраційних цілей.

Наступний код

1new JobInputBin(InputBin.InputBinOption.AutoSelect);

creates a feature for a job print ticket that instructs a printing device to automatically choose the best option based on configuration.

The InputBin.InputBinOption class defines static fields, each of which serves as a base for various input bin options. Each option can contain additional properties such as InputBin.BinType, InputBin.FeedDirection, InputBin.FeedFace, InputBin.FeedType, InputBin.MediaCapacity, InputBin.MediaPath, InputBin.MediaSizeAutoSense, InputBin.MediaTypeAutoSense, and InputBin.MediaSheetCapacity. To specify them, you should first clone the base property and then call the Add() method with a list of desired properties:

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

Щоб отримати повний список доступних значень властивостей, перегляньте специфікацію схеми друку та відповідний розділ Aspose.Page [посилання на API]( https://reference.aspose.com/page/cpp/aspose.page.xps.xpsmetadata /inputbin/).

Як вказати вихідний бак

Функція JobOutputBin описує встановлений вихідний контейнер на пристрої або повний список підтримуваних контейнерів для пристрою. JobOutputBin, DocumentOutputBin і [PageOutputBin]( https://reference.aspose.com/page /cpp/aspose.page.xps.xpsmetadata/pageoutputbin/) ключові слова є взаємовиключними; лише один має бути вказаний в одному друкованому квитку.

Кожен параметр може містити такі властивості: OutputBin.BinType і OutputBin.MediaSheetCapacity. Таким чином, функція JobOutputBin може бути створена таким чином:

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

Як вказати орієнтацію сторінки

Функція PageOrientation описує орієнтацію аркуша фізичного носія. Доступні параметри перераховані в розділі класу PageOrientation.PageOrientationOption довідника API. Нижче наведено приклад того, як створити функцію:

1new PageOrientation(PageOrientation.PageOrientationOption.Landscape);

Як вказати дуплексний режим для виведення

Функція JobDuplexAllDocumentsContiguously описує характеристики дуплексного виведення. Функція двостороннього друку дозволяє друкувати на обох сторонах носія. Усі документи в завданні безперервно дуплексуються. JobDuplexAllDocumentsContiguously та DocumentDuplex є взаємовиключними. Драйвер визначає обробку обмежень між цими ключовими словами. Останнє ключове слово означає, що кожен документ у завданні дуплексується окремо.

Існує три варіанти для цієї функції – OneSided, TwoSidedLongEdge і TwoSidedShortEdge . Перший не має властивостей, а інші два параметризовані за допомогою Duplex.DuplexMode.

Наприклад, якщо ви хочете вказати двосторонній друк для файлу XPS, щоб сторінка перегорталася паралельно MediaSizeHeight, ви можете зробити це таким чином:

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

Якщо ви не хочете, щоб ваш файл був двостороннім, ви можете додати таку функцію до квитка для друку:

1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.OneSided);

Як вказати параметри кольору для виведення

Функція PageOutputColor описує характеристики параметрів кольору для виведення. Існує три параметри для цієї функції – Колір, Відтінки сірого та Монохромний, кожен з яких має дві цілочисельні властивості - DeviceBitsPerPixel і DriverBitsPerPixel.

Наприклад, якщо ви хочете, щоб ваш кольоровий принтер друкував файл XPS у градаціях сірого, ви можете додати таку функцію до квитка на друк:

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

Як працювати з друкованими квитками різного рівня

Якщо ви працюєте з файлом XPS, створеним кимось іншим, ви можете змінити його квиток друку, якщо він присутній. Щоб отримати квиток на друк на рівні завдання, ви можете просто скористатися властивістю JobPrintTicket об’єкта XpsDocument :

1JobPrintTicket pt = document.JobPrintTicket;

Щоб отримати квиток на друк для певного документа у файлі XPS, слід скористатися методом GetDocumentPrintTicket() :

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

де <n> - це номер документа у файлі XPS.

Щоб отримати квиток на друк для певної сторінки у файлі XPS, слід скористатися методом GetPagePrintTicket() :

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

де <m> — номер документа у файлі XPS, а <n> — номер сторінки в m-му документі.

Після отримання екземпляра квитка для друку, якщо він не нульовий, ви можете додати свої функції, створені, як показано в розділах вище:

1pt.Add(<features>);

де <features> - це масив змінної довжини функцій, що підходить для друку квитка певного рівня. Якщо старий квиток для друку вже мав деякі функції, які ви намагаєтеся додати, вони будуть перезаписані новими екземплярами.

Якщо ви не бажаєте змінювати існуючі квитки на друк, а замість цього призначаєте абсолютно новий екземпляр (це також стосується нового файлу XPS), тоді для квитка на друк на рівні завдання слід знову використати властивість JobPrintTicket :

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

де <функції> – це масив змінної довжини функцій, що підходить для квитка на друк завдання.

Якщо ви хочете призначити квиток друку для певного документа у файлі XPS, SetDocumentPrintTicket() слід використовувати метод:

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

де <n> — це номер документа у файлі XPS, а <features> — це масив змінної довжини функцій, що підходить для квитка на друк на рівні документа.

Нарешті, якщо ви хочете призначити квиток друку для певної сторінки у файлі XPS, вам слід скористатися [SetPagePrintTicket()]( https://reference.aspose.com/page/cpp/aspose.page.xps/xpsdocument /setpageprintticket/) метод:

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

де <m> — це номер документа у файлі XPS, <n> — номер сторінки в m-му документі, а <features> — це масив змінної довжини відповідних функцій для квитка для друку на рівні сторінки.

Нижче наведено повний приклад коду для квитка друку на рівні завдання з прикладу проекту Aspose.Page для 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.