Powered by Cloudflare

【簡単】HTMLをPDFに変換するAPIを使ってみた【Ruby】

Code

プログラムで生成したHTMLをPDFにしたいというときに役立つAPIの話です。

タイトルに書いている通り、基本的にはRubyをサンプルにして紹介していきたいと思います。

そもそもなぜRubyでAPIを使う必要があったのかと気になる人もいると思います。Rubyなら、簡単にGEMでHTMLからPDFに変換することができますからね。例えば、wkhtmltopdfとか使えば一発です。

しかし、これらのGEMは基本的にレンダリングエンジンを必要とします。どういうことかというと、画面描写する機能があるプラットフォーム上でしか動かないんですよね。今回は普段使っているレンタルサーバー上で動かすプログラムで、WEBサーバーという用途上、サーバーでレンダリングできなかったので、APIを使うことにしたという感じです。

1.APIサービスに登録する

まずは、APIを使うためのトークンの取得からです。今回はhttps://htmlpdfapi.com/というサイトを利用しました。有料プランもありますが、個人かつ小規模なら、無料でもらえるクレジットで十分に使えると思います。トップページ右上の「SIGN UP」というリンクから登録して、APIトークンを取得してください。

2.Rubyからリクエストを送ってPDFを生成する

実際にRubyでコードを書いてPDFを生成してみます。https://htmlpdfapi.com/blogに各プログラミング言語からの操作方法を節目した記事が用意されているので、他のプログラミング言語でも割と簡単にできるかなと。Rubyの記事はこちらです。

まずは、Rubyで「rest-client」というgemを使えるようにします。

gem install rest-client

では生成するコードを書いていきます。URLから生成、HTMLファイルから生成などいろいろありますが、ここでは、HTMLを文字列としてRubyから直接APIに渡す方法でやりました。

prams にはオプションを指定しています。上下左右の余白や用紙サイズ、髪の向きなどを指定できるので、かなり細かい調整が可能です。オプションについてもhttps://htmlpdfapi.com/documentationに説明が書いてあります。

今回はA4の縦、余白はそれぞれ2mmの設定にしています。

注意点があるとすれば、Authentication:に入れる、トークンの文字列には、「Token」が一番初めに入っていないといけないことです。僕はこれを削除していたせいで時間を消費しました。

require 'rest-client'

html=<<EOS
<!DOCTYPE html>
<html>
<head><title>PDF</title><meta charset="utf-8"/></head>
<body>
<h1>PDF Test</h1>
<div style="font-size: 15px;">
It's good to use API in Ruby source!
</div>
</body>
</html>
EOS

api_url = 'https://htmlpdfapi.com/api/v1/pdf'
params = {
  html: html,
  encoding: 'utf-8'
  margin_top: '2',
  margin_right: '2',
  margin_bottom: '2',
  margin_left: '2',
  page_size: 'A4',
  orientation: 'portrait'
}

response = RestClient.post(api_url, params, { Authentication: your_token })
#your_tokenには自分のAPIトークンを入れる

File.open("sample.pdf", 'w') do |file|
  file.write(response)
end

こんな感じで、簡単に生成ができます。

他にもいろいろな方法で生成できます。このhtmlpdfapi.comはとてもドキュメントが充実しているので、実装も割と簡単かなと思うので、ぜひPDFを作る際には使ってみてください。