Как да запазим презентации в C++

Как да запазим презентации в C++

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx формат, използвайки prs.save(path, SaveFormat::PPTX). Това ръководство обхваща правилния модел за запазване, запазването в различен път и често срещаните грешки, свързани със запазването.

Ръководство стъпка по стъпка

Стъпка 1: Сглобете и свържете библиотеката

git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .

Стъпка 2: Отворете или създайте презентация

Използвайте стеково разпределение, за да се изчисти автоматично от деструктора. Извикайте save() преди обектът да излезе от обхвата.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    // Create new
    {
        asf::Presentation prs;
        prs.save("new.pptx", asf::SaveFormat::PPTX);
    }

    // Open existing
    {
        asf::Presentation prs("input.pptx");
        prs.save("output.pptx", asf::SaveFormat::PPTX);
    }

    return 0;
}

Стъпка 3: Запазете след всички модификации

Поставете save() извикване след като всички модификации са завършени, но преди Presentation излезе от обхвата.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
    shape.text_frame()->set_text("Hello, World!");
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Стъпка 4: Запазете в различен път

Предайте различен изходен път, за да създадете нов файл без да променяте оригинала:

asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);

Това template.pptx файлът не е променен; customized.pptx се създава (или се презаписва, ако вече съществува).


Стъпка 5: Проверете изхода

След запазването проверете дали файлът съществува:

#include <filesystem>
#include <iostream>

auto output = std::filesystem::path("output.pptx");
std::cout << "Saved: " << std::filesystem::exists(output)
          << ", size: " << std::filesystem::file_size(output) << " bytes\n";

Поддържан формат за запазване

ФорматEnum стойностПоддържано
PPTX (Office Open XML)SaveFormat::PPTXДа
PDFN/AНе
HTMLN/AНе
SVGN/AНе
PNG / JPEGN/AНе
ODP (OpenDocument)N/AНе

Поддържа се само PPTX. Опит за запазване в друг формат ще предизвика изключение.


Чести проблеми и решения

Грешка „Отказан достъп“ при запис

Изходният файл е отворен в друго приложение (например PowerPoint има отворен файл). Затворете файла в другите приложения преди запазване.

Файлът е създаден, но изглежда празен или повреден

Уверете се prs.save() се извиква преди Presentation обектът е унищожен. След унищожаването вътрешното състояние се освобождава и последващите извиквания ще се провалят или ще произведат невалиден изход.

Изключение при запазване

Това се случва, когато се опитате да запазите в формат, различен от PPTX, или когато използвате неподдържана функция (като диаграми или анимации) по време на запазването.


Често задавани въпроси

Мога ли да запазя в същия файл, който отворих?

Да. Записването в същия път презаписва оригиналния файл:

asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original

Мога ли да запазя в буфер в паметта вместо във файл?

Записване директно в std::vector<uint8_t> или std::ostream не се поддържа в текущия API. Запишете във временен файл и прочетете байтовете:

#include <filesystem>
#include <fstream>
#include <vector>

auto tmp = std::filesystem::temp_directory_path() / "temp.pptx";
prs.save(tmp.string(), asf::SaveFormat::PPTX);

std::ifstream in(tmp, std::ios::binary);
std::vector<uint8_t> bytes((std::istreambuf_iterator<char>(in)),
                            std::istreambuf_iterator<char>());
std::filesystem::remove(tmp);

Запазва ли записването съдържание, което не съм променил?

Да. Неизвестните XML части от оригиналния файл се запазват дословно. Библиотеката сериализира само частите от модела на документа, които разбира, и пропуска всякакъв XML, който не разпознава.


Вижте също

 Български