あしたのチームでエンジニアをやっています。KECです。
先日複数のPDFファイルを結合して一つのPDFとしてダウンロードする機能をリリースしました。
その知見を共有したいと思います。
とある打ち合わせにて
A ) 1000件あるPDFを一つずつダウンロードするのはしんどいですなぁー
A ) pdfをまとめてダウンロードできないですかね?
B ) んー調査してみますね
色々と調査した結果、既存の仕様と相性が良さそうなCombinePDFを採用することにしました。
CombinePDF情報
MIT License
バージョン:v1.0.15
ためしてみた
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程度で完了します)
唐突な宣伝
あしたのチームでは、人事評価産業を一緒に作り上げるエンジニアを募集しています!