Prezentációs információk lekérése és frissítése C++-ban

Áttekintés

Az Aspose.Slides képes azonosítani egy prezentáció formátumát és elolvasni a dokumentum metaadatait anélkül, hogy teljes prezentációs objektummodellt hozna létre. Ez akkor hasznos, ha fájlokat kell osztályozni, leltárt építeni, vagy tulajdonságokat ellenőrizni kell, mielőtt eldöntené, hogy betölti és feldolgozza a prezentáció tartalmát.

Ez a cikk a könnyű ellenőrzést mutatja be a PresentationFactory és az IPresentationInfo használatával, valamint a célzott frissítéseket az IDocumentProperties segítségével.

Ellenőrizze a prezentáció formátumát

Ha már betöltött egy prezentációt, tekintse meg a Determine the Original Presentation Format cikket a betöltés utáni felismeréshez és a régi PPT, PPS és POT adatfolyamok korlátaival kapcsolatban.

Használja az IPresentationFactory::GetPresentationInfo metódust egy fájl ellenőrzéséhez anélkül, hogy Presentation példányt hozna létre. Az IPresentationInfo::get_LoadFormat metódus jelzi a detektált formátumot, például PPTX, PPT vagy ODP.

#include <DOM/IPresentationInfo.h>
#include <DOM/PresentationFactory.h>
#include <LoadFormat.h>
#include <system/array.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/string.h>

using namespace Aspose::Slides;
using namespace System;

auto fileNames = MakeArray<String>({u"pres.pptx", u"pres.ppt", u"pres.odp"});

for (const auto& fileName : fileNames)
{
    auto presentationInfo = PresentationFactory::get_Instance()->GetPresentationInfo(fileName);
    Console::WriteLine(String::Format(u"{0}: {1}", fileName, ObjectExt::ToString(presentationInfo->get_LoadFormat())));
}

Készítsen könnyű prezentációs leltárt

Ha sok prezentációs fájlt dolgoz fel, szüksége lehet egy kompakt leltárra az ellenőrzéshez, indexeléshez vagy egy dokumentumkezelő rendszerhez. Ebben a helyzetben használja az IPresentationFactory::GetPresentationInfo metódust egy IPresentationInfo objektum megszerzéséhez, majd hívja meg az IPresentationInfo::ReadDocumentProperties metódust a dokumentum metaadatok elolvasásához. Ez a megközelítés nem hoz létre Presentation példányt, és nem igényli a teljes prezentációs objektummodell bejárását.

Az IDocumentProperties által biztosított kiterjesztett tulajdonságok a következő leltárértékeket adják meg:

Metódus Leltárérték
get_Slides A diák összes száma.
get_HiddenSlides A rejtett diák száma.
get_Notes Azon diák száma, amelyek jegyzeteket tartalmaznak.
get_Paragraphs A rendelkezésre álló bekezdések összes száma.
get_Words A szavak összes száma.
get_MultimediaClips A hang- és videoklipek összes száma.

Az alábbi példa ezeket az értékeket olvassa be anélkül, hogy Presentation objektumot hozna létre, és egy kompakt leltárt nyomtat. Emellett az IDocumentProperties::get_HeadingPairs metódust kombinálja az IDocumentProperties::get_TitlesOfParts metódussal a tartalmi csoportok, például betűkészletek, témák és dia címek megjelenítéséhez.

#include <DOM/IDocumentProperties.h>
#include <DOM/IHeadingPair.h>
#include <DOM/IPresentationInfo.h>
#include <DOM/PresentationFactory.h>
#include <LoadFormat.h>
#include <system/console.h>
#include <system/io/path.h>
#include <system/object_ext.h>
#include <system/string.h>

using namespace Aspose::Slides;
using namespace System;
using namespace System::IO;

auto filePath = String(u"sample.pptx");
auto presentationInfo = PresentationFactory::get_Instance()->GetPresentationInfo(filePath);
auto documentProperties = presentationInfo->ReadDocumentProperties();

Console::WriteLine(String::Format(u"File: {0}", Path::GetFileName(filePath)));
Console::WriteLine(String::Format(u"Format: {0}", ObjectExt::ToString(presentationInfo->get_LoadFormat())));
Console::WriteLine(String::Format(u"Title: {0}", documentProperties->get_Title()));
Console::WriteLine(String::Format(u"Author: {0}", documentProperties->get_Author()));
Console::WriteLine(u"Statistics:");
Console::WriteLine(String::Format(u"  Slides: {0}", documentProperties->get_Slides()));
Console::WriteLine(String::Format(u"  Hidden slides: {0}", documentProperties->get_HiddenSlides()));
Console::WriteLine(String::Format(u"  Slides with notes: {0}", documentProperties->get_Notes()));
Console::WriteLine(String::Format(u"  Paragraphs: {0}", documentProperties->get_Paragraphs()));
Console::WriteLine(String::Format(u"  Words: {0}", documentProperties->get_Words()));
Console::WriteLine(String::Format(u"  Multimedia clips: {0}", documentProperties->get_MultimediaClips()));

auto headingPairs = documentProperties->get_HeadingPairs();
auto titlesOfParts = documentProperties->get_TitlesOfParts();
auto partIndex = 0;

if (headingPairs == nullptr || titlesOfParts == nullptr || headingPairs->get_Length() == 0 || titlesOfParts->get_Length() == 0)
{
    Console::WriteLine(u"Content groups: not available");
}
else
{
    Console::WriteLine(u"Content groups:");

    for (const auto& headingPair : headingPairs)
    {
        auto partCount = headingPair->get_Count();
        Console::WriteLine(String::Format(u"  {0} ({1})", headingPair->get_Name(), partCount));

        for (auto partOffset = 0; partOffset < partCount && partIndex < titlesOfParts->get_Length(); partOffset++)
        {
            Console::WriteLine(String::Format(u"    - {0}", titlesOfParts[partIndex]));
            partIndex++;
        }
    }

    if (partIndex < titlesOfParts->get_Length())
    {
        Console::WriteLine(u"  Other parts:");

        while (partIndex < titlesOfParts->get_Length())
        {
            Console::WriteLine(String::Format(u"    - {0}", titlesOfParts[partIndex]));
            partIndex++;
        }
    }
}

Minden IHeadingPair egy csoportnevet biztosít a IHeadingPair::get_Name metódussal, valamint a csoport elemeinek számát a IHeadingPair::get_Count metódussal. Az IDocumentProperties::get_TitlesOfParts egy lapos, rendezett tömböt ad vissza, ezért a csoportonként megadott egymást követő címek számát kell felhasználni.

Tárolt metaadatok és formátumkorlátok

A IPresentationInfo::ReadDocumentProperties által visszaadott leltártulajdonságok a forrásdokumentumban elérhető metaadatokat tükrözik. Az Aspose.Slides nem tölti be és nem járja be a prezentációs objektummodellt, hogy újraszámolja ezeket az értékeket ebben a hívásban. Hiányzó tulajdonságok alapértelmezett értékekkel jelennek meg, és a tárolt értékek elavulhatnak, ha az utoljára fájlt mentő alkalmazás nem frissítette a dokumentum tulajdonságait.

  • PPTX: A formátum kiterjesztett dokumentumtulajdonságokat biztosít a diák, jegyzetek, rejtett diák, bekezdések, szavak és multimédia számához, valamint a heading párokhoz és részcímekhez. Az elérhetőség attól függ, mely tulajdonságokat írta a dokumentum előállítója.
  • PPT: A bináris formátum képes tárolni a megfelelő dokumentum-összegző tulajdonságokat. Ha egy tulajdonság hiányzik vagy nem frissült a dokumentum előállítója által, az Aspose.Slides a tárolt vagy alapértelmezett értéket adja vissza, ahelyett, hogy a diák alapján számolná ki.
  • ODP: Az OpenDocument metaadatok általános dokumentumstatisztikákat biztosítanak, például oldalak, bekezdések és szavak számát, de ezek az értékek nem felelnek meg minden PowerPoint-specifikus kiterjesztett tulajdonságnak. A rejtett-dia, jegyzet-dia, multimédia, heading-pár, és részcím metaadatok hiányozhatnak, és a leltártulajdonságok alapértelmezett értékeket adhatnak vissza. Ne kezelje a null értéket vagy a üres tömböt mint meghatározó bizonyítékot arra, hogy a megfelelő tartalom hiányzik.

Használja a könnyű metaadat‑megközelítést leltárak és előzetes ellenőrzések esetén. Töltse be a prezentációt, és ellenőrizze annak élő objektummodelljét, amikor az eredménynek a memóriában történt változásokat kell tükröznie, vagy amikor a tényleges prezentációs tartalmat kell ellenőrizni.

Prezentációs tulajdonságok frissítése

A IPresentationInfo::ReadDocumentProperties által visszaadott tulajdonságok szintén módosíthatók anélkül, hogy Presentation példányt hoznánk létre. Alkalmazza a módosításokat az IPresentationInfo::UpdateDocumentProperties segítségével, majd írja ki a kötött prezentációt az IPresentationInfo::WriteBindedPresentation metódussal.

Az alábbi kép az eredeti dokumentumtulajdonságokat mutatja:

A PowerPoint prezentáció eredeti dokumentumtulajdonságai

Az alábbi példa megváltoztatja a címet és az utolsó mentés időpontját, és az eredményt egy új fájlba írja:

#include <DOM/IDocumentProperties.h>
#include <DOM/IPresentationInfo.h>
#include <DOM/PresentationFactory.h>
#include <system/date_time.h>
#include <system/string.h>

using namespace Aspose::Slides;
using namespace System;

auto sourceFile = String(u"sample.pptx");
auto outputFile = String(u"sample_with_updated_properties.pptx");
auto presentationInfo = PresentationFactory::get_Instance()->GetPresentationInfo(sourceFile);
auto documentProperties = presentationInfo->ReadDocumentProperties();

documentProperties->set_Title(u"Quarterly sales report");
documentProperties->set_LastSavedTime(DateTime::get_UtcNow());

presentationInfo->UpdateDocumentProperties(documentProperties);
presentationInfo->WriteBindedPresentation(outputFile);

Az alábbi kép a frissített dokumentumtulajdonságokat mutatja:

A PowerPoint prezentáció módosított dokumentumtulajdonságai

Hasznos hivatkozások

Kapcsolódó biztonsági ellenőrzések és védelmi beállítások tekintetében lásd a következő cikkeket:

GYIK

Hogyan ellenőrizhetem, hogy a betűkészletek be vannak-e ágyazva és melyek azok?

Töltse be a prezentációt, és használja a Presentation::get_FontsManager metódust. Hívja meg a FontsManager::GetEmbeddedFonts metódust az ágyazott betűkészletek lekéréséhez, és a FontsManager::GetFonts metódust a prezentáció által használt betűkészletek lekéréséhez. Hasonlítsa össze a két eredményt, hogy megtalálja azokat a betűkészleteket, amelyek a megjelenítéshez szükségesek, de nincsenek beágyazva.

Hogyan tudom gyorsan megállapítani, hogy a fájl tartalmaz-e rejtett diákot, és ha igen, hány darabot?

Ha a tárolt dokumentum metaadatok elegendőek, olvassa a IDocumentProperties::get_HiddenSlides értéket az IPresentationFactory::GetPresentationInfo és az IPresentationInfo::ReadDocumentProperties használatával. Ez alkalmas egy könnyű leltárhoz. Ha a prezentáció memóriában módosult, a tárolt metaadatok hiányozhatnak vagy elavultak lehetnek, vagy ha élő értékeket kell ellenőrizni, akkor iteráljon a Presentation::get_Slides elemein, és vizsgálja meg minden dia Slide::get_Hidden metódusát.

Felderíthetem-e, hogy egyedi diamegméret és tájolás van-e használatban, és hogy ezek eltérnek-e az alapértelmezettektől?

Igen. Töltse be a prezentációt, és olvassa a Presentation::get_SlideSize értéket. Vizsgálja meg az ISlideSize::get_Type, az ISlideSize::get_Size, és az ISlideSize::get_Orientation metódusokat, hogy összehasonlítsa a jelenlegi beállításokat a várt előre beállított értékekkel és méretekkel.

Van gyors módja annak, hogy megállapítsam, a diagramok külső adatforrásokra hivatkoznak-e?

Igen. Keresse meg az egyes Chart objektumokat, és vizsgálja meg a ChartData::get_DataSourceType metódust. Külső munkafüzet esetén olvassa a ChartData::get_ExternalWorkbookPath értéket. Az adatforrás típusa és az útvonal azonosítja a külső hivatkozást, de annak elérhetőségének ellenőrzése külön erőforrás-ellenőrzést igényel.

Hogyan értékelhetem a „nehéz” diákokat, amelyek lassíthatják a renderelést vagy a PDF exportot?

Nincs egyetlen komplexitási tulajdonság. Járja be a Presentation::get_Slides elemeit és minden dia IBaseSlide::get_Shapes gyűjteményét. Használja a formák számát, valamint a nagy méretű képek, effektusok, animációk vagy multimédia jelenlétét szűrőjelzőként, és végezzen mérési renderelést vagy exportot, mielőtt egy diát megerősített teljesítménybottként kezelne.