Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622

Как заменить участок текста в pdf документе на другой в Java Spring

06.12.2024, 12:03. Показов 825. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Java Spring MVC 1.8. pom не привожу.Вроде пока нет необходимости.
Стоит задача найти в двухстраничном pdf документе (документ с картинками) участок (участки) текста, которые являются ключами и заменить их на другой(нужный) текст. Поступаю так: Использую библиотеку iText https://kb.itextpdf.com/itext/... df-objects

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import com.itextpdf.kernel.pdf.*;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
 
import java.io.File;
 
@RestController
@RequestMapping
public class ApiNewController {
 
    @RequestMapping(value = {"/repl/{filename}"}, method = RequestMethod.GET)
    public String replaceDir(@PathVariable String filename) throws Exception {
 
        String inputFileName = "C:\\OpenServer\\domains\\Workflownew\\public\\temp\\" + filename + ".pdf";
        String outputFileName = "C:\\OpenServer\\domains\\Workflownew\\public\\temp\\" + "testOut1" + ".pdf";
 
        File file = new File(inputFileName);
        file.getParentFile().mkdirs();
        new ApiNewController().manipulatePdf(inputFileName, outputFileName);
 
        return filename;
    }
 
    protected void manipulatePdf(String src, String dest) throws Exception {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
        PdfPage page = pdfDoc.getFirstPage();
        PdfDictionary dict = page.getPdfObject();
 
        PdfObject encod = dict.get(PdfName.Encoding);
        PdfObject object = dict.get(PdfName.Contents);
        if (object instanceof PdfStream) {
            PdfStream stream = (PdfStream) object;
            byte[] data = stream.getBytes();
            String replacedData = new String(data)
                    .replace("${key1}", "5555")
                    .replace("${key2}", "01-02-2024")
                    .replace("${key3}", "01-02-2025");
            stream.setData(replacedData.getBytes());
        }
 
        pdfDoc.close();
    }
Такой вариант работает... в сучае если в качестве ключей использовать простые числа типа
Java
1
2
3
                    .replace("1", "5555")
                    .replace("2", "01-02-2024")
                    .replace("3", "01-02-2025");
И то это работает не всегда, в разных файлах по разному.
С такими ключами как в первом коде вообще не работает. Полагаю, что дело в кодировке pdf документа. Документ на румынском языке.
Библиотека предусматривает учитывать кодировку pdf типа так
Java
1
stream.setData(replacedData.getBytes(StandardCharsets.UTF_8));
Но набор кодировок там ограничен. Румынской точно нет.
Использование подобной java библиотеки (к примеру pdfBox) приводит к такому же результату. Кроме того там не восстанавливаются картинки из исходного документа.

Подскажите пожалуйста как выйти из ситуации.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.12.2024, 12:03
Ответы с готовыми решениями:

Ориентация текста в существующем PDF документе
привет всем, ситуация такая : юзер загружает на сервер PDF документ произвольного содержания(в нем могут быть и картинки и текст), на...

Как получить гиперссылки в pdf документе
Добрый день! Я работаю с библиотекой IText7. Мне нужно получить все гиперссылки pdf документа. В интернете я не нашел примера, как это...

Как получить количество страниц в документе PDF
kak iz biblioteka pdf reader (Axdpdf) shitat countpage in.vbnet

1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
11.12.2024, 15:15
Цитата Сообщение от VlGuvin Посмотреть сообщение
Но набор кодировок там ограничен. Румынской точно нет.
UTF-8 -- универсальная кодировка, там все языки есть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.12.2024, 15:15
Помогаю со студенческими работами здесь

Как заменить участок кода
Подскажите нубу как заменить имя переменной во всем тексте программы на другое имя

Нужна java-программа для чтения электронных книг в формате PDF. Или как можно переделать PDF книгу в вордовский файл?
Нужна java- программа для чтения электронных книг в формате PDF. Нужна очень срочно прошу помощи завтра экзамен просто нада успеть. Или...

Как перезаписать участок текста в файле?
Здравствуйте, не могли бы вы рассказать как можно перезаписать конкретное значение в файле? Поиск значения у меня осуществляется так: ...

Как изменять определенный участок текста в Console?
У меня есть Deleting Files вот такой текст мне надо чтобы заменился цвет только в а все остальное было простым белым шрифтом!

Заменить в строке один кусок текста на другой
Всем доброго времени суток, у меня не большой вопрос, подскажите пожалуйста. Есть таблица юзер , в ней столбец фио, например: Иванов Иван...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru