Заменить все вхождения текста в PDF-файле программно, сохраняя исходный стиль.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Заменить все вхождения текста в PDF-файле программно, сохраняя исходный стиль.

Сообщение 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();
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ginal-styl
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»