[java] PDF 파일에서 특정 텍스트를 다른 텍스트로 대체하기(Java Apache PDFBox 사용)

PDF 파일은 일반적으로 텍스트 데이터를 포함하고 있습니다. 때로는 PDF 파일에서 특정 텍스트를 찾아서 다른 텍스트로 대체해야 할 필요가 있을 수 있습니다. Java에서 Apache PDFBox 라이브러리를 사용하여 이 작업을 진행할 수 있습니다.

1. Apache PDFBox 라이브러리 가져오기

먼저, Maven을 사용한다면 pom.xml 파일에 다음 종속성을 추가하여 Apache PDFBox 라이브러리를 가져옵니다:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.26</version>
</dependency>

Maven을 사용하지 않는다면, Apache PDFBox 홈페이지에서 라이브러리를 직접 다운로드하여 프로젝트에 추가합니다.

2. 특정 텍스트 대체 코드 작성하기

import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.TextPosition;
import org.apache.pdfbox.util.Matrix;

public class PdfTextReplacer extends PDFTextStripper {

    private String originalText;
    private String replacementText;

    public PdfTextReplacer(String originalText, String replacementText) throws IOException {
        this.originalText = originalText;
        this.replacementText = replacementText;
    }

    @Override
    protected void writeString(String text, List<TextPosition> textPositions) throws IOException {
        StringBuilder builder = new StringBuilder();
        for (TextPosition position : textPositions) {
            String currentPositionText = position.getUnicode();
            if (currentPositionText.equals(this.originalText)) {
                currentPositionText = this.replacementText;
            }
            builder.append(currentPositionText);
        }
        super.writeString(builder.toString(), textPositions);
    }

    public static void main(String[] args) {
        try {
            String filePath = "path/to/pdf/file.pdf";
            String originalText = "Original Text";
            String replacementText = "Replacement Text";

            PDDocument document = PDDocument.load(new File(filePath));
            PdfTextReplacer textReplacer = new PdfTextReplacer(originalText, replacementText);
            textReplacer.getText(document);

            String outputPath = "path/to/output/file.pdf";
            document.save(outputPath);
            document.close();

            System.out.println("Text replacement complete. Output saved to: " + outputPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드는 PdfTextReplacer라는 클래스를 정의하고, Apache PDFBox의 PDFTextStripper를 상속받아 특정 텍스트를 대체하는 기능을 제공합니다. originalText 변수에는 대체할 텍스트의 원본 텍스트를, replacementText 변수에는 대체할 텍스트로 바꿀 새로운 텍스트를 지정합니다.

main 메소드에서는 PDF 파일의 경로, 원본 텍스트, 대체할 텍스트를 설정한 후, PDDocument를 사용하여 PDF 파일을 로드합니다. 그리고 PdfTextReplacer 클래스를 인스턴스화한 후 getText 메소드를 호출하여 텍스트를 대체합니다. 마지막으로 변경된 내용을 적용한 후 새로운 파일로 저장합니다.

3. 실행 결과 출력

위의 코드를 실행하면, 특정 텍스트가 대체된 PDF 파일이 생성됩니다. 변경 사항이 적용된 파일은 outputPath 변수에 지정한 경로에 저장되며, 콘솔에는 변경 완료 메시지가 출력됩니다.

이렇게 Java에서 Apache PDFBox를 사용하여 PDF 파일에서 특정 텍스트를 다른 텍스트로 대체하는 방법을 알아보았습니다. PDF 파일을 다루는 작업에서 텍스트 대체가 필요한 경우, 이 방법을 활용하여 간편하게 작업해보세요!