Javaでスクレイピングした画像をPDFにまとめて保存する方法【Jsoup×iText活用】

はじめに

Web上にある画像を自動で取得して、PDF形式でまとめて保存できたら便利ですよね。この記事では、JavaのJsoupで画像をスクレイピングし、iTextでPDFに出力する方法を実践形式で紹介します。

使用ライブラリ

  • Jsoup:HTMLの解析と画像リンクの取得
  • iText 7:画像をPDFに埋め込む

必要なライブラリの導入

Maven依存関係

<!-- Jsoup -->
<dependency>
  <groupId>org.jsoup</groupId>
  <artifactId>jsoup</artifactId>
  <version>1.17.2</version>
</dependency>

<!-- iText 7 Core -->
<dependency>
  <groupId>com.itextpdf</groupId>
  <artifactId>itext7-core</artifactId>
  <version>8.0.1</version>
  <type>pom</type>
</dependency>

手順概要

  1. Jsoupで画像URLを収集する
  2. 画像をダウンロードする
  3. iTextでPDFに挿入する

1. 画像URLを取得する

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.util.ArrayList;
import java.util.List;

public class ImageScraper {
  public static List<String> scrapeImageUrls(String url) throws Exception {
    List<String> imageUrls = new ArrayList<>();
    Document doc = Jsoup.connect(url).get();
    Elements images = doc.select("img");

    for (var img : images) {
      String src = img.absUrl("src");
      if (!src.isEmpty()) {
        imageUrls.add(src);
      }
    }
    return imageUrls;
  }
}

2. 画像をダウンロード&PDFに挿入

import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import com.itextpdf.io.image.ImageDataFactory;

import java.io.InputStream;
import java.net.URL;
import java.util.List;

public class ImageToPdf {
  public static void saveImagesToPdf(List<String> imageUrls, String outputPath) throws Exception {
    PdfWriter writer = new PdfWriter(outputPath);
    PdfDocument pdf = new PdfDocument(writer);
    Document doc = new Document(pdf);

    for (String imageUrl : imageUrls) {
      try (InputStream in = new URL(imageUrl).openStream()) {
        byte[] imageBytes = in.readAllBytes();
        Image img = new Image(ImageDataFactory.create(imageBytes));
        doc.add(img);
      } catch (Exception e) {
        System.err.println("画像読み込みエラー: " + imageUrl);
      }
    }

    doc.close();
    System.out.println("PDFに保存完了: " + outputPath);
  }
}

3. 実行メインクラス

public class Main {
  public static void main(String[] args) throws Exception {
    String targetUrl = "https://example.com";
    List<String> imageUrls = ImageScraper.scrapeImageUrls(targetUrl);
    ImageToPdf.saveImagesToPdf(imageUrls, "output.pdf");
  }
}

注意点と補足

  • 画像サイズの縮小・整列Image.setWidth()やレイアウト設定で対応可能です。
  • iText 7は商用利用時ライセンス注意(AGPLまたは商用ライセンス)。
  • imgタグがdata-srcなどを使っている場合はセレクタ変更が必要です。

まとめ

Javaを使えば、スクレイピングからPDF出力まで一貫して自動化できます。画像付きレポートや保存用資料の作成にぜひ活用してください。

タイトルとURLをコピーしました