Замените заданные строки в PDF-файле, сохранив исходный стиль [закрыто] ⇐ JAVA
Замените заданные строки в PDF-файле, сохранив исходный стиль [закрыто]
Рассмотрим следующую ситуацию; У меня есть PDF-файл, содержащий следующие строки -
строка 1: я люблю **писать** код строка 2: Я люблю писать *java*-код строка 3: Мне нравится писать Java-код, который заменяет некоторые тексты (подчеркивание) в PDF. В строке 1 write выделен жирным шрифтом Arial.
в строке 2 java выделен курсивом шрифтом Nunito.
в строке 3 texts подчеркнут шрифтом Times New Roman.
Я пытаюсь заменить
записать с проверкой
java с perl
тексты с словами
сохраняя одинаковый шрифт и стиль для каждого из них. Я пытался добиться этого с помощью библиотеки Itext7 java и просмотрел множество ресурсов по SO, блогов и книг, но ни один из них не соответствует моим точным требованиям.
На данный момент я могу заменить заданные слова в PDF-файле тем же шрифтом (если PDF-файл содержит только один шрифт). Хотя размер извлеченного шрифта отличается от оригинала, мне пришлось поставить его вручную.
public static void main(String[] args) выдает IOException { Читатель PdfReader = новый PdfReader (ИСТОЧНИК); PdfWriter Writer = новый PdfWriter (НАЗНАЧЕНИЕ); PdfDocument pdfDocument = новый PdfDocument (читатель, писатель); TextPropertiesExtractionStrategy ExtractionStrategy = новый TextPropertiesExtractionStrategy(); новый PdfCanvasProcessor(extractionStrategy).processPageContent(pdfDocument.getPage(1)); System.out.println("Имя шрифта: " + extractStrategy.getFontName()); System.out.println("Размер шрифта: " + extractStrategy.getFontSize()); System.out.println("Цвет текста: " + extractStrategy.getTextColor().getColorSpace().toString()); } частный статический класс TextPropertiesExtractionStrategy реализует ITextExtractionStrategy { частная строка имя_шрифта; частный плавающий шрифт FontSize; частный Цвет textColor; частный шрифт PdfFont; @Override public void eventOccurred (данные IEventData, тип EventType) { если (данные экземпляра TextRenderInfo) { TextRenderInfo textRenderInfo = (TextRenderInfo) данные; // Получаем информацию о шрифте шрифт = textRenderInfo.getFont(); имя_шрифта = шрифт.getFontProgram().getFontNames().getFontName(); FontSize = textRenderInfo.getFontSize(); // Получаем информацию о цвете текста textColor = textRenderInfo.getFillColor(); } } @Override public Set getSupportedEvents() { вернуть ноль; } @Override публичная строка getResultantText() { вернуть ноль; } публичная строка getFontName() { вернуть имя шрифта; } общедоступный float getFontSize() { вернуть размер шрифта; } общественный PdfFont getFont() { вернуть шрифт; } общественный цвет getTextColor() { вернуть текстЦвет; } } Я открыт для любых других библиотек или языков с открытым исходным кодом, а также для Python [я также пробовал MuPdf], если он решает эту конкретную проблему.
Рассмотрим следующую ситуацию; У меня есть PDF-файл, содержащий следующие строки -
строка 1: я люблю **писать** код строка 2: Я люблю писать *java*-код строка 3: Мне нравится писать Java-код, который заменяет некоторые тексты (подчеркивание) в PDF. В строке 1 write выделен жирным шрифтом Arial.
в строке 2 java выделен курсивом шрифтом Nunito.
в строке 3 texts подчеркнут шрифтом Times New Roman.
Я пытаюсь заменить
записать с проверкой
java с perl
тексты с словами
сохраняя одинаковый шрифт и стиль для каждого из них. Я пытался добиться этого с помощью библиотеки Itext7 java и просмотрел множество ресурсов по SO, блогов и книг, но ни один из них не соответствует моим точным требованиям.
На данный момент я могу заменить заданные слова в PDF-файле тем же шрифтом (если PDF-файл содержит только один шрифт). Хотя размер извлеченного шрифта отличается от оригинала, мне пришлось поставить его вручную.
public static void main(String[] args) выдает IOException { Читатель PdfReader = новый PdfReader (ИСТОЧНИК); PdfWriter Writer = новый PdfWriter (НАЗНАЧЕНИЕ); PdfDocument pdfDocument = новый PdfDocument (читатель, писатель); TextPropertiesExtractionStrategy ExtractionStrategy = новый TextPropertiesExtractionStrategy(); новый PdfCanvasProcessor(extractionStrategy).processPageContent(pdfDocument.getPage(1)); System.out.println("Имя шрифта: " + extractStrategy.getFontName()); System.out.println("Размер шрифта: " + extractStrategy.getFontSize()); System.out.println("Цвет текста: " + extractStrategy.getTextColor().getColorSpace().toString()); } частный статический класс TextPropertiesExtractionStrategy реализует ITextExtractionStrategy { частная строка имя_шрифта; частный плавающий шрифт FontSize; частный Цвет textColor; частный шрифт PdfFont; @Override public void eventOccurred (данные IEventData, тип EventType) { если (данные экземпляра TextRenderInfo) { TextRenderInfo textRenderInfo = (TextRenderInfo) данные; // Получаем информацию о шрифте шрифт = textRenderInfo.getFont(); имя_шрифта = шрифт.getFontProgram().getFontNames().getFontName(); FontSize = textRenderInfo.getFontSize(); // Получаем информацию о цвете текста textColor = textRenderInfo.getFillColor(); } } @Override public Set getSupportedEvents() { вернуть ноль; } @Override публичная строка getResultantText() { вернуть ноль; } публичная строка getFontName() { вернуть имя шрифта; } общедоступный float getFontSize() { вернуть размер шрифта; } общественный PdfFont getFont() { вернуть шрифт; } общественный цвет getTextColor() { вернуть текстЦвет; } } Я открыт для любых других библиотек или языков с открытым исходным кодом, а также для Python [я также пробовал MuPdf], если он решает эту конкретную проблему.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Заменить все вхождения текста в PDF-файле программно, сохраняя исходный стиль.
Anonymous » » в форуме JAVA - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Заменить все вхождения текста в PDF-файле программно, сохраняя исходный стиль.
Anonymous » » в форуме Python - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-