JavaのApache PDFBoxでPDFの結合(Merge)してみた
タイトルの通り、PDFBoxというライブラリを使用して、PDFの結合(Merge)をやってみようと思います。
pom.xml
まずは準備、pom.xmlに依存関係を追加しましょう。
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.12</version> </dependency>
PDFファイルの準備
PDFファイルの中身は何でもいいので以下のように準備します。
今回は、「C:\tmp」フォルダ配下に「helloworld_1.pdf」と「helloworld_2.pdf」を配置します。
HelloWorldPDFBox.java
早速コードを記述してみましょう。
package pdfbox; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.pdfbox.io.MemoryUsageSetting; import org.apache.pdfbox.multipdf.PDFMergerUtility; public class PDFMerge { public static void main(String[] arg) { //Merge対象の2ファイル File file_first = new File("C:\\tmp\\helloworld_1.pdf"); File file_second = new File("C:\\tmp\\helloworld_2.pdf"); //Merge後のファイル名 String merge_filename = "C:\\tmp\\helloworld_merge.pdf"; List<InputStream> sources = new ArrayList<InputStream>(); try(InputStream is0 = new FileInputStream(file_first); InputStream is1 = new FileInputStream(file_second); FileOutputStream mergedPDFOutputStream = new FileOutputStream(merge_filename)) { sources.add(is0); sources.add(is1); PDFMergerUtility pdfMerger = new PDFMergerUtility(); pdfMerger.addSources(sources); pdfMerger.setDestinationStream(mergedPDFOutputStream); //PDFのMerge出力 pdfMerger.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly()); }catch(IOException e) { e.printStackTrace(); } } }
26~28行目のようにtry文の後にリソースを宣言する記述方法を「try-with-resources文」といいます。
簡単に説明するとリソースが文の終わりで確実に閉じられます。
詳細についてはググってみてください。
try(InputStream is0 = new FileInputStream(file_first); InputStream is1 = new FileInputStream(file_second); FileOutputStream mergedPDFOutputStream = new FileOutputStream(merge_filename)) {
実行結果
「helloworld_merge.pdf」が作成されています。中身もmergeができているはずです。
もっとこんなやり方のほうが良いよというのがあれば教えてください。m(__)m
コメント