Конвертация EPUB в PDF

Aspose.PDF for C++ позволяет просто конвертировать файлы EPUB в формат PDF.

EPUB (сокращение от электронное издание) — это бесплатный и открытый стандарт электронных книг от Международного форума цифрового издательства (IDPF). Файлы имеют расширение .epub. EPUB предназначен для контента с возможностью переформатирования, что означает, что EPUB-ридер может оптимизировать текст для конкретного устройства отображения.

EPUB также поддерживает контент с фиксированной версткой. Формат предназначен как единый формат, который издатели и конверсионные компании могут использовать внутри компании, а также для распространения и продажи. Он заменяет стандарт Open eBook. Версия EPUB 3 также одобрена Book Industry Study Group (BISG), ведущей торговой ассоциацией книжной отрасли для стандартизованных передовых практик, исследований, информации и мероприятий, для упаковки контента.

Этапы конвертации:

  1. Создайте String Class для имени пути и имени файла.
  2. Создайте экземпляр класса EpubLoadOptions.
  3. Создайте экземпляр класса Document с упоминанием имени исходного файла и опциями.
  4. Загрузите и Сохраните входной файл.

Следующий фрагмент кода показывает, как конвертировать файлы EPUB в формат PDF с помощью C++.

void ConvertEPUBtoPDF()
{
    std::clog << "EPUB to PDF convert: Start" << std::endl;
    String _dataDir("C:\\Samples\\Conversion\\");
    String infilename("aliceDynamic.epub");
    String outfilename("epub_test.pdf");
    auto options = MakeObject<EpubLoadOptions>();
    try {
    auto document = MakeObject<Document>(_dataDir + infilename, options);
    document->Save(_dataDir + outfilename);
    }
    catch (System::Exception ex) {
    std::cerr << ex->get_Message() << std::endl;
    }
    std::clog << "EPUB to PDF convert: End" << std::endl;
}

Конвертация текста в PDF

Aspose.PDF для C++ поддерживает функцию конвертации простого текста и предварительно форматированного текстового файла в формат PDF.

Конвертация текста в PDF означает добавление текстовых фрагментов на страницу PDF. Что касается текстовых файлов, мы имеем дело с 2 типами текста: предварительное форматирование (например, 25 строк с 80 символами в строке) и неформатированный текст (простой текст). В зависимости от наших потребностей, мы можем контролировать это добавление самостоятельно или доверить его алгоритмам библиотеки.

Конвертация простого текстового файла в PDF

В случае простого текстового файла мы можем использовать следующую технику:

  1. Создайте String Class для имени пути и имени файла.

  2. Прочитайте исходный текстовый файл с использованием TextReader

  3. Создайте объект Document.

  4. Добавьте Page в коллекцию страниц документа.

  5. Создайте новый объект TextFragment и передайте объект TextReader его конструктору.

  6. Добавьте новый текстовый абзац в коллекцию абзацев и передайте объект TextFragment.

  7. Загрузите и сохраните входной файл.

void ConvertTextToPDF()
{
    std::clog << "Text to PDF convert: Start" << std::endl;
    String _dataDir("C:\\Samples\\Conversion\\");
    String infilename("sample.txt");
    String outfilename("TextToPDF.pdf");

    // Read the source text file
    String content = System::IO::File::ReadAllText(_dataDir + infilename);

    // Instantiate a Document object by calling its empty constructor
    auto document = MakeObject<Document>();

    // Add a new page in Pages collection of Document
    auto page = document->get_Pages()->Add();

    // Create an instance of TextFragmet and pass the text from reader object to its constructor as argument
    auto text = MakeObject<TextFragment>(content);

    // Add a new text paragraph in paragraphs collection and pass the TextFragment object
    auto paragraphs = page->get_Paragraphs();
    paragraphs->Add(text);

    // Save resultant PDF file
    document->Save(_dataDir + outfilename);
    std::clog << "Text to PDF convert: End" << std::endl;
}

Преобразование заранее отформатированного текстового файла в PDF

Преобразование заранее отформатированного текста похоже на обычный текст, но вам необходимо выполнить некоторые дополнительные действия, такие как установка полей, типа и размера шрифта. Очевидно, что шрифт должен быть моноширинным (например, Courier New).

Следуйте этим шагам для преобразования заранее отформатированного текста в PDF с помощью C++:

  1. Создайте объект Document, вызвав его пустой конструктор.
  2. Установите левые и правые поля для лучшего представления.
  3. Создайте объект Document и добавьте новую страницу в коллекцию Pages.
  4. Загрузите и сохраните входной файл изображения.
void ConvertPreFormattedTextToPdf()
{
    std::clog << "Преобразование заранее отформатированного текста в PDF: Начало" << std::endl;
    String _dataDir("C:\\Samples\\Conversion\\");
    String infilename("rfc822.txt");
    String outfilename("TextToPDF.pdf");
    // Чтение текстового файла как массива строк
    auto lines = System::IO::File::ReadAllLines(_dataDir + infilename);

    // Создание объекта Document, вызвав его пустой конструктор
    auto document = MakeObject<Document>();

    // Добавление новой страницы в коллекцию Pages объекта Document
    auto page = document->get_Pages()->Add();

    // Установка левых и правых полей для лучшего представления
    page->get_PageInfo()->get_Margin()->set_Left(20);
    page->get_PageInfo()->get_Margin()->set_Right(10);
    page->get_PageInfo()->get_DefaultTextState()->set_Font(FontRepository::FindFont(u"Courier New"));
    page->get_PageInfo()->get_DefaultTextState()->set_FontSize(12);

    for (int index = 0; index < lines->get_Length(); index++)
    {
        // проверка, содержит ли строка символ "перевод страницы"
        // см. https://en.wikipedia.org/wiki/Page_break
        auto line = lines->idx_get(index);
        if (line.StartsWith(u"\x0c"))
        {
        if (document->get_Pages()->get_Count() > 3) break;
        page = document->get_Pages()->Add();
        // Установка левых и правых полей для лучшего представления
        page->get_PageInfo()->get_Margin()->set_Left(20);
        page->get_PageInfo()->get_Margin()->set_Right(10);
        page->get_PageInfo()->get_DefaultTextState()->set_Font(FontRepository::FindFont(u"Courier New"));
        page->get_PageInfo()->get_DefaultTextState()->set_FontSize(12);
        }
        else
        {
        // Создание экземпляра TextFragment и
        // передача строки в его конструктор в качестве аргумента
        auto text = MakeObject<TextFragment>(line);

        // Добавление нового текстового параграфа в коллекцию параграфов и передача объекта TextFragment
        page->get_Paragraphs()->Add(text);
        }
    }

    // Сохранение результирующего PDF-файла
    document->Save(_dataDir + outfilename);
    std::clog << "Преобразование заранее отформатированного текста в PDF: Завершено" << std::endl;
}

Преобразование XPS в PDF

Aspose.PDF для C++ поддерживает функцию преобразования файлов XPS в формат PDF. Ознакомьтесь с этой статьей, чтобы решить ваши задачи.

Тип файла XPS в первую очередь связан с XML Paper Specification от Microsoft Corporation. XML Paper Specification (XPS), ранее кодовое имя Metro и охватывающее концепцию маркетинга Next Generation Print Path (NGPP), является инициативой Microsoft по интеграции создания и просмотра документов в свою операционную систему Windows.

Для конвертации XPS в PDF с помощью Aspose.PDF для C++, мы представили класс под названием XpsLoadOption, который используется для инициализации объекта LoadOptions. Позже этот объект передается в качестве аргумента во время инициализации объекта Document и помогает PDF-движку рендеринга определить формат входного документа.

Следующий фрагмент кода показывает процесс конвертации файла XPS в формат PDF с использованием C++.

void ConvertXPStoPDF()
{
    std::clog << "XPS to PDF convert: Start" << std::endl;
    String _dataDir("C:\\Samples\\Conversion\\");
    String infilename("sample.oxps");
    String outfilename("XPStoPDF.pdf");
    auto options = MakeObject<XpsLoadOptions>();
    try {
        auto document = MakeObject<Document>(_dataDir + infilename, options);
        document->Save(_dataDir + outfilename);
    }
    catch (System::Exception ex) {
        std::cerr << ex->get_Message() << std::endl;
    };
    std::clog << "XPS to PDF convert: Finish" << std::endl;
}

Преобразование XML в PDF

Формат XML используется для хранения структурированных данных. Существует несколько способов преобразования XML в PDF в Aspose.PDF.

Преобразование XSL-FO в PDF

  1. Создайте Класс String для имени пути и имени файла.
  2. Создайте экземпляр объекта XslFoLoadOption.
  3. Установите стратегию обработки ошибок.
  4. Создайте экземпляр объекта Document.
  5. Сохранить входной файл изображения.
void Convert_XSLFO_to_PDF()
{
    std::clog << "XSL-FO в PDF конвертация: Начало" << std::endl;
    String _dataDir("C:\\Samples\\Conversion\\");
    String infilenameXSL("c:\\samples\\employees.xslt");
    String infilenameXML("c:\\samples\\employees.xml");

    String outfilename("XMLFOtoPDF.pdf");
    // Создать объект XslFoLoadOption
    auto options = new XslFoLoadOptions(infilenameXSL);
    // Установить стратегию обработки ошибок
    options->ParsingErrorsHandlingType = XslFoLoadOptions::ParsingErrorsHandlingTypes::ThrowExceptionImmediately;
    // Создать объект Document
    auto document = MakeObject<Document>(infilenameXML, options);
    document->Save(_dataDir + outfilename);
}