Trabalhar com Documento em PostScript | C++
Criar Documento PS
O Aspose.Page para C++ oferece dois construtores para criar a classe PsDocument. O seguinte excerto de código cria um documento PS de 1 página:
1 // The path to the documents directory.
2 System::String dir = RunExamples::GetDataDir_WorkingWithDocument();
3
4 //Create output stream for PostScript document
5 {
6 System::SharedPtr<System::IO::Stream> outPsStream = System::MakeObject<System::IO::FileStream>(dir + u"document.ps", System::IO::FileMode::Create);
7 // Clearing resources under 'using' statement
8 System::Details::DisposeGuard<1> __dispose_guard_0({ outPsStream});
9 // ------------------------------------------
10
11 try
12 {
13 //Create save options
14 System::SharedPtr<PsSaveOptions> options = System::MakeObject<PsSaveOptions>();
15 //If you want to aassign page size other than A4, set page size in options
16 options->set_PageSize(PageConstants::GetSize(PageConstants::SIZE_A4(), PageConstants::ORIENTATION_PORTRAIT()));
17 //If you want to aassign page margins other empty, set page margins in options
18 options->set_Margins(PageConstants::GetMargins(PageConstants::MARGINS_ZERO()));
19 //If you plan to use fonts that located in non system folders, set additional fonts folders in options
20 options->set_AdditionalFontsFolders(System::MakeArray<System::String>({dir}));
21
22 //Set variable that indicates if resulting PostScript document will be multipaged
23 bool multiPaged = false;
24
25 // Create new multipaged PS Document with one page opened
26 System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(outPsStream, options, multiPaged);
27
28 //Close current page
29 document->ClosePage();
30 //Save the document
31 document->Save();
32 }
33 catch(...)
34 {
35 __dispose_guard_0.SetCurrentException(std::current_exception());
36 }
37 }
Se o documento PS tiver várias páginas, defina a variável multiPaged para true.
Outro construtor permite criar um objeto PsDocument com um número definido de páginas:
1//Create output stream for PostScript document
2using (Stream outPsStream = new FileStream(dir + "document.ps", FileMode.Create))
3{
4 //Create save options
5 PsSaveOptions options = new PsSaveOptions();
6
7 // Create new multipaged PS Document with 2 pages. These two pages are not created. It must be added by AddPage() method.
8 PsDocument document = new PsDocument(outPsStream, options, 2);
9
10 //Adding pages and it's content
11
12 //Save the document
13 document.Save();
14}
15 // The path to the documents directory.
16 System::String dir = RunExamples::GetDataDir_WorkingWithDocument();
17
18 //Create output stream for PostScript document
19 {
20 System::SharedPtr<System::IO::Stream> outPsStream = System::MakeObject<System::IO::FileStream>(dir + u"document.ps", System::IO::FileMode::Create);
21 // Clearing resources under 'using' statement
22 System::Details::DisposeGuard<1> __dispose_guard_0({ outPsStream});
23 // ------------------------------------------
24
25 try
26 {
27 //Create save options
28 System::SharedPtr<PsSaveOptions> options = System::MakeObject<PsSaveOptions>();
29
30 // Create new multipaged PS Document with 2 pages. These two pages are not created. It must be added by AddPage() method.
31 System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(outPsStream, options, 2);
32
33 //Adding pages and it's content
34
35 //Save the document
36 document->Save();
37 }
38 catch(...)
39 {
40 __dispose_guard_0.SetCurrentException(std::current_exception());
41 }
42 }
Veja como trabalhar com documentos PS em Java.
Vamos analisar a classe PsSaveOptions que encapsula opções possíveis para ajudar a criar o documento PostScript correcto.
SaveFormat especifica o formato de saída dos documentos. Pode ser PS ou EPS. Na biblioteca Aspose.Page, as diferenças entre estes dois formatos apenas se reflectem nos comentários PostScript e na extensão do ficheiro. De acordo com a especificação do ficheiro EPS, os ficheiros EPS devem ter 1 página. O formato PS é utilizado por defeito.
PageSize especifica o tamanho das páginas no documento PS. No entanto, podemos atribuir tamanhos de página diferentes para cada página, se necessário. O tamanho da página pode ser obtido a partir da classe PageConstants como no exemplo seguinte:
1 options->set_PageSize(PageConstants::GetSize(PageConstants::SIZE_International(), PageConstants::ORIENTATION_PORTRAIT()));
O tamanho de página predefinido é “A4” na orientação “Retrato”.
- Margens especifica campos em branco entre as margens da página e as margens esquerda, superior, direita e inferior do conteúdo da página. Pode ser obtido na classe PageConstants.
1 options->set_Margins(PageConstants::GetMargins(PageConstants::MARGINS_SMALL())); // 20 points for each margin
As margens padrão são “ZERO” (0, 0, 0, 0).
- BackGroundColor especifica a cor de fundo da página. Pode ser atribuído como:
1 options->set_BackgroundColor(Color::FromArgb(211, 8, 48));
ou:
1 options->set_BackgroundColor(System::Drawing::Color::get_Yellow());
O valor predefinido é “null”, o que significa que não há fundo.
EmbedFonts controla o comportamento do PsDocument ao guardá-lo no ficheiro. Se for “false”, as fontes utilizadas não serão gravadas no ficheiro PS. Neste caso, o interpretador PostScript emitirá um erro se a fonte utilizada não puder ser encontrada nas pastas do sistema no host de destino.
EmbedFontsAs controla a forma como as fontes serão incorporadas no ficheiro PS. Atualmente, existem duas formas de utilizar os formatos de fonte TrueType e Type3. O valor pode ser definido com a ajuda da classe FontConstants como se segue:
1 options->set_EmbedFontsAs(FontsConstants::EMBED_FONTS_TYPE3);
O valor predefinido é “TrueType”.
JpegQualityLevel especifica o nível de compressão/qualidade das imagens no documento PS resultante. Quanto maior for a qualidade necessária, menor será a compactação e vice-versa. A qualidade mínima é 0 e a máxima, 100. O predefinido é 75.
AdditionalFontsFolder especifica os locais onde encontrar as fontes. As pastas de fontes do sistema são sempre incluídas por predefinição.
Debug permite a saída de informação de depuração para a consola. O valor por defeito é falso.
Pode descarregar exemplos e ficheiros de dados do GitHub.