Java로 Excel 문서 인쇄하기: XLS 및 XLSX 파일

Pilalo Jovanitho·2026년 9월 3일

Excel 파일은 데이터 분석과 보고의 핵심 도구이지만, 때로는 데이터를 종이에 출력하여 공유하거나 보관해야 할 필요가 있습니다. 물리적인 문서는 회의 자료, 승인 절차, 또는 디지털 접근이 제한된 환경에서 여전히 중요한 역할을 합니다. 이 글에서는 Java용 Spire.XLS for Java 라이브러리를 사용하여 Excel 파일을 프로그래밍 방식으로 인쇄하는 방법과 인쇄 옵션을 설정하는 방법을 단계별로 살펴보겠습니다.

1. 라이브러리 설치 및 설정

Java 프로젝트에서 Excel 인쇄 기능을 사용하려면 먼저 라이브러리를 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음 리포지토리와 의존성을 포함시킵니다.

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.xls</artifactId>
        <version>16.8.4</version>
    </dependency>
</dependencies>

Maven을 사용하지 않는다면, JAR 파일을 직접 내려받아 프로젝트의 클래스패스에 추가할 수도 있습니다.

2. 인쇄 옵션 설정하기: PageSetup 활용

인쇄를 실행하기 전에 PageSetup 객체를 통해 다양한 인쇄 옵션을 세밀하게 제어할 수 있습니다. 이 객체는 페이지 여백, 인쇄 영역, 반복 제목 행, 눈금선, 흑백 인쇄 등 워크시트의 인쇄 동작을 정의합니다.

주요 설정 항목:

  • 페이지 여백: setTopMargin(), setBottomMargin(), setLeftMargin(), setRightMargin()으로 여백을 인치 단위로 설정합니다.
  • 인쇄 영역: setPrintArea()로 특정 셀 범위(예: "A1:D10")만 인쇄하도록 지정합니다.
  • 제목 행 반복: setPrintTitleRows()를 사용하여 매 페이지 상단에 반복될 행(예: "$1:$2")을 설정합니다.
  • 눈금선 및 머리글 인쇄: isPrintGridlines(true)와 isPrintHeadings(true)로 눈금선과 행/열 머리글을 포함시킵니다.
  • 주석 인쇄: setPrintComments(PrintCommentType.InPlace)로 워크시트에 표시된 대로 주석을 인쇄합니다.
  • 인쇄 품질: setPrintQuality(300)로 DPI(해상도)를 설정합니다.
  • 흑백 인쇄: setBlackAndWhite(true)로 컬러 없이 흑백으로 인쇄합니다.
  • 인쇄 순서: setOrder(OrderType.OverThenDown)으로 여러 페이지 인쇄 시 순서(행 우선 또는 열 우선)를 지정합니다.
  • 페이지 맞춤: isFitToPage(true)로 워크시트 내용을 한 페이지에 맞춥니다.
import com.spire.xls.*;

public class SetPrintOptions {
    public static void main(String[] args) {
        // Workbook 객체 생성 및 Excel 파일 로드
        Workbook workbook = new Workbook();
        workbook.loadFromFile("sample.xlsx");

        // 첫 번째 워크시트 가져오기
        Worksheet worksheet = workbook.getWorksheets().get(0);

        // PageSetup 객체 가져오기
        PageSetup pageSetup = worksheet.getPageSetup();

        // 페이지 여백 설정 (인치 단위)
        pageSetup.setTopMargin(0.3);
        pageSetup.setBottomMargin(0.3);
        pageSetup.setLeftMargin(0.3);
        pageSetup.setRightMargin(0.3);

        // 인쇄 영역 지정
        pageSetup.setPrintArea("A1:D10");

        // 제목 행 지정 (매 페이지 상단에 반복)
        pageSetup.setPrintTitleRows("$1:$2");

        // 행/열 머리글 인쇄 허용
        pageSetup.isPrintHeadings(true);

        // 눈금선 인쇄 허용
        pageSetup.isPrintGridlines(true);

        // 워크시트에 표시된 대로 주석 인쇄
        pageSetup.setPrintComments(PrintCommentType.InPlace);

        // 인쇄 품질 설정 (dpi)
        pageSetup.setPrintQuality(300);

        // 흑백 인쇄 모드
        pageSetup.setBlackAndWhite(true);

        // 인쇄 순서 설정 (행 우선)
        pageSetup.setOrder(OrderType.OverThenDown);

        // 워크시트를 한 페이지에 맞춤
        pageSetup.isFitToPage(true);

        // 인쇄 실행 (아래 3단계에서 계속)
    }
}

3. 인쇄 실행하기

설정된 옵션을 바탕으로 실제 인쇄를 실행합니다. PrinterJob 클래스를 사용하여 기본 프린터로 인쇄 작업을 전송할 수 있습니다.

주요 단계:
1. PrinterJob.getPrinterJob()으로 프린터 작업 객체를 생성합니다.
2. defaultPage()로 기본 페이지 형식을 가져옵니다.
3. Paper 객체를 통해 용지의 인쇄 가능 영역을 페이지 전체로 설정합니다.
4. setCopies()로 인쇄 부수를 설정합니다.
5. setPrintable(workbook, pageFormat)으로 인쇄할 내용(워크북)과 페이지 형식을 지정합니다.
6. print() 메서드를 호출하여 인쇄를 실행합니다.

인쇄 실행 코드 (PageSetup 설정 이어짐):

import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

// ... (위의 SetPrintOptions 클래스 main 메서드 내부)

// PrinterJob 객체 생성 및 설정
PrinterJob printerJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = printerJob.defaultPage();
Paper paper = pageFormat.getPaper();

// 용지의 인쇄 가능 영역을 페이지 전체로 설정
paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());
pageFormat.setPaper(paper);

// 인쇄 부수 설정
printerJob.setCopies(1);

// 인쇄 내용 및 형식 지정
printerJob.setPrintable(workbook, pageFormat);

// 인쇄 실행
try {
    printerJob.print();
    System.out.println("인쇄 작업이 전송되었습니다.");
} catch (PrinterException e) {
    System.err.println("인쇄 중 오류 발생: " + e.getMessage());
}

4. 특정 프린터 지정하여 인쇄하기

네트워크에 연결된 특정 프린터나 기본 프린터가 아닌 다른 프린터로 인쇄해야 하는 경우가 있습니다. 이때는 PrintService를 사용하여 프린터를 지정할 수 있습니다.

주요 단계:
1. PrinterJob.lookupPrintServices()로 시스템에서 사용 가능한 모든 프린터 서비스 목록을 가져옵니다.
2. 원하는 프린터 이름과 일치하는 PrintService를 찾습니다.
3. printerJob.setPrintService(myPrintService)로 프린터를 지정합니다.
4. 나머지 인쇄 과정은 동일합니다.

특정 프린터 지정 코드:

import javax.print.PrintService;

// ... (프린터 찾는 메서드)
private static PrintService findPrintService(String printerName) {
    PrintService[] printServices = PrinterJob.lookupPrintServices();
    for (PrintService service : printServices) {
        if (service.getName().equalsIgnoreCase(printerName)) {
            return service;
        }
    }
    return null;
}

// 사용 예시 (PrinterJob 설정 전에 호출)
PrintService myPrintService = findPrintService("HP LaserJet P1007");
if (myPrintService != null) {
    printerJob.setPrintService(myPrintService);
} else {
    System.out.println("지정된 프린터를 찾을 수 없습니다.");
}

5. 주의사항 및 대안

  • 라이선스: 이 라이브러리는 상용 제품입니다. 무료 버전(Free Spire.XLS for Java)도 존재하지만, 인쇄 기능에 대한 제약이 있을 수 있습니다.
  • 환경 의존성: 인쇄 기능은 java.awt.print 패키지를 사용하므로, 서버 환경(헤드리스 모드)에서는 추가 설정이 필요할 수 있습니다.
  • 오픈소스 대안: Apache POI는 인쇄 기능을 직접 제공하지 않으므로, 추가적인 라이브러리나 별도 구현이 필요합니다.

결론

이 글에서는 Spire.XLS for Java를 사용하여 Excel 파일을 인쇄하는 방법을 PageSetup을 통한 다양한 인쇄 옵션 설정과 특정 프린터를 지정하는 방법까지 상세히 살펴보았습니다. PrinterJob과 Workbook 객체의 조합을 통해 애플리케이션에서 직접 보고서를 출력하거나, 사용자에게 다양한 인쇄 설정을 제공할 수 있습니다.
프로젝트의 라이선스 정책과 인쇄 기능의 요구 수준에 따라 이 방식을 채택하거나, Apache POI와 같은 다른 라이브러리와의 조합을 고려해볼 수 있습니다.

0개의 댓글