Пошук і заміна тексту в 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 for 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");

C++ Пошук і заміна тексту на певній сторінці 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 for 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 for C++ — це потужний API із багатьма додатковими функціями, які роблять роботу з PDF-документами простою справою. Ви можете детально вивчити API, використовуючи офіційну документацію. Якщо у вас виникли запитання, зв’яжіться з нами на форумі.

Дивись також