PDFマージしてみた --CombinePDFとの死闘--

あしたのチームでエンジニアをやっています。KECです。
先日複数のPDFファイルを結合して一つのPDFとしてダウンロードする機能をリリースしました。
その知見を共有したいと思います。

とある打ち合わせにて

A ) 1000件あるPDFを一つずつダウンロードするのはしんどいですなぁー
A ) pdfをまとめてダウンロードできないですかね?
B ) んー調査してみますね

色々と調査した結果、既存の仕様と相性が良さそうなCombinePDFを採用することにしました。

CombinePDF情報

MIT License
バージョン:v1.0.15

github.com

ためしてみた

pdf = CombinePDF.new
pdf << CombinePDF.load("file1.pdf") # one way to combine, very fast.
pdf << CombinePDF.load("file2.pdf")
pdf.to_pdf

なるほどなるほどいけそう

あとはS3にあるPDFファイルのURLを指定すればOKっと

ん?エラーになったぞ?

・・・

公式ドキュメントを見てみるか

・・・

どうやら外部URLの場合は別の方法で読み込む必要があるらしい

url = "https://example.com/my.pdf"
pdf = CombinePDF.parse Net::HTTP.get_response(URI.parse(url)).body

死闘でもなんでもなかったわけですが、無事にPDFをマージすることができました!

PDFのファイルサイズにもよりますが、そこまで動作が重いということはなかったです。
(100個の軽量PDFだと10s程度で完了します)

唐突な宣伝

あしたのチームでは、人事評価産業を一緒に作り上げるエンジニアを募集しています!