はじめに
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>
手順概要
- Jsoupで画像URLを収集する
- 画像をダウンロードする
- 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出力まで一貫して自動化できます。画像付きレポートや保存用資料の作成にぜひ活用してください。