PDFドキュメントの印刷方法（Java）

PDFドキュメントを印刷することは、私たちの日常生活の中で最もよく見られることの一つです。 Java言語を使用して、さまざまなシーンに簡単にプログラムでPDFファイルを印刷できます。 Spire.PDFには、プリンタ名の指定、印刷範囲の設定、両面印刷、カスタム用紙サイズ印刷など、PDFドキュメントを強力に印刷する機能があります。 この記事では、これら4つの側面から***PDFドキュメントの印刷方法***について説明します。

- **[印刷ダイアログを使わずにデフォルト印刷機でPDFを印刷する](#印刷ダイアログを使わずにデフォルト印刷機でpdfを印刷する)**
- **[印刷ダイアログを使用してPDFドキュメントを印刷します](#印刷ダイアログを使わずにデフォルト印刷機でpdfを印刷する)**
- **[指定した用紙サイズでPDFドキュメントを印刷します](#指定した用紙サイズでpdfを印刷します)**
- **[PDFドキュメントを両面印刷する](#ドキュメントを両面印刷する)**
- **[指定した印刷機でPDFドキュメントのページ範囲を印刷する](#指定した印刷機でページ範囲を印刷する)**

## 【プログラム環境】
> このテストでは、[Free Spire.PDF for Java](https://jp.e-iceblue.com/download/free-spire-pdf-for-java.html)がプログラムに導入されます。`Spire.Pdf.jar`ファイルは次のユーザーから参照できます。

1. 手動で追加する
`Free Spire.PDF for Java`をローカルにダウンロードし、解凍してインストールします。インストールが完了したら、インストールパスの下のBINフォルダーで`Spire.Pdf.jar`を見つけます。次に、このファイルをプロジェクトの依存項目に追加します。
2. Maven
Maven を使用している場合、プロジェクトの `pom.xml` ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。
```
<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.pdf</artifactId>
        <version>8.7.0</version>
    </dependency>
</dependencies>
```
## 印刷ダイアログを使わずにデフォルト印刷機でPDFを印刷する
> Spire.PDF for javaは、java.awt.printパッケージを使用して、プログラム的にPDFファイルを印刷します。また、デフォルトの印刷余白を削除したり、部数を設定するなど、いくつかの印刷設定をカスタマイズすることができます。

以下は、java.awt.printとSpire.PDF for Javaを使用して、PDFドキュメントをデフォルト印刷機で印刷するための手順です。
- PdfDocument オブジェクトを作成し、PdfDocument.loadFromFile() メソッドを使用して、ファイルからPDFドキュメントを読み込むことができます。
- PrinterJob クラスのオブジェクトを作成し、このクラスのメソッドを呼び出して印刷操作を設定します。
- PrinterJob.setPrintable() メソッドを使用して、指定されたフォーマットでドキュメントの各ページをレンダリングします。
- PDFドキュメントのページを印刷するためにPrinterJob.print()メソッドを呼び出します。

***Java***
```Java
import com.spire.pdf.PdfDocument;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

public class PrintWithDefaultPrinter {

    public static void main(String[] args) {

        //PdfDocumentオブジェクトの作成する
        PdfDocument pdf = new PdfDocument();

        //PDFファイルを読み込む
        pdf.loadFromFile("C:\\Users\\Administrator\\Desktop\\sample.pdf");

        //デフォルトのプリンタに最初に関連付けられたPrinterJobオブジェクトを作成する
        PrinterJob printerJob = PrinterJob.getPrinterJob();

        //PageFormatオブジェクトを作成し、デフォルトのサイズと向きに設定する
        PageFormat pageFormat = printerJob.defaultPage();

        //この PageFormat に関連付けられた Paper オブジェクトのコピーを返す
        Paper paper = pageFormat.getPaper();

        //この用紙の画像形成可能領域を設定する
        paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());

        //このPageFormatに対応するPaperオブジェクトを設定する
        pageFormat.setPaper(paper);

        //レンダラーを呼び出して指定した形式でページをレンダリングする
        printerJob.setPrintable(pdf, pageFormat);

        //印刷を実行する
        try {
            printerJob.print();
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }
}
```
## 印刷ダイアログを使用してPDFを印刷します
以下は、java.awt.printとSpire.PDF for Javaを使用して、印刷ダイアログからPDFドキュメントを印刷する手順です。
- PdfDocument オブジェクトを作成し、PdfDocument.loadFromFile() メソッドを使用して、ファイルからPDFドキュメントを読み込むことができます。
- PrinterJob クラスのオブジェクトを作成し、このクラスのメソッドを呼び出して印刷操作を設定します。
- PrinterJob.setPrintable() メソッドを使用して、指定されたフォーマットでドキュメントの各ページをレンダリングします。
- PrinterJob.setCopies(int) を呼び出し、印刷する部数を設定します。
- PrinterJob.print()メソッドを呼び出し、印刷ダイアログでドキュメントのページを印刷します。

***Java***
```Java
import com.spire.pdf.PdfDocument;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

       public class PrintPDF {
           public static void main(String[] args) throws Exception {
               //PdfDocument オブジェクトの作成する
               PdfDocument pdf = new PdfDocument();

               //PDFファイルを読み込む
               pdf.loadFromFile("Sample.pdf");

               //デフォルトのプリンタに最初に関連付けられたPrinterJobオブジェクトを作成する
               PrinterJob printerJob = PrinterJob.getPrinterJob();

               //PageFormatオブジェクトを作成し、デフォルトのサイズと向きに設定する
               PageFormat pageFormat = printerJob.defaultPage();

               //この PageFormat に関連付けられた Paper オブジェクトのコピーを返す
               Paper paper = pageFormat.getPaper();

               //この用紙の画像形成可能領域を設定する
               paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());

               //このPageFormatに対応するPaperオブジェクトを設定する
               pageFormat.setPaper(paper);

               //印刷部数を設定する
               printerJob.setCopies(3);

               //レンダラーを呼び出して指定した形式でページをレンダリングする
               printerJob.setPrintable(pdf,pageFormat);

               //印刷を実行する
               if (printerJob.printDialog()) {
                   try {
                       printerJob.print();
                   } catch (PrinterException e) {
                       e.printStackTrace();
                   }
               }
           }
       }
```
## 指定した用紙サイズでPDFを印刷します
以下は、PDFドキュメントを指定された用紙サイズで印刷するための詳細な手順です。
- PdfDocument オブジェクトを作成し、PdfDocument.loadFromFile() メソッドを使用して、ファイルからPDFドキュメントを読み込むことができます。
- PrinterJob クラスのオブジェクトを作成し、このクラスのメソッドを呼び出して印刷操作を設定します。
- PrinterJob.setPrintable() メソッドを使用して、指定されたフォーマットでドキュメントの各ページをレンダリングします。
- Paper.setSize() メソッドで、Paperオブジェクトの幅と高さを設定します。
- 印刷ダイアログなしでPDFページを印刷するために、PrinterJob.print() メソッドを呼び出します。

***Java***
```Java
import com.spire.pdf.PdfDocument;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

       public class PrintPDF{
           public static void main(String[] args) throws Exception {

               //PdfDocument オブジェクトの作成する
               PdfDocument pdf = new PdfDocument();

               //PDFファイルを読み込む
               pdf.loadFromFile("Sample.pdf");

               //デフォルトのプリンタに最初に関連付けられたPrinterJobオブジェクトを作成する
               PrinterJob printerJob = PrinterJob.getPrinterJob();

               //PageFormatオブジェクトを作成し、デフォルトのサイズと向きに設定する
               PageFormat pageFormat = printerJob.defaultPage();

               //この PageFormat に関連付けられた Paper オブジェクトのコピーを返す
               Paper paper = pageFormat.getPaper();

               //この用紙の画像形成可能領域を設定する
               paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());

               // Paper オブジェクトの幅と高さを設定する
               paper.setSize(500,600);

               //印刷を実行する
                   try {
                       printerJob.print();
                   } catch (PrinterException e) {
                       e.printStackTrace();
                   }
               }
           }
```
## ドキュメントを両面印刷する
以下は、PDFドキュメントを両面に印刷するための詳細な手順です。
- PdfDocument オブジェクトを作成し、PdfDocument.loadFromFile() メソッドを使用して、ファイルからPDFドキュメントを読み込むことができます。
- PrinterJob クラスのオブジェクトを作成し、このクラスのメソッドを呼び出して印刷操作を設定します。
- PrinterJob.setPrintable() メソッドを使用して、指定されたフォーマットでドキュメントの各ページをレンダリングします。
- PrintRequestAttributeSetオブジェクトを作成し、属性セットに両面印刷を追加します。
- PDFドキュメントのページを印刷するために、PrinterJob.print() メソッドを呼び出します。

***Java***
```Java
import com.spire.pdf.PdfDocument;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Sides;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

public class PrintInDuplexMode {

    public static void main(String[] args) {

               //PdfDocument オブジェクトの作成する
               PdfDocument pdf = new PdfDocument();
               //PDFファイルを読み込む
               pdf.loadFromFile("Sample.pdf");

               //デフォルトのプリンタに最初に関連付けられたPrinterJobオブジェクトを作成する
               PrinterJob printerJob = PrinterJob.getPrinterJob();

               //PageFormatオブジェクトを作成し、デフォルトのサイズと向きに設定する
               PageFormat pageFormat = printerJob.defaultPage();

               //この PageFormat に関連付けられた Paper オブジェクトのコピーを返す
               Paper paper = pageFormat.getPaper();

               //デフォルトの印刷余白を削除する
               paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());
               pageFormat.setPaper(paper);
               printerJob.setPrintable(pdf, pageFormat);

               // PrintRequestAttributedオブジェクトを作成する
               PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();

               //両面印刷に設定する
               aset.add(Sides.TWO_SIDED_SHORT_EDGE);

               //印刷を実行する
               try {
                   printerJob.print(aset);
               } catch (PrinterException e) {
                   e.printStackTrace();
               }
        }
}
```
## 指定した印刷機でページ範囲を印刷する
以下は、指定したプリンタでPDF文書ページを印刷する詳細な手順です。
- PdfDocument オブジェクトを作成し、PdfDocument.loadFromFile() メソッドを使用して、ファイルからPDFドキュメントを読み込むことができます。
- PrinterJob クラスのオブジェクトを作成し、このクラスのメソッドを呼び出して印刷操作を設定します。
- カスタムメソッドfindPrintService()を使用して利用可能な印刷サービスを検索し、PrinterJob.setPrintService()メソッドを使用して印刷機名を指定します。
- PrinterJob.setPrintable() メソッドを使用して、指定されたフォーマットでドキュメントの各ページをレンダリングします。
- PDFドキュメントのページを印刷するために、PrinterJob.print()メソッドを呼び出します。

***Java***
```Java
import com.spire.pdf.PdfDocument;
import javax.print.PrintService;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.PageRanges;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

public class PrintWithSpecifiedPrinter {

    public static void main(String[] args) throws PrinterException {

        // PdfDocument オブジェクトの作成する
        PdfDocument pdf = new PdfDocument();

        // PDFファイルを読み込む
        pdf.loadFromFile("C:\\Users\\Administrator\\Desktop\\sample.pdf");
       
        //デフォルトのプリンタに最初に関連付けられたPrinterJobオブジェクトを作成する
        PrinterJob printerJob = PrinterJob.getPrinterJob();

        //レンダラーを呼び出して指定した形式でページをレンダリングする
        printerJob.setPrintable(pdf, pageFormat);

        //印刷機名を指定する
        PrintService myPrintService = findPrintService("\\\\192.168.1.104\\HP LaserJet P1007");
        printerJob.setPrintService(myPrintService);

        // PageFormatオブジェクトを作成し、デフォルトのサイズと向きに設定する
        PageFormat pageFormat = printerJob.defaultPage();

        //この PageFormat に関連付けられた Paper オブジェクトのコピーを返す
        Paper paper = pageFormat.getPaper();

        //この用紙の画像形成可能領域を設定する
        paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());

        //このPageFormatのPaperオブジェクトを設定する
        pageFormat.setPaper(paper);
        
        // PrintRequestAttributeSet オブジェクトを作成する
        PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();

        //印刷範囲を設定する
        attributeSet.add(new PageRanges(1,7));

        //印刷を実行する
        try {
            printerJob.print(attributeSet);
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }

    //プリントサービスを検索する
    private static PrintService findPrintService(String printerName) {

        PrintService[] printServices = PrinterJob.lookupPrintServices();
        for (PrintService printService : printServices) {
            if (printService.getName().equals(printerName)) {

                System.out.print(printService.getName());
                return printService;
            }
        }
        return null;
    }
}
```

##### はい、これでPDF文書の印刷操作の紹介は終わりです、最後までお読みいただきありがとうございました。