Я ищу программное решение для обновления всех PDF-файлов путем замены в них определенного текста. Я готов реализовать это решение с использованием Java или Python.
Я попробовал приведенный ниже код, но он работает неправильно. Я получаю пустой документ.
Я также попробовал несколько предложений, опубликованных на stackoverflow, с использованием разных библиотек.
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.TextPosition;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ReplaceTextPreserveFont {
public static void replaceTextInPDF(String inputFilePath, String outputFilePath, String targetText,
String replacementText) throws IOException {
// Load the PDF document
PDDocument document = PDDocument.load(new File(inputFilePath));
// Extract text and replace
List textPositions = new ArrayList();
PDFTextStripper stripper = new PDFTextStripper() {
@Override
protected void writeString(String text, List textPositionsList) throws IOException {
textPositions.addAll(textPositionsList);
super.writeString(text, textPositionsList);
}
};
// Extract text to locate the target text
stripper.getText(document);
for (PDPage page : document.getPages()) {
PDPageContentStream contentStream = new PDPageContentStream(document, page,
PDPageContentStream.AppendMode.OVERWRITE, false);
for (TextPosition textPosition : textPositions) {
String text = textPosition.getUnicode();
if (text.contains(targetText)) {
// Replace the text at the same position
contentStream.beginText();
contentStream.setFont(textPosition.getFont(), textPosition.getFontSize());
contentStream.newLineAtOffset(textPosition.getXDirAdj(), textPosition.getYDirAdj());
contentStream.showText(replacementText);
contentStream.endText();
}
}
contentStream.close();
}
// Save the updated document
document.save(outputFilePath);
document.close();
System.out.println("Text replaced and saved to: " + outputFilePath);
}
public static void main(String[] args) {
String inputFilePath = "G:\\Document.pdf";
String outputFilePath = "G:\\Updated_Document.pdf";
String targetText = "Jesse";
String replacementText = "James";
try {
replaceTextInPDF(inputFilePath, outputFilePath, targetText, replacementText);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ginal-styl
Заменить все вхождения текста в PDF-файле программно, сохраняя исходный стиль. ⇐ Python
Программы на Python
1736256651
Anonymous
Я ищу программное решение для обновления всех PDF-файлов путем замены в них определенного текста. Я готов реализовать это решение с использованием Java или Python.
Я попробовал приведенный ниже код, но он работает неправильно. Я получаю пустой документ.
Я также попробовал несколько предложений, опубликованных на stackoverflow, с использованием разных библиотек.
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.TextPosition;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ReplaceTextPreserveFont {
public static void replaceTextInPDF(String inputFilePath, String outputFilePath, String targetText,
String replacementText) throws IOException {
// Load the PDF document
PDDocument document = PDDocument.load(new File(inputFilePath));
// Extract text and replace
List textPositions = new ArrayList();
PDFTextStripper stripper = new PDFTextStripper() {
@Override
protected void writeString(String text, List textPositionsList) throws IOException {
textPositions.addAll(textPositionsList);
super.writeString(text, textPositionsList);
}
};
// Extract text to locate the target text
stripper.getText(document);
for (PDPage page : document.getPages()) {
PDPageContentStream contentStream = new PDPageContentStream(document, page,
PDPageContentStream.AppendMode.OVERWRITE, false);
for (TextPosition textPosition : textPositions) {
String text = textPosition.getUnicode();
if (text.contains(targetText)) {
// Replace the text at the same position
contentStream.beginText();
contentStream.setFont(textPosition.getFont(), textPosition.getFontSize());
contentStream.newLineAtOffset(textPosition.getXDirAdj(), textPosition.getYDirAdj());
contentStream.showText(replacementText);
contentStream.endText();
}
}
contentStream.close();
}
// Save the updated document
document.save(outputFilePath);
document.close();
System.out.println("Text replaced and saved to: " + outputFilePath);
}
public static void main(String[] args) {
String inputFilePath = "G:\\Document.pdf";
String outputFilePath = "G:\\Updated_Document.pdf";
String targetText = "Jesse";
String replacementText = "James";
try {
replaceTextInPDF(inputFilePath, outputFilePath, targetText, replacementText);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79336183/replace-all-occurences-of-text-in-pdf-file-programatically-keeping-original-styl[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия