Конвертировать PDF файл в HTML формат
Aspose.PDF for C++ предоставляет множество функций для преобразования различных форматов файлов в PDF документы и преобразования PDF файлов в различные выходные форматы. Эта статья обсуждает, как конвертировать PDF файл в HTML. Aspose.PDF for C++ предоставляет возможность конвертировать HTML файлы в формат PDF, используя подход InLineHtml. Мы получили много запросов на функциональность, которая конвертирует PDF файл в HTML формат, и предоставили эту функцию. Обратите внимание, что эта функция также поддерживает XHTML 1.0.
Aspose.PDF for C++ поддерживает функции для конвертации PDF файла в HTML. Основные задачи, которые вы можете выполнить с библиотекой Aspose.PDF, перечислены:
- конвертация PDF в HTML;
- разделение вывода на многостраничный HTML;
- указание папки для хранения SVG-файлов;
- сжатие SVG-изображений во время конвертации;
- указание папки для изображений;
- создание последующих файлов только с содержимым тела;
- прозрачная отрисовка текста;
- отрисовка слоев PDF-документа.
Aspose.PDF для C++ предоставляет двухстрочный код для преобразования исходного PDF-файла в HTML. Перечисление SaveFormat
содержит значение Html, которое позволяет сохранить исходный файл в HTML. Следующий фрагмент кода показывает процесс конвертации PDF-файла в HTML.
void ConvertPDFtoHTML()
{
std::clog << __func__ << ": Start" << std::endl;
// Строка для имени пути
String _dataDir("C:\\Samples\\Conversion\\");
// Строка для имени файла
String infilename("sample.pdf");
String outfilename("PDFToHTML.html");
// Открыть документ
auto document = MakeObject<Document>(_dataDir + infilename);
try {
// Сохранить вывод в формате HTML
document->Save(outfilename, SaveFormat::Html);
}
catch (Exception ex) {
std::cerr << ex->get_Message() << std::endl;
}
std::clog << __func__ << ": Finish" << std::endl;
}
Попробуйте конвертировать PDF в HTML онлайн
Aspose.PDF для C++ предлагает вашему вниманию бесплатное онлайн-приложение “PDF to HTML”, где вы можете попробовать исследовать функциональность и качество его работы.
Разделение вывода на многостраничный HTML
При конвертации большого PDF файла с несколькими страницами в формат HTML, вывод отображается как одна HTML страница. Она может оказаться очень длинной. Чтобы контролировать размер страницы, можно разделить вывод на несколько страниц во время конвертации PDF в HTML. Пожалуйста, попробуйте использовать следующий фрагмент кода.
void ConvertPDFtoHTML_SplittingOutputToMultiPageHTML()
{
std::clog << __func__ << ": Start" << std::endl;
// Строка для имени пути
String _dataDir("C:\\Samples\\Conversion\\");
// Строка для имени файла
String infilename("sample.pdf");
String outfilename("PDFToHTML.html");
// Открыть документ
auto document = MakeObject<Document>(_dataDir + infilename);
// Создать объект параметров сохранения HTML
auto htmlOptions = MakeObject<HtmlSaveOptions>();
// Указать разделение вывода на несколько страниц
htmlOptions->set_SplitIntoPages(true);
try {
// Сохранить вывод в формате HTML
document->Save(_dataDir + outfilename, htmlOptions);
}
catch (Exception ex) {
std::cerr << ex->get_Message() << std::endl;
}
std::clog << __func__ << ": Finish" << std::endl;
}
Указание папки для хранения SVG файлов
Во время конвертации PDF в HTML можно указать папку, в которую должны сохраняться изображения SVG. Используйте класс HtmlSaveOption
свойство SpecialFolderForSvgImages
, чтобы указать специальный каталог для изображений SVG. Это свойство получает или задает путь к каталогу, в который должны сохраняться изображения SVG, когда они встречаются в процессе конвертации. Если параметр пуст или равен null, то любые файлы SVG сохраняются вместе с другими файлами изображений.
void ConvertPDFtoHTML_SpecifyFolderForStoringSVGfiles()
{
std::clog << __func__ << ": Start" << std::endl;
// Строка для имени пути
String _dataDir("C:\\Samples\\Conversion\\");
// Строка для имени файла
String infilename("sample.pdf");
String outfilename("SaveSVGFiles_out.html");
// Открыть документ
auto document = MakeObject<Document>(_dataDir + infilename);
// Создать объект параметров сохранения HTML
auto htmlOptions = MakeObject<HtmlSaveOptions>();
// Указать папку, в которую сохраняются изображения SVG во время конвертации PDF в HTML
htmlOptions->SpecialFolderForSvgImages = (_dataDir + String("\\svg\\"));
// Сохранить выходные данные в формате HTML
document->Save(_dataDir + outfilename, htmlOptions);
std::clog << __func__ << ": Finish" << std::endl;
}
Сжатие SVG изображений во время конвертации
Для сжатия SVG изображений во время конвертации PDF в HTML попробуйте использовать следующий код:
void ConvertPDFtoHTML_CompressingSVGimages()
{
std::clog << __func__ << ": Start" << std::endl;
// Строка для названия пути
String _dataDir("C:\\Samples\\Conversion\\");
// Строка для названия файла
String infilename("sample.pdf");
String outfilename("PDFToHTML.html");
// Открыть документ
auto document = MakeObject<Document>(_dataDir + infilename);
// Создать объект параметров сохранения в HTML
auto htmlOptions = MakeObject<HtmlSaveOptions>();
// Указать папку, в которую будут сохранены SVG изображения во время конвертации PDF в HTML
htmlOptions->SpecialFolderForSvgImages = (_dataDir + String("\\svg\\"));
// Сохранить выходной файл в формате HTML
document->Save(_dataDir + outfilename, htmlOptions);
std::clog << __func__ << ": Finish" << std::endl;
}
Указание папки для изображений
Мы также можем указать папку, в которую будут сохраняться изображения во время конвертации PDF в HTML:
void ConvertPDFtoHTML_SpecifyFolderForStoringAllImages()
{
std::clog << __func__ << ": Start" << std::endl;
// String for path name
String _dataDir("C:\\Samples\\Conversion\\");
// String for file name
String infilename("sample.pdf");
String outfilename("PDFToHTML.html");
// Open document
auto document = MakeObject<Document>(_dataDir + infilename);
// Instantiate HTML Save Option object
auto htmlOptions = MakeObject<HtmlSaveOptions>();
// Specify the folder where All images are saved during PDF to HTML conversion
htmlOptions->SpecialFolderForAllImages = (_dataDir + String("\\images\\"));
// Save the output in HTML format
document->Save(_dataDir + outfilename, htmlOptions);
std::clog << __func__ << ": Finish" << std::endl;
}
Создавайте последующие файлы только с содержимым тела
Недавно нас попросили ввести функцию, где PDF-файлы преобразуются в HTML, и пользователь может получить только содержимое тега <body>
для каждой страницы. Этот код создаст один файл с CSS, деталями <html>
, <head>
, и все страницы в других файлах только с содержимым <body>
.
Чтобы удовлетворить это требование, было введено новое свойство, HtmlMarkupGenerationMode, в класс HtmlSaveOptions.
С помощью следующего простого фрагмента кода вы можете разделить выходной HTML на страницы. В выходных страницах все HTML-объекты должны размещаться точно так же, как они размещаются сейчас (обработка и вывод шрифтов, создание и вывод CSS, создание и вывод изображений), за исключением того, что выходной HTML будет содержать содержимое, которое в настоящее время размещено внутри тегов (теперь теги “body” будут опущены). Однако, при использовании этого подхода, ссылка на CSS является ответственностью вашего кода, потому что такие вещи будут удалены. Для этой цели вы можете прочитать CSS с помощью File.ReadAllText() и отправить его через AJAX на веб-страницу, где он будет применен с помощью jQuery.
void ConvertPDFtoHTML_CreateSubsequentFilesWithBodyContentsOnly()
{
std::clog << __func__ << ": Start" << std::endl;
// Строка для имени пути
String _dataDir("C:\\Samples\\Conversion\\");
// Строка для имени файла
String infilename("sample.pdf");
String outfilename("CreateSubsequentFiles_out.html");
// Открытие документа
auto document = MakeObject<Document>(_dataDir + infilename);
// Создание объекта опций сохранения HTML
auto htmlOptions = MakeObject<HtmlSaveOptions>();
htmlOptions->HtmlMarkupGenerationMode = HtmlSaveOptions::HtmlMarkupGenerationModes::WriteOnlyBodyContent;
htmlOptions->set_SplitIntoPages(true);
// Сохранение вывода в формате HTML
document->Save(_dataDir + outfilename, htmlOptions);
std::clog << __func__ << ": Finish" << std::endl;
}
Прозрачное отображение текста
В случае, если исходный/входной PDF-файл содержит прозрачные тексты, затененные передними изображениями, могут возникнуть проблемы с отображением текста. Поэтому, чтобы учитывать такие сценарии, можно использовать свойства SaveShadowedTextsAsTransparentTexts и SaveTransparentTexts.
void ConvertPDFtoHTML_TransparentTextRendering()
{
std::clog << __func__ << ": Start" << std::endl;
// Строка для имени пути
String _dataDir("C:\\Samples\\Conversion\\");
// Строка для имени файла
String infilename("sample.pdf");
String outfilename("TransparentTextRendering_out.html");
// Открыть документ
auto document = MakeObject<Document>(_dataDir + infilename);
// Создать объект HTML Save Option
auto htmlOptions = MakeObject<HtmlSaveOptions>();
htmlOptions->HtmlMarkupGenerationMode = HtmlSaveOptions::HtmlMarkupGenerationModes::WriteOnlyBodyContent;
htmlOptions->SaveShadowedTextsAsTransparentTexts = true;
htmlOptions->SaveTransparentTexts = true;
// Сохранить результат в формате HTML
document->Save(_dataDir + outfilename, htmlOptions);
std::clog << __func__ << ": Finish" << std::endl;
}
Рендеринг слоев PDF документа
Мы можем отобразить слои PDF документа в отдельном элементе типа слоя во время конвертации PDF в HTML:
void ConvertPDFtoHTML_DocumentLayersRendering()
{
std::clog << __func__ << ": Start" << std::endl;
// Строка для имени пути
String _dataDir("C:\\Samples\\Conversion\\");
// Строка для имени файла
String infilename("sample.pdf");
String outfilename("LayersRendering_out.html");
// Открыть документ
auto document = MakeObject<Document>(_dataDir + infilename);
// Создать объект параметров сохранения HTML
auto htmlOptions = MakeObject<HtmlSaveOptions>();
// Указать рендеринг слоев PDF документа отдельно в выходном HTML
htmlOptions->set_ConvertMarkedContentToLayers(true);
// Сохранить вывод в формате HTML
document->Save(_dataDir + outfilename, htmlOptions);
std::clog << __func__ << ": Finish" << std::endl;
}