PDF — это популярный формат, который широко используется для обмена документами между организациями и отдельными лицами. Могут быть сценарии, в которых вам нужно найти и заменить некоторый текст в документах PDF перед отправкой. Вы можете сделать это вручную, но это займет больше времени и будет менее эффективным. Лучшим и более быстрым вариантом было бы сделать это программно. В этой статье вы узнаете, как находить и заменять текст в файлах PDF с помощью C++.
- C++ API для поиска и замены текста в файлах PDF
- Найти и заменить текст в PDF с помощью C++
- С++ найти и заменить текст на определенной странице PDF
- Заменить текст в области страницы PDF с помощью C++
- Поиск и замена текста в файлах PDF с помощью регулярных выражений
- Получить бесплатную лицензию
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 с помощью класса Document.
- Создайте экземпляр класса TextFragmentAbsorber и инициализируйте его текстом, который вы хотите найти в файле PDF.
- Примите TextFragmentAbsorber для страниц, используя Document->getPages()->Accept (System::SharedPtrText::TextFragmentAbsorber посетитель) метод.
- Получить все вхождения текста с помощью метода TextFragmentAbsorber->getTextFragments().
- Прокрутите TextFragmentCollection и обновите текст с помощью метода TextFragment->setText (System::String value).
- Сохраните обновленный файл PDF с помощью метода Документ->Сохранить (System::String outputFileName).
Ниже приведен пример кода для поиска и замены текста во всем файле 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 с помощью класса Document.
- Создайте экземпляр класса TextFragmentAbsorber и инициализируйте его текстом, который вы хотите найти в файле PDF.
- Примите TextFragmentAbsorber для конкретной страницы, используя Document->getPages()->idxget (int32t index)->Accept (System::SharedPtrText::TextFragmentAbsorber посетитель).
- Получить все вхождения текста с помощью метода TextFragmentAbsorber->getTextFragments().
- Прокрутите TextFragmentCollection и обновите текст с помощью метода TextFragment->setText (System::String value).
- Сохраните обновленный файл PDF с помощью метода Документ->Сохранить (System::String outputFileName).
Ниже приведен пример кода для поиска и замены текста на определенной странице 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 с помощью класса Document.
- Создайте экземпляр класса TextFragmentAbsorber и инициализируйте его текстом, который вы хотите найти и заменить в файле PDF.
- Задайте область страницы для поиска с помощью метода TextFragmentAbsorber->getTextSearchOptions()->setRectangle (System::SharedPtr< Aspose::Pdf::Rectangle> value).
- Примите TextFragmentAbsorber для конкретной страницы, используя Document->getPages()->idxget (int32t index)->Accept (System::SharedPtrText::TextFragmentAbsorber посетитель).
- Получить все вхождения текста с помощью метода TextFragmentAbsorber->getTextFragments().
- Прокрутите TextFragmentCollection и обновите текст с помощью метода TextFragment->setText (System::String value).
- Сохраните обновленный файл PDF с помощью метода Документ->Сохранить (System::String outputFileName).
Ниже приведен пример кода для поиска и замены текста в определенной области страницы 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 с помощью класса Document.
- Создайте экземпляр класса TextFragmentAbsorber и инициализируйте его регулярным выражением, которое вы хотите использовать.
- Инициализируйте класс TextSearchOptions и передайте значение true его конструктору. Это будет означать, что вы ищете с использованием регулярного выражения.
- Назначьте объект TextSearchOptions классу TextFragmentAbsorber, используя TextFragmentAbsorber->setTextSearchOptions (System::SharedPtrAspose::Pdf::Text::TextSearchOptions значение) метод.
- Примите TextFragmentAbsorber для страниц, используя Document->getPages()->Accept (System::SharedPtrText::TextFragmentAbsorber посетитель).
- Получить все вхождения текста с помощью метода TextFragmentAbsorber->getTextFragments().
- Прокрутите TextFragmentCollection и обновите текст с помощью метода TextFragment->setText (System::String value).
- Сохраните обновленный файл PDF с помощью метода Документ->Сохранить (System::String outputFileName).
Ниже приведен пример кода для поиска и замены текста в файлах 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, используя официальную документацию. Если у вас есть какие-либо вопросы, свяжитесь с нами на форуме.