Operazioni inter-pacchetto nel pacchetto XPS

Manipola pagine, colori e glifi all’interno del pacchetto XPS tramite C++

 

L'API Aspose.Page per C++ offre una libreria separata per lavorare con i file XPS, consentendoti di trattarli come un formato distinto. Questa libreria vanta una varietà di funzioni utili, tra cui l'unione di documenti XPS, la loro conversione in altri formati e la manipolazione della grafica al loro interno.

Un aspetto fondamentale dei file XPS è la loro capacità di contenere più file all'interno di un singolo documento. Di conseguenza, la libreria Aspose.Page XPS fornisce funzionalità per la gestione di questi file interni e delle relative pagine. Queste operazioni, note come "operazioni inter-pacchetto (cross-package operations)", comportano la manipolazione del contenuto su diversi documenti XPS.

Questa sezione approfondirà esempi specifici di operazioni tra i pacchetti, come la gestione delle pagine all'interno di un singolo documento XPS e l'aggiunta di testo (glifi) con colori specifici.

Ma per poter provare questa funzionalità è necessario prima procurarsi la soluzione:

  • Apri il gestore pacchetti NuGet, cerca Aspose.Page e installalo. Puoi anche utilizzare il seguente comando dalla Console di Gestione pacchetti (Package Manager Console).

Passaggi per manipolare le pagine nel pacchetto XPS in C++.

  1. Imposta il percorso della directory dei documenti.
  2. Crea un file XPS utilizzando la Classe XpsDocument .
  3. Per inserire una pagina attiva da un documento all’inizio di un altro documento utilizza il metodo InsertPage() .
  4. Per inserire una pagina attiva da un documento alla fine di un altro documento utilizza il metodo AddPage() .
  5. Per rimuovere una pagina vuota utilizza il metodo RemovePage() .
  6. Per rimuovere (spostare) una pagina da un documento a un altro documento utilizza i metodi InsertPage() e SelectActivePage() .
  7. Salva i documenti XPS modificati utilizzando il metodo XPsDocument.Save .
Manipola Pagine
    // The path to the documents directory.
    System::String dataDir = RunExamples::GetDataDir_WorkingWithCrossPackageOperations();
    
    // Create the first XPS Document
    System::SharedPtr<XpsDocument> doc1 = System::MakeObject<XpsDocument>(dataDir + u"input1.xps");
    
    // Create the second XPS Document
    System::SharedPtr<XpsDocument> doc2 = System::MakeObject<XpsDocument>(dataDir + u"input2.xps");
    
    // Create the third XPS Document
    System::SharedPtr<XpsDocument> doc3 = System::MakeObject<XpsDocument>(dataDir + u"input3.xps");
    
    // Create the fourth XPS Document
    System::SharedPtr<XpsDocument> doc4 = System::MakeObject<XpsDocument>();
    
    // Insert active page (1 in this case) from the second document to the beginning of the fourth document
    doc4->InsertPage(1, doc2->get_Page(), false);
    
    // Insert active page (1 in this case) from the third document to the end of the fourth document
    doc4->AddPage(doc3->get_Page(), false);
    
    // Remove page 2 from the fourth document. This is an empty page that was created when document has been created.
    doc4->RemovePageAt(2);
    
    // Insert page 3 from the first document to the second postion of the fourth document
    doc4->InsertPage(2, doc1->SelectActivePage(3), false);
    
    // Save the fourth XPS document
    doc4->Save(dataDir + u"output/" + u"out.xps");

Passaggi per aggiungere un clone di glifo all'interno del pacchetto XPS in C++.

  1. Imposta il percorso della directory dei documenti.
  2. Apri un flusso (stream) del file XPS.
  3. Crea un file XPS utilizzando la Classe XpsDocument.
  4. Aggiungi glifi al documento utilizzando il metodo AddGlyphs() .
  5. Crea il secondo file XPS utilizzando la Classe XpsDocument.
  6. Per clonare il glifo dal primo file al secondo file, utilizza i metodi Add() e Clone() .
  7. Salva sia i documenti XPS tramite il metodo XPsDocument.Save().
Aggiungi clone di un glifo e cambia colore
    // The path to the documents directory.
    System::String dataDir = RunExamples::GetDataDir_WorkingWithCrossPackageOperations();
    
    // Create the first XPS Document
    System::SharedPtr<XpsDocument> doc1 = System::MakeObject<XpsDocument>();
    
    // Add glyphs to the first document
    System::SharedPtr<XpsGlyphs> glyphs = doc1->AddGlyphs(u"Times New Roman", 200.0f, System::Drawing::FontStyle::Bold, 50.0f, 250.0f, u"Test");
    
    // Fill glyphs in the first document with one color
    glyphs->set_Fill(doc1->CreateSolidColorBrush(System::Drawing::Color::get_Green()));
    
    // Create the second XPS Document
    System::SharedPtr<XpsDocument> doc2 = System::MakeObject<XpsDocument>();
    
    // Add glyphs cloned from the one's from the first document
    glyphs = doc2->Add<System::SharedPtr<XpsGlyphs>>(glyphs->Clone());
    
    // Fill glyphs in the second document with another color
    (System::ExplicitCast<Aspose::Page::XPS::XpsModel::XpsSolidColorBrush>(glyphs->get_Fill()))->set_Color(doc2->CreateColor(System::Drawing::Color::get_Red()));
    
    // Save the first XPS document
    doc1->Save(dataDir + u"output/" + u"out1.xps");
    
    // Save the second XPS document
    doc2->Save(dataDir + u"output/" + u"out2.xps");

Passaggi per aggiungere in C++ un Glifo riempito con un'immagine.

  1. Imposta il percorso della directory dei documenti.
  2. Apri un flusso del file XPS.
  3. Crea un file XPS utilizzando la Classe XpsDocument.
  4. Aggiungi glifi al documento utilizzando il metodo AddGlyphs().
  5. Per riempire i glifi con un pennello immagine (image brush) utilizza il metodo CreateImageBrush() .
  6. Crea il secondo file XPS utilizzando la Classe XpsDocument.
  7. Aggiungi al secondo documento glifi con il font del primo documento utilizzando il metodo AddGlyphs().
  8. Crea un pennello immagine dal riempimento del primo documento e riempi i glifi nel secondo documento utilizzando il metodo CreateImageBrush().
  9. Salva entrambi i documenti XPS tramite il metodo XPsDocument.Save().
Aggiungi glifo riempito di immagine e immagine esterna
    // The path to the documents directory.
    System::String dataDir = RunExamples::GetDataDir_WorkingWithCrossPackageOperations();
    
    // Create the first XPS Document
    System::SharedPtr<XpsDocument> doc1 = System::MakeObject<XpsDocument>();
    
    // Add glyphs to the first document
    System::SharedPtr<XpsGlyphs> glyphs1 = doc1->AddGlyphs(u"Times New Roman", 200.0f, System::Drawing::FontStyle::Bold, 50.0f, 250.0f, u"Test");
    
    // Fill the glyphs with an image brush
    glyphs1->set_Fill(doc1->CreateImageBrush(dataDir + u"R08SY_NN.tif", System::Drawing::RectangleF(0.f, 0.f, 128.f, 192.f), System::Drawing::RectangleF(0.f, 0.f, 64.f, 96.f)));
    (System::ExplicitCast<Aspose::Page::XPS::XpsModel::XpsImageBrush>(glyphs1->get_Fill()))->set_TileMode(Aspose::Page::XPS::XpsModel::XpsTileMode::Tile);
    
    // Create the second XPS Document
    System::SharedPtr<XpsDocument> doc2 = System::MakeObject<XpsDocument>();
    
    // Add glyphs with the font from the first document to the second document
    System::SharedPtr<XpsGlyphs> glyphs2 = doc2->AddGlyphs(glyphs1->get_Font(), 200.0f, 50.0f, 250.0f, u"Test");
    
    // Create an image brush from the fill of the the first document and fill glyphs in the second document
    glyphs2->set_Fill(doc2->CreateImageBrush((System::ExplicitCast<Aspose::Page::XPS::XpsModel::XpsImageBrush>(glyphs1->get_Fill()))->get_Image(), System::Drawing::RectangleF(0.f, 0.f, 128.f, 192.f), System::Drawing::RectangleF(0.f, 0.f, 128.f, 192.f)));
    (System::ExplicitCast<Aspose::Page::XPS::XpsModel::XpsImageBrush>(glyphs2->get_Fill()))->set_TileMode(Aspose::Page::XPS::XpsModel::XpsTileMode::Tile);
    
    // Save the first XPS document
    doc1->Save(dataDir + u"output/" + u"out1.xps");
    
    // Save the second XPS document
    doc2->Save(dataDir + u"output/" + u"out2.xps");

XPS Cos'è il formato file XPS

XPS (XML Paper Specification) è l’alternativa Microsoft al PDF. Basato su XML/HTML, mantiene il layout su diverse piattaforme ed è indipendente dal sistema operativo.