0
0

More than 1 year has passed since last update.

JavaでPNGをPDFに変換する方法

Last updated at Posted at 2022-10-12

PDFは、あらゆるソフトウェアやハードウェアに対応できる汎用性の高い形式です。そのため、あらゆる職場で利用されています。画像ファイルをPDFに変換する際、画像のデザインをそのままに変換できるため、見た目は全く変わりません。今回は、Free Spire.PDF for Javaを使用して、PNG(または任意の画像形式)ファイルをPDFドキュメントに変換する方法を紹介します。

【依存関係の追加】

この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。

1. 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.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>

2. 公式サイトよりJarファイルをダウンロード

まず、Free Spire.PDF for Java の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Pdf.jarファイルを依存関係としてプロジェクトにインポートしてください。

PNGファイルを画質を維持したまま1つのPDFに変換する

主な手順は以下の通りです。

  • PdfDocument クラスのオブジェクトを作成します。
  • PdfDocument.getPageSettings.setMargins() メソッドを使用して、ページマージンを0に設定する。
  • フォルダ内の画像ファイルの抽象パスを取得します。
  • 画像をループして特定の画像を取得し、PdfImage.fromImage() メソッドを使用して PdfImage クラスのオブジェクトにそれを読み込み、画像の幅と高さを取得します。
  • PdfDocument.getPages().add() メソッドを使用して、画像のサイズに基づいてPDFにページを追加します。
  • PdfPageBase.getCanvas().drawImage() メソッドを使用して、ページ上の座標 (0, 0) に PdfImage クラスのオブジェクトを描画してください。
  • PdfDocument.saveToFile() メソッドを使用して、ドキュメントをPDFファイルに保存します。

Java

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class convertPNGToPDF {

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

        //PdfDocument クラスのオブジェクトを作成する
        PdfDocument doc = new PdfDocument();

        //余白を0に設定する
        doc.getPageSettings().setMargins(0);

        //ディレクトリのFileオブジェクトを作成する
        File directoryPath = new File("D:/Images");

        //フォルダ内の画像ファイルの抽象パスを取得する
        File filesList[] = directoryPath.listFiles();

        //画像をルー プする
        for (int i = 0; i < filesList.length; i++) {

            //BufferedImageに画像を読み込む
            BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filesList[i].getAbsolutePath()));

            //PdfImage クラスのオブジェクトを作成する
            PdfImage pdfImage = PdfImage.fromImage(bufferedImage);

            //画像の幅と高さを取得する
            int width = pdfImage.getWidth();
            int height = pdfImage.getHeight();

            //画像と同じ大きさのページを追加する
            PdfPageBase page = doc.getPages().add(new Dimension(width, height));

            //ページの(0, 0)に画像を描画する
            page.getCanvas().drawImage(pdfImage, 0, 0, width, height);
        }

        //ファイルに保存する
        doc.saveToFile("PNGからPDFへの変換.pdf");
    }
}

【結果のPDFファイル】

PNGファイルを画質を維持したまま一つのPDFに変換する

PNGファイルを画質を圧縮してPDFに変換する

高画質の画像をPDFに合成する場合、PDFのサイズが大きくなる傾向があります。生成されるPDFドキュメントのサイズを小さくしたい場合は、画質を圧縮しながら結合することができます。

以下はその手順です。

  • PdfDocument クラスのオブジェクトを作成します。
  • PdfDocument.getPageSettings.setMargins() メソッドを使用して、ページマージンを0に設定する。
  • フォルダ内のイメージファイルの抽象パスを取得します。
  • 画像をループして特定の画像を取得し、PdfImage.fromImage() メソッドを使用して PdfImage クラスのオブジェクトにそれを読み込み、画像の幅と高さを取得します。
  • PdfDocument.getPages().add() メソッドを使用して、画像のサイズに基づいてPDFにページを追加します。
  • PdfPageBase.getCanvas().drawImage(PdfImage image, int compressionQuality, float x, float y, float width, float height) メソッドを用いて、ページ上の座標 (0, 0) に画像を圧縮品質で描画しています。compressionQuality パラメータは1~100の範囲です。1は、画像が元の品質の1%に圧縮されることを意味し、100は、画像が圧縮されないことを意味します。
  • PdfDocument.saveToFile() メソッドを使用して、ドキュメントをPDFファイルに保存してください。

Java

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class convertPNGToPDFCompressingQuality {

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

        //PdfDocument クラスのオブジェクトを作成する
        PdfDocument doc = new PdfDocument();

        //余白を0に設定する
        doc.getPageSettings().setMargins(0);

        //ディレクトリのFileオブジェクトを作成する
        File directoryPath = new File("D:/Images");

        //フォルダ内の画像ファイルの抽象パスを取得する
        File filesList[] = directoryPath.listFiles();

        //画像をループする
        for (int i = 0; i < filesList.length; i++) {

            //BufferedImageに画像を読み込む
            BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filesList[i].getAbsolutePath()));

            //PdfImage クラスのオブジェクトを作成する
            PdfImage pdfImage = PdfImage.fromImage(bufferedImage);

            //画像の幅と高さを取得する
            int width = pdfImage.getWidth();
            int height = pdfImage.getHeight();

            //画像と同じ大きさのページを追加する
            PdfPageBase page = doc.getPages().add(new Dimension(width, height));

            //ページの(0, 0)に画像を描画する
            page.getCanvas().drawImage(pdfImage,30,0, 0, width, height);
        }

        //ファイルに保存する
        doc.saveToFile("画質の圧縮.pdf");
    }
}

【結果のPDFファイル】

PNGファイルを画質を圧縮してPDFに変換する

この記事では、異なる画質でPNG画像をPDFファイルに変換する方法を学ぶことができます。あなたはまだこの記事を読んだ後、いくつかの問題がある場合は、より多くの情報のためのSpire.PDF Forumに移動してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0