Skip to content
shunter1112 edited this page Sep 18, 2013 · 1 revision

HyPDFは、PDFドキュメントを使った作業のための道具を全て取り揃えてあなたに提供するアドオンです。HyPDFを使うと以下の事が出来るようになります :

  • 美しく、複雑なPDFドキュメントをなじみのあるHTML,CSS,そしてJavaScriptを使って作れます。
  • どんな数のページや著者、PDFのバージョンなどが含まれているPDFファイルでも、情報を完全に集めることができます。
  • PDFファイルをプレーンテキストに変換する事ができます。
  • PDFファイルからあるページを引き抜く事ができます。
  • 2つのPDFファイルを一つにすることができます。

更に、HyPDFはあなたが用意した自分のAWS S3バケットに、作成したPDFをアップロードする事が出来ます。

HyPDFはシンプルなAPI経由でのアクセスが可能で、Rubyのクライアントライブラリをサポートしていますが、HTTPリクエストの作成がサポートされているどんな言語からも利用可能です。

アドオンの配備

HyPDFはコマンドライン経由でHerokuのアプリケーションに付加することができます :

利用可能なプランの一覧はここで確認できます。
$ heroku addons:add hypdf
-----> Adding hypdf to sharp-mountain-4005... done, v18 (free)

一度HyPDFが追加されると、HYPDF_USERHYPDF_PASSWORDの設定がアプリ内の設定として出来るようになり、HyPDF APIを使うのに必要な名前とパスワードが含まれます。これは、heroku config:getコマンドを使って確認する事が出来ます。

$ heroku config:get HYPDF_USER
app123@heroku.com

環境設定

アドオンを追加した後は、ローカルで設定変数を置き換えて、あなたの開発環境でサービスを利用できるようにする必要があります。

再利用性は悪いですが、`export HYPDF_USER=123@heroku.com`という風にローカルの環境変数を設定するのも可能です。

Foremanを使うことで、アプリケーションのProcfileの中で指定されている処理構成を信頼性のある形で設定、実行できます。Foremanは設定変数を.envファイルから読み取ります。以下のコマンドを使って、HyPDFの変数の値をHerokuの設定から.envへ回収し、追加してください。

$ heroku config -s | grep HYPDF_ >> .env
$ more .env

証明書と他の重要な設定値はソースコントロール内にコミットされるべきではありません。Gitの中では、.envファイルは除くようにしてください。`echo .env >> .gitignore`

Ruby/Railsでの使用

Ruby/Rails アプリケーションはGemfileの中でHyPDFクライアントライブラリを以下の通り含める必要があります。

gem 'hypdf', '~> 1.0.2'

アプリケーションの依存ファイルをbundlerを使って更新します。

$ bundle install

htmltopdfメソッドを、あなたのHTML/URLとオプションのパラメータを使って呼び出して、直接あなたのドキュメントを取得してください。Tip: 開発中はtestオプションを使ってください。

@hypdf = HyPDF.htmltopdf(
    '<html><body><h1>Title</h1></body></html>',
    orientation: 'Landscape',
    copies: 2,
    # ... other options ...
)

# ユーザにpdfを送信
send_data(
    @hypdf[:pdf],
    filename: "pdf_with_#{@hypdf[:pages]}_pages.pdf",
    type: 'application/pdf'
)

Github上にRailsのサンプルアプリケーションがあります。

他の言語での使用

HyPDFはAPI referenceの章で説明するHTTP APIを経由してアクセス可能です。HYPDF_USERHYPDF_PASSWORD の変数はheroku configの出力の中で見つける事が出来るでしょう。

ここにはNode.jsの例があります(requestを使っています);

var request = require('request'),
    fs = require("fs");

// Create PDF and upload it to AWS S3
request.post(
    'https://www.hypdf.com/htmltopdf',
    {
        json: {
            user: 'HYPDF_USER',
            password: 'HYPDF_PASSWORD',
            content: '<html><body><h1>Title</h1></body></html>',
            margin_left: '0.5in',
            grayscale: true,
            bucket: 'YOUR_BUCKET_NAME',
            key: 'some_file_name.pdf',
            public: true
        }
    },
    function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log('Public URL: ', body.url);
            console.log('Nubmer of pages: ', response.headers['hypdf-pages']);
        }
    }
);

API リファレンス

htmltopdf

Ruby:

@hypdf = HyPDF.htmltopdf(
    '<html><body><h1>Title</h1></body></html>',
    orientation: 'Landscape',
    copies: 2,
    # ... other options ...
)
# => {pdf: BINARY_PDF_DATA, pages: 1, page_size: "792 x 612 pts (letter)", pdf_version: 1.4}

Other languages:

URL: 'https://www.hypdf.com/htmltopdf'
Method: 'POST'
Content-Type: 'application/json'
Parameters: {content: 'HTML', user: 'HYPDF_USER', password: 'HYPDF_PASSWORD'}
Result: 'BINARY_PDF_DATA'

オプションのパラメータは直接渡すか、HTML内の特別なメタタグを通して渡す事が出来ます。

<meta name="hypdf-option_name" content="value" />

オプションのパラメータ:

Option name Possible value Description
test true, false テストモードを使うか設定します。
bucket String 作成したPDFをアップロードするAWS S3のバケット名です。
key String ファイル名です。
public true, false アップロードされたファイルにみんながアクセス可能かを設定します。
callback String (URL) バックグラウンドでPDFを作成し、このURLに結果を返します。
disable_links true もしあれば、リンクをプレインテキストとして描画します。
no_collate true もしあれば、複数部数を印刷する際に部単位での印刷をしなくなります。
copies Integer PDFファイルとして生成する部数です。(デフォルトは1)
grayscale true もしあれば, PDFをグレースケールで生成します。
lowquality true 低品質のpdf/psで生成されます。結果のドキュメントの容量を節約するのに役立ちます。
margin_bottom String ("0.5in", "15mm", "2cm" etc) ページの底辺のマージンを設定します。(デフォルトは"0.75in")
margin_left String ("0.5in", "15mm", "2cm" etc) ページの左辺のマージンを設定します。(デフォルトは"0.75in")
margin_right String ("0.5in", "15mm", "2cm" etc) ページの右辺のマージンを設定します。(デフォルトは"0.75in")
margin_top String ("0.5in", "15mm", "2cm" etc) ページの上辺のマージンを設定します。(デフォルトは"0.75in")
orientation Landscape, Portrait 印刷方向を設定します。(デフォルトは"Portrait")
page_height String ("8.27in", "297mm", "21cm" etc) ページの高さです。
page_width String ("8.27in", "297mm", "21cm" etc) ページの幅です。
page_size A0..B10, C5E, Comm10E, DLE, Executive, Folio, Ledger, Legal, Letter, Tabloid 用紙サイズを設定します。(デフォルトは"Letter")
title String 生成されたPDFファイルのタイトルを設定します。(特に指定がない場合は、始めの書類のタイトルが適応されます)
no_background true もしあれば、背景を印刷しないようにします。
cookie String ("name value") クッキーを付与します(繰り返し使えます)
custom_header String ("name value") HTTPヘッダを付与します(繰り返し使えます)
no_custom_header_propagation true もしあれば、custom_headerによって指定されたHTTPヘッダをそれぞれのリソースのリクエストに対して付与しなくします。
encoding String 入力用のデフォルトのテキストエンコーディングを設定します。(デフォルトは"UTF-8")
no_images true もしあれば、画像を読み込んだり、印刷したりしません。
disable_javascript true もしあれば、ページのjavascriptの実行も許可しません。
javascript_delay Integer javascriptの終了まで待つ時間をミリ秒で指定します。(デフォルトは200)
no_stop_slow_scripts true もしあれば, 遅いjavascriptでも止めずに待ちます。
run_script String (code) ページが読み込まれた後に、実行できるjavascriptを記述します。(繰り返し使えます)
minimum_font_size Integer 最小フォントサイズを指定します。
page_offset Integer 始まりのページ番号を指定します。(デフォルトは0)
password String HTTP認証のパスワードです。
username String HTTP認証のユーザ名です。
user_style_sheet String 全てのページに読み込まれる、スタイルシートのURLを指定します。
window_status String ページの描画前に、window.statusがこの文字列と同じになるまで待ちます。
zoom Float この数値分だけズームをします(デフォルトは1)
header_left String 左寄せヘッダテキストを作成します。
header_right String 右寄せヘッダテキストを作成します。
header_center String 中央寄せヘッダテキストを作成します。
header_font_name String ヘッダのフォント名を指定します。(デフォルトは Arial).
header_font_size Integer ヘッダのフォントサイズを指定します。(デフォルトは 12).
header_line true ヘッダの下に線を表示します。
header_html String (URL of HTML document) HTMLで書かれたヘッダを作成します。(上で書かれている、header_*のオプションは全て上書きされます)
header_spacing Float ヘッダと内容の間のスペースをmmで指定します。(デフォルトは 0).
footer_left String 左寄せフッタテキストを作成します。
footer_right String 右寄せフッタテキストを作成します。
footer_center String 中央寄せフッタテキストを作成します。
footer_font_name String フッタのフォント名を指定します。(デフォルトは Arial).
footer_font_size Integer フッタのフォントサイズを指定します。(デフォルトは 12).
footer_line true フッタの下に線を表示します。
footer_html String (URL of HTML document) HTMLで書かれたフッタを作成します。(上で書かれている、footer_*のオプションは全て上書きされます)
footer_spacing Float 内容とフッタの間のスペースをmmで指定します。(デフォルトは 0).
header_* options do not work in test mode.

pdfinfo

Ruby:

@hypdf = HyPDF.pdfinfo(
    '/path/to/file.pdf' # or instance of File class
)
# => {"Title"=>"Everyday Rails Testing with RSpec", "Author"=>"Aaron Sumner", "Creator"=>"LaTeX with hyperref package", "Producer"=>"xdvipdfmx (0.7.8)", "CreationDate"=>"Fri Aug  2 05", "32"=>"50 2013", "Tagged"=>"no", "Pages"=>"150", "Encrypted"=>"no", "Page size"=>"612 x 792 pts (letter)", "Optimized"=>"no", "PDF version"=>"1.5"}

Other languages:

URL: 'https://www.hypdf.com/pdfinfo'
Method: 'POST'
Content-Type: 'multipart/form-data'
Parameters: {file: 'BINARY_PDF_DATA', user: 'HYPDF_USER', password: 'HYPDF_PASSWORD'}
Result: 'json'

pdftotext

Ruby:

@hypdf = HyPDF.pdftotext(
    '/path/to/file.pdf', # or instance of File class
    first_page: 2,
    last_page: 5,
    # ... other options ...
)
# => {text: "Everyday Rails Testing with RSpec\nA practical approach to test-driven..."}

Other languages:

URL: 'https://www.hypdf.com/pdftotext'
Method: 'POST'
Content-Type: 'multipart/form-data'
Parameters: {file: 'BINARY_PDF_DATA', user: 'HYPDF_USER', password: 'HYPDF_PASSWORD'}
Result: 'json'

Optional parameters:

Option name Possible value Description
first_page Integer 変換するページの開始位置を指定します。
last_page Integer 変換するページの終了位置を指定します。
no_page_break true もしあれば, ページ間に改ページを挿入しません。
crop_x Integer 刈り取り領域の左上地点のX座標です。
crop_y Integer 刈り取り領域の左上地点のY座標です。
crop_width Integer 刈り取り領域の幅をピクセル数で表した物です
crop_height Integer 刈り取り領域の高さをピクセル数で表した物です

pdfextract

Ruby:

@hypdf = HyPDF.pdfextract(
    '/path/to/file.pdf', # or instance of File class
    last_page: 5,
    # ... other options ...
)
# => {pdf: BINARY_PDF_DATA}

Other languages:

URL: 'https://www.hypdf.com/pdfextract'
Method: 'POST'
Content-Type: 'multipart/form-data'
Parameters: {file: 'BINARY_PDF_DATA', user: 'HYPDF_USER', password: 'HYPDF_PASSWORD'}
Result: 'BINARY_PDF_DATA'

Optional parameters:

Option name Possible value Description
first_page Integer 引用するページの開始位置です。
last_page Integer 引用するページの終了位置です。
test true, false テストモードを使用するか指定します。
bucket String 作成したPDFをアップロードするAWS S3上のバケット名を指定します。
key String ファイル名を指定します。
public true, false アップロードされたファイルが誰にでもアクセス可能かを指定します。

pdfunite

Ruby:

@hypdf = HyPDF.pdfunite(
    '/path/to/file1.pdf', # or instance of File class
    '/path/to/file2.pdf', # or instance of File class
    # ... other options ...
)
# => {pdf: BINARY_PDF_DATA}

Other languages:

URL: 'https://www.hypdf.com/pdfunite'
Method: 'POST'
Content-Type: 'multipart/form-data'
Parameters: {file_1: 'BINARY_PDF_DATA', file_2: 'BINARY_PDF_DATA', user: 'HYPDF_USER', password: 'HYPDF_PASSWORD'}
Result: 'BINARY_PDF_DATA'

Optional parameters:

Option name Possible value Description
test true, false テストモードを使用するか指定します。
bucket String 作成したPDFをアップロードするAWS S3上のバケット名を指定します。
key String ファイル名を指定します。
public true, false アップロードされたファイルが誰にでもアクセス可能かを指定します。

テストモード

開発中にはテストモードを使いたくなるかもしれません。これを使用すると、HyPDFはあなたの日毎のドキュメント生成量としてカウントしなくなります。

@hypdf = HyPDF.pdfunite(
    '/path/to/file1.pdf', # or instance of File class
    '/path/to/file2.pdf', # or instance of File class
    test: true,
    # ... other options ...
)

AWS S3 へのアップロード

HyPDFはあなたのAWS SCバケットへ作成したファイルをアップロードすることができます。しかしその前に、HyPDFに対してこれが出来るように権限を与える必要があります。

  • あなたのAWSのSecurity Credentials pageへ訪問してください。
  • "Account Identifiers"の部分からCanonical User IDをコピーしてください。
  • これをアドオンダッシュボード経由で、あなたのHyPDFアカウントに追加してください。
  • AWSコンソールへログインします。
  • S3サービスを選んでください。
  • HyPDFに書き込み権限を与えたいバケットの上で右クリックします。
  • コンテキストメニューから、"Properties"をクリックします。
  • Propertiesパネルで"Permissions"を選択肢、"Add bucket policy"ボタンをクリックしてください。
  • 以下のポリシーを出てくるダイアログ内にペーストしてください。(YOUR_BUCKET_NAMEは権限を与えたにバケット名に置き換えてください)

Policy:

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "AddCannedAcl",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::495273932038:root"
      },
      "Action": [
        "s3:GetBucketAcl",
        "s3:PutObjectAcl",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::YOUR_BUCKET_NAME/*",
        "arn:aws:s3:::YOUR_BUCKET_NAME"
      ]
    }
  ]
}

これで、HyPDFメソッド内でbucketオプションが使えるようになりました :

@hypdf = HyPDF.htmltopdf(
    '<html><body><h1>Title</h1></body></html>',
    orientation: 'Landscape',
    # ... other options ...
    bucket: 'YOUR_BUCKET_NAME',
    key: 'some_file_name.pdf', # optional
    public: true # optional, generate public readable URL
)
# => { url: "https://s3.amazonaws.com/YOUR_BUCKET_NAME/some_file_name.pdf", pages: 1, page_size: "792 x 612 pts (letter)", pdf_version: 1.4, bucket: "YOUR_BUCKET_NAME", key: "some_file_name.pdf"}

非同期生成

書類が生成されるまで、アプリケーションをブロックしたり待機する必要はありません。HyPDFは非同期でもファイルをコントロールする事が出来ます。PDFの準備が整った段階で呼び出すコールバックURLを提供しています。

def create
    @hypdf = HyPDF.htmltopdf(
        '<html><body><h1>Title</h1></body></html>',
        orientation: 'Landscape',
        # ... other options ...
        callback: 'http://www.your-application.com/save_pdf_url',
        bucket: 'YOUR_BUCKET_NAME',
        key: 'some_file_name.pdf',
        public: true
    )
end

# POST /save_pdf_url
def save_pdf_url
    if params[:error]
        puts params[:message]
    else
        # PDF url
        puts params[:url]
        # Number of pages
        puts request.headers['hypdf-pages']
    end
end

パフォーマンス上の留意点と既知の問題

  • 外部のリソースを使おうとしないでください。これらの読み込みは深刻なレベルで、PDFの生成時間を増加させます。
  • スタイルとスクリプトは、 <link> タグを使って読み込む代わりに、<style> と <script> タグを使って埋め込んでください。
  • 小さい画像を挿入するのにData URIを使ってください。画像をData URIフォーマットに変換するツールはたくさんあります。(例: filetobase64.com)
  • グレースケールのJPEG画像は使用しないでください。代わりにGIFやPNGを使いましょう。
  • "opacity"と"font-size"のCSSプロパティを同じ要素に対して使用しないでください。この場合は、"opacity"の代わりに"background: rgba( 255, 0, 0, 0.5)" を使用してください。

ダッシュボード

HyPDFダッシュボードでは現在の収支、使用状況の統計情報、そしてアドオンのニュースを確認できます。

ダッシュボードはコマンドラインからアクセス可能です :

$ heroku addons:open hypdf
Opening hypdf for sharp-mountain-4005…

または、HerokuアプリケーションWebインタフェースを訪問して、該当するアプリケーションを選択する事でもできます。HyPDFをアドオンメニューから選択してください。

プラン間での移行

heroku addons:upgradeコマンドを使って、新しいプランへ移行してみましょう。 Use the heroku addons:upgrade command to migrate to a new plan.

$ heroku addons:upgrade hypdf:giga
-----> Upgrading hypdf:giga to sharp-mountain-4005... done, v18
Your plan has been updated to: hypdf:giga

アドオンの削除

HyPDFはコマンドライン経由で削除可能です。

これですべての関連するデータが削除され、元に戻す事はできません!
$ heroku addons:remove hypdf
-----> Removing hypdf from sharp-mountain-4005... done, v20 (free)

サポート

HyPDFのサポートと実行時の問題の全ては、Heroku Support channels経由で送信されることが想定されています。サポートしていないことに関する問題や、製品に関するフィードバックはsupport@hypdf.comから受け付けています。

Clone this wiki locally