Найти и заменить текст в PDF с помощью C++

PDF — это популярный формат, который широко используется для обмена документами между организациями и отдельными лицами. Могут быть сценарии, в которых вам нужно найти и заменить некоторый текст в документах PDF перед отправкой. Вы можете сделать это вручную, но это займет больше времени и будет менее эффективным. Лучшим и более быстрым вариантом было бы сделать это программно. В этой статье вы узнаете, как находить и заменять текст в файлах PDF с помощью C++.

C++ API для поиска и замены текста в файлах PDF

Aspose.PDF for C++ — это библиотека C++ для работы с PDF-файлами. Он предоставляет множество функций, которые помогут вам автоматизировать различные аспекты ваших рабочих процессов PDF. Одной из таких функций является поиск и замена текста в файлах PDF. Вы можете либо установить API через NuGet, либо загрузить его напрямую из раздела загрузки.

PM> Install-Package Aspose.PDF.Cpp

Найти и заменить текст в PDF с помощью C++

Aspose.PDF для C++ предоставляет класс TextFragmentAbsorber для поиска текста в документах PDF. Вы инициализируете этот класс текстом, который хотите найти, и используете его для извлечения всех совпадающих текстовых фрагментов. Как только все фрагменты будут доступны, вы перебираете их и заменяете текст. Ниже приведены шаги по поиску и замене текста в файлах PDF с помощью C++.

Ниже приведен пример кода для поиска и замены текста во всем файле PDF с помощью C++.

// Загрузить PDF-файл
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 1.pdf");

// Создайте объект TextAbsorber, чтобы найти все экземпляры входной поисковой фразы.
auto textFragmentAbsorber = MakeObject<TextFragmentAbsorber>(u"Document");

// Примите поглотитель для всех страниц
pdfDocument->get_Pages()->Accept(textFragmentAbsorber);

// Получить извлеченные текстовые фрагменты
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// Перебрать фрагменты
for (auto textFragment : textFragmentCollection)
{
	// Обновление текста и других свойств
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// Сохраните полученный PDF-документ.
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument.pdf");

С++ найти и заменить текст на определенной странице PDF

Могут быть ситуации, когда вы хотите найти и заменить текст только на определенной странице, а не во всем документе. Для этого примите объект TextFragmentAbsorber для страницы, на которой вы хотите заменить текст. Ниже приведены шаги по поиску и замене текста на определенной странице документа PDF.

Ниже приведен пример кода для поиска и замены текста на определенной странице PDF с помощью C++.

// Загрузить PDF-файл
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 1.pdf");

// Создайте объект TextAbsorber, чтобы найти все экземпляры входной поисковой фразы.
auto textFragmentAbsorber = MakeObject<TextFragmentAbsorber>(u"Document");

// Принять абсорбер для второй страницы документа
pdfDocument->get_Pages()->idx_get(2)->Accept(textFragmentAbsorber);

// Получить извлеченные текстовые фрагменты
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// Перебрать фрагменты
for (auto textFragment : textFragmentCollection)
{
	// Обновление текста и других свойств
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// Сохраните полученный PDF-документ.
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument2.pdf");

Заменить текст в области страницы PDF с помощью C++

Вместо поиска по всей странице вы можете указать область страницы, где вы хотите заменить текст. Для этого API предоставляет класс Rectangle. Ниже приведены шаги для поиска и замены текста в определенной части страницы PDF.

Ниже приведен пример кода для поиска и замены текста в определенной области страницы PDF.

// Загрузить PDF-файл
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 1.pdf");

// Создайте объект TextAbsorber, чтобы найти все экземпляры входной поисковой фразы.
auto textFragmentAbsorber = MakeObject<TextFragmentAbsorber>(u"Document");

// поиск текста в пределах страницы
textFragmentAbsorber->get_TextSearchOptions()->set_LimitToPageBounds(true);

// укажите регион страницы для TextSearchOptions
textFragmentAbsorber->get_TextSearchOptions()->set_Rectangle(MakeObject<Rectangle>(100, 100, 800, 700));

// Принять поглотитель для первой страницы документа
pdfDocument->get_Pages()->idx_get(1)->Accept(textFragmentAbsorber);

// Получить извлеченные текстовые фрагменты
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// Перебрать фрагменты
for (auto textFragment : textFragmentCollection)
{
	// Обновление текста и других свойств
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// Сохраните полученный PDF-документ.
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument.pdf");

Поиск и замена текста в файлах PDF с помощью регулярных выражений

Aspose.PDF для C++ также предоставляет возможность поиска текста с использованием регулярных выражений. С помощью регулярных выражений вы можете найти текст, такой как адреса электронной почты, номера телефонов и т. д. Для этого вам нужно указать регулярное выражение вместо строки поиска и использовать класс TextSearchOptions, чтобы указать, что вы используете обычный выражение для поиска. Ниже приведены шаги для поиска и замены текста в файлах PDF с помощью регулярного выражения.

Ниже приведен пример кода для поиска и замены текста в файлах PDF с помощью регулярного выражения.

// Загрузить PDF-файл
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 2.pdf");

// Создайте объект TextAbsorber, чтобы найти все экземпляры входной поисковой фразы.
auto textFragmentAbsorber = MakeObject<TextFragmentAbsorber>(u"\\d{4} - \\d{4}"); // Like 1999-2000

// Установите параметр текстового поиска, чтобы включить использование регулярных выражений
auto textSearchOptions = MakeObject<TextSearchOptions>(true);
textFragmentAbsorber->set_TextSearchOptions(textSearchOptions);

// Принять поглотитель для всех страниц документа
pdfDocument->get_Pages()->Accept(textFragmentAbsorber);

// Получить извлеченные текстовые фрагменты
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// Перебрать фрагменты
for (auto textFragment : textFragmentCollection)
{
	// Обновление текста и других свойств
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// Сохраните полученный PDF-документ.
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument.pdf");

Получить бесплатную лицензию

Вы можете попробовать API без ограничений на пробную версию, запросив бесплатную временную лицензию.

Вывод

В этой статье вы узнали, как находить и заменять текст в файлах PDF с помощью C++. Вы видели, как заменить текст во всем документе PDF, на определенной странице PDF или в определенной области страницы. Кроме того, вы научились искать и заменять текст с помощью регулярного выражения. Aspose.PDF для C++ — это мощный API со множеством дополнительных функций, упрощающих работу с PDF-документами. Вы можете подробно изучить API, используя официальную документацию. Если у вас есть какие-либо вопросы, свяжитесь с нами на форуме.

Смотрите также