iText 라이브러리를 사용하여 Java에서 PDF 작성 및 읽기

Mohd Mohtashim Nawaz 2024년2월16일
  1. PDF 파일 작업을 위한 PDF 및 라이브러리
  2. iText 라이브러리의 기능
  3. Eclipse에 iText 라이브러리를 설치하는 단계
  4. Java에서 iText 라이브러리를 사용하여 PDF 파일을 만드는 단계
  5. Java에서 iText 라이브러리를 사용하여 PDF 파일을 읽는 단계
iText 라이브러리를 사용하여 Java에서 PDF 작성 및 읽기

iText 라이브러리는 Java로 PDF 파일을 생성, 조작 및 읽기 위한 오픈 소스 라이브러리입니다. 이 기사에서는 iText 라이브러리, Eclipse에 설치, iText 라이브러리를 사용하여 Java에서 PDF 파일 생성 및 읽기에 대해 설명합니다.

PDF 파일 작업을 위한 PDF 및 라이브러리

PDF(Portable Document Format)는 파일을 사용하여 널리 사용되는 데이터 교환 형식입니다. PDF는 하드웨어, 운영 체제 및 소프트웨어와 무관합니다.

따라서 텍스트, 이미지 및 기타 데이터 유형에 매우 널리 사용되며 자주 사용됩니다.

많은 라이브러리를 사용하여 PDF 파일을 만들고 읽고 작업할 수 있습니다. 이러한 라이브러리 중 일부는 아래에 나와 있습니다.

  1. iText - iText의 커뮤니티 버전은 오픈 소스 라이브러리입니다. Java를 사용하여 PDF 파일을 읽고, 만들고, 조작합니다.

    계층 구조를 가지고 있으며 원하는 결과를 생성하기 위해 임의로 복잡한 PDF 파일을 수행할 수 있습니다. iText 라이브러리는 Java 및 .NET에서 사용할 수 있습니다.

  2. Adobe PDF 라이브러리 - Adobe는 PDF 파일을 생성, 조작 및 읽기 위해 이 라이브러리를 개발했습니다. 이 라이브러리를 사용하여 pdf도 인쇄할 수 있습니다.

    이 라이브러리는 C++, Java 및 .NET과 같은 다양한 언어에서 작동합니다.

  3. PDFBox - 이것은 또 다른 오픈 소스 라이브러리입니다. Apache는 PDF 파일을 생성, 편집 및 보기 위해 이 라이브러리를 개발했으며 Java와 함께 사용할 수 있습니다.

  4. Jasper Reports - 이 보고 도구는 PDF 파일로 보고서를 생성할 수 있습니다.

iText 라이브러리의 기능

iText 라이브러리 기능 중 일부를 살펴보겠습니다.

  1. PDF 파일 생성 - iText 라이브러리를 사용하여 임의로 복잡하고 대화형 PDF 파일을 생성할 수 있습니다. PDF 파일에 이미지를 삽입할 수도 있습니다.
  2. iText 라이브러리를 사용하여 PDF 파일에 책갈피를 만들고, 페이지 번호를 추가하고, 워터마크를 추가할 수 있습니다.
  3. PDF 파일에서 분할 및 병합 작업을 수행할 수 있습니다.
  4. iText 라이브러리는 PDF 파일의 대화형 양식으로 작업할 수 있는 기능을 제공합니다.
  5. PDF 파일을 JPG, PNG 등과 같은 다양한 형식의 이미지로 저장할 수 있습니다.

Eclipse에 iText 라이브러리를 설치하는 단계

iText 라이브러리는 사용하기 전에 Java 프로젝트에 별도로 설치해야 하는 타사 오픈 소스 소프트웨어입니다. 이 기사는 Eclipse에서 iText의 설치 단계를 안내합니다.

Eclipse는 Java에서 애플리케이션 개발에 사용되는 가장 널리 사용되는 IDE 중 하나입니다. 이 기사에서는 Java와 Eclipse가 이미 설치되어 있다고 가정합니다.

다른 IDE에서 작업하더라도 설치 프로세스는 유사합니다.

Eclipse 프로젝트에 iText 라이브러리를 추가하는 단계를 살펴보겠습니다.

  • Eclipse에서 프로젝트를 생성합니다(File -> New -> Java 프로젝트).
  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하면 드롭다운 메뉴가 나타납니다.
  • 구성으로 이동합니다.
  • Maven 프로젝트로 변환을 클릭합니다.
  • pom.xml이라는 새 파일이 프로젝트 폴더에 나타납니다.
  • pom.xml을 열고 <project> 태그 내와 <build> 태그 뒤에 다음 종속성을 추가합니다.
    <dependencies>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>barcodes</artifactId>
    	<version>7.2.1</version>
    	<!-- barcodes depends on kernel -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>font-asian</artifactId>
    	<version>7.2.1</version>
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>forms</artifactId>
    	<version>7.2.1</version>
    	<!-- forms depends on kernel and layout -->
      </dependency>
    
      <dependency>
    	  <groupId>com.itextpdf</groupId>
    	  <artifactId>hyph</artifactId>
    	  <version>7.2.1</version>
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>io</artifactId>
    	<version>7.2.1</version>
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>kernel</artifactId>
    	<version>7.2.1</version>
    	<!-- kernel depends on io -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>layout</artifactId>
    	<version>7.2.1</version>
    	<!-- layout depends on kernel -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>pdfa</artifactId>
    	<version>7.2.1</version>
    	<!-- pdfa depends on kernel -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>sign</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
    	<dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>commons</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>styled-xml-parser</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
    <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>svg</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-api</artifactId>
    	<version>2.13.3</version>
    </dependency>
    
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-core</artifactId>
    	<version>2.13.3</version>
    </dependency>
    
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-slf4j-impl</artifactId>
    	<version>2.13.3</version>
    </dependency>
    
    </dependencies>
    

    프로젝트는 작성할 때 iText 라이브러리의 최신 버전(7.2.1)을 사용합니다. 사용 가능한 경우 최신 버전으로 업그레이드할 수 있습니다.

  • 메뉴 표시줄에서 파일로 이동하고 새로 고침을 클릭합니다.

필요한 라이브러리를 프로젝트로 가져옵니다. maven 저장소에서 라이브러리를 다운로드하므로 인터넷에 안정적으로 연결되어 있어야 합니다.

Java에서 iText 라이브러리를 사용하여 PDF 파일을 만드는 단계

라이브러리가 설치되면 iText 라이브러리를 사용하여 Java 프로그램을 사용하여 pdf 파일을 생성할 수 있습니다.

iText 라이브러리에는 쓸 새 pdf 파일을 생성하는 PdfWriter라는 클래스가 있습니다. 파일이 열리면 텍스트, 이미지 등을 추가합니다.

pdf 파일을 만들고 텍스트와 이미지를 추가하는 단계를 이해합시다.

  1. 파일 이름을 매개변수로 생성자에 전달하여 PdfWriter 클래스의 인스턴스를 생성합니다.
  2. PdfWriter 클래스를 생성자에 전달하여 PdfDocument 클래스의 인스턴스 생성을 진행합니다. 이 클래스는 pdf 파일에 쓰는 일을 담당합니다.
  3. 마지막으로 Document 클래스 인스턴스를 생성합니다. PdfDocument 클래스 인스턴스에 연결됩니다.

이 클래스는 pdf 파일에 개별 요소를 첨부하는 데 사용됩니다.

  1. 이제 pdf 파일에 텍스트와 이미지를 쓸 준비가 되었습니다.

iText 라이브러리를 사용하여 Java에서 PDF 파일에 텍스트를 쓰는 단계

파일에 텍스트를 작성하는 단계를 살펴보겠습니다.

  1. Paragraph 클래스는 pdf에 텍스트를 쓰는 데 사용됩니다. 따라서 Paragraph 클래스의 인스턴스를 생성해야 합니다.
  2. add() 메소드를 호출하여 텍스트를 추가할 수 있습니다.
  3. setTextAlignment(), setFont() 등과 같은 다른 메서드를 호출하여 텍스트 모양을 변경할 수 있습니다.
  4. 마지막으로 add() 메서드를 호출하여 paragraph 인스턴스를 Document 인스턴스에 추가합니다.

마지막으로 문서에 모든 인스턴스를 추가했으면 Document 클래스의 close() 메서드를 호출하여 문서를 닫아야 합니다.

iText 라이브러리를 사용하여 Java에서 PDF를 만드는 코드 예제

import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import java.io.IOException;

public class pdfExample {
  public static void main(String[] args) {
    String file = "sample_pdf.pdf";
    try {
      createPdf(file);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private static void createPdf(String file) throws IOException {
    PdfWriter writer = new PdfWriter(file);
    PdfDocument pdfDoc = new PdfDocument(writer);
    Document doc = new Document(pdfDoc);

    PdfFont myFont = PdfFontFactory.createFont(StandardFonts.TIMES_ROMAN);

    Paragraph p1 = new Paragraph();
    p1.add("Hello, This is Delftstack!");
    p1.setTextAlignment(TextAlignment.CENTER);
    p1.setFont(myFont);
    p1.setFontSize(28);
    doc.add(p1);

    Paragraph p2 = new Paragraph();
    p2.add("We help you understand the concepts.");
    p2.setFontSize(18);
    doc.add(p2);

    doc.close();
  }
}

위의 코드를 사용하여 만든 pdf 파일은 아래와 같습니다.

생성된 PDF 파일

Java에서 iText 라이브러리를 사용하여 PDF 파일을 읽는 단계

iText 라이브러리는 pdf 파일을 읽을 수 있는 PdfReader 클래스를 제공합니다. pdf 파일은 다음 단계에 따라 읽을 수 있습니다.

  1. 먼저 파일의 경로를 생성자에 전달하여 PdfReader 클래스의 인스턴스를 생성해야 합니다.
  2. PdfReader 인스턴스를 생성자에 전달하여 PdfDocument 클래스 인스턴스를 생성합니다.
  3. pdf 파일에 여러 페이지가 포함된 경우 각 페이지를 반복해야 합니다. 페이지 수를 얻으려면 PdfDocument 클래스의 인스턴스를 사용하여 getNumberOfPages() 메서드를 호출할 수 있습니다.
  4. 각 페이지를 반복합니다.
    1. 문서의 현재 페이지를 전달하여 PdfTextExtractor 클래스의 getTextFromPage() 메서드를 호출합니다.
    2. 현재 페이지를 가져오려면 Document 클래스의 getPage() 메서드를 호출하고 현재 페이지 번호를 전달해야 합니다.
    3. getTextFromPage() 메소드는 정적이므로 클래스 인스턴스가 필요하지 않습니다.
    4. 메서드는 현재 페이지의 모든 텍스트를 반환합니다. String 변수에 저장할 수 있습니다.
    5. 텍스트를 처리합니다(예: 콘솔에 표시).

iText 라이브러리를 사용하여 Java에서 PDF를 읽는 코드 예제

import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import java.io.IOException;

public class pdfExample {
  public static void main(String[] args) {
    String file = "sample_pdf.pdf";
    try {
      readpdf(file);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private static void readpdf(String file) throws IOException {
    PdfReader pr = new PdfReader(file);
    PdfDocument doc = new PdfDocument(pr);
    int num = doc.getNumberOfPages();

    for (int i = 1; i <= num; i++) {
      String str = PdfTextExtractor.getTextFromPage(doc.getPage(i));
      System.out.println(str);
    }
  }
}

출력:

Hello, This is Delftstack!
We help you understand the concepts.

결론

이 기사는 iText 라이브러리를 사용하여 pdf 파일을 읽고 쓰는 기본 사항에 대해 설명합니다. 그러나 iText 라이브러리는 pdf 파일에서 복잡한 작업을 수행할 수 있습니다.

iText 라이브러리 및 해당 기능에 대해 자세히 알아보려면 문서를 방문하십시오.

관련 문장 - Java PDF