-
Notifications
You must be signed in to change notification settings - Fork 9
Hypdf
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_USER
とHYPDF_PASSWORD
の設定がアプリ内の設定として出来るようになり、HyPDF APIを使うのに必要な名前とパスワードが含まれます。これは、heroku config:get
コマンドを使って確認する事が出来ます。
$ heroku config:get HYPDF_USER
app123@heroku.com
アドオンを追加した後は、ローカルで設定変数を置き換えて、あなたの開発環境でサービスを利用できるようにする必要があります。
Foremanを使うことで、アプリケーションのProcfileの中で指定されている処理構成を信頼性のある形で設定、実行できます。Foremanは設定変数を.envファイルから読み取ります。以下のコマンドを使って、HyPDFの変数の値をHerokuの設定から.env
へ回収し、追加してください。
$ heroku config -s | grep HYPDF_ >> .env
$ more .env
証明書と他の重要な設定値はソースコントロール内にコミットされるべきではありません。Gitの中では、.envファイルは除くようにしてください。`echo .env >> .gitignore`
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_USER
と HYPDF_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']);
}
}
);
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). |
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'
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 | 刈り取り領域の高さをピクセル数で表した物です |
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 | アップロードされたファイルが誰にでもアクセス可能かを指定します。 |
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 ...
)
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から受け付けています。