PDFページをトリミングして新しい寸法を計算
PDF文書を実際に変更する前に、ページのトリミング結果を確認できます。各ページの元の幅と高さ、およびPDFポイントで指定した切り抜き範囲を入力すると、ページごとの新しい寸法を返します。各長方形が元ページの内側に収まるかも検証するため、不正な座標をPDFライブラリ、印刷工程、文書処理フローへ渡す前に発見できます。計算は常に同じ入力から同じ結果を生成し、1回のリクエストで異なるページサイズにも対応します。
無料で実行
ページと切り抜き範囲をPDFポイントで指定します
PDFページの寸法にはポイントを使用し、72ポイントが1インチに相当します。ページごとに元の幅と高さを入力し、続いてcrop_x、crop_y、crop_width、crop_heightで切り抜く長方形を指定します。一般的なPDF座標系と同様に、x座標は左端から、y座標は下端から測ります。crop_widthとcrop_heightは差し引く余白ではなく、切り抜き後に表示される領域の寸法です。たとえば米国のLetterページは通常612×792ポイントです。原点が36, 54で、幅540、高さ684の範囲はこのページ内に収まり、結果は540×684ポイントになります。ページは文書内の順番どおりに並べてください。返り値も同じ順番でページ番号を付けるため、計算結果を検査レポートや後続の処理ジョブへ容易に対応付けられます。縦向き、横向き、独自サイズのページを同じリクエストに含めることもできます。
境界チェックの仕組みを確認します
元ページの寸法と切り抜き範囲の各値は、すべて有限の数値である必要があります。ページと切り抜き範囲の幅および高さは0より大きくなければなりません。原点は0にできますが、負の値にはできません。右端はcrop_xとcrop_widthの合計を元の幅と比較して確認します。上端も同様に、crop_yとcrop_heightの合計を元の高さと比較します。どちらかが元ページを超えると、該当するページ番号を示す入力エラーになります。外周にちょうど接する範囲は有効です。つまり、長方形の端が元の幅または高さと完全に一致しても問題ありません。この検証は、幅と高さだけを見ると妥当に見える長方形でも、原点の位置によってページ外へずれる可能性があるため重要です。指定された全ページを検査し、1ページでも不正なら部分的な結果を返さずに処理を停止します。
計算した寸法をPDF処理へ組み込みます
結果には各ページの元サイズ、切り抜き原点、新しい幅と高さが含まれます。この機能自体はPDFをアップロードしたり書き換えたりせず、PDF編集ソフトやライブラリが適用できる座標を計算して検証します。そのため、変更結果の事前確認、利用者が入力した設定の検査、後続レイアウトの見積もり、負荷の高い文書処理を開始する前の指示の正規化に適しています。インチへ換算する場合は値を72で割りますが、PDFツール間ではポイントのまま扱うと丸め誤差を避けられます。同じサイズと規則を使うページでも各ページの値を繰り返し指定すると、出力と文書順の対応が明確になります。使用するライブラリがx、y、幅、高さを求めるのか、左、下、右、上の座標を求めるのかも確認してください。後者では、右をcrop_xとnew_widthの和、上をcrop_yとnew_heightの和として計算します。API料金は1リクエストあたり$0.002です。
活用例
処理前に切り抜き設定を検証
指定範囲が元ページを超える文書ジョブを、実処理の開始前に拒否できます。
混在サイズの出力を事前確認
縦向き、横向き、独自サイズの最終寸法をページ順の結果として確認できます。
PDFライブラリ用の座標を準備
検証済みのページ寸法と切り抜き値を、別の編集工程への信頼できる入力にできます。
よくある質問
この機能はPDFファイルを変更しますか?
いいえ。座標を検証して結果寸法を計算するだけです。値の適用には別のPDFツールを使用できます。
どの単位を使用しますか?
元寸法、原点、切り抜き寸法にはPDFポイントを使用します。1インチは72ポイントです。
切り抜き範囲の原点はどこですか?
crop_xは元ページの左端から、crop_yは下端から測ります。
切り抜き範囲はページ端に接してもよいですか?
はい。元の幅または高さと完全に一致できますが、その境界を超えることはできません。
異なるページサイズを同時に扱えますか?
はい。各ページが独自の元寸法と範囲を持つため、複数サイズを同じリクエストで扱えます。
料金はいくらですか?
APIは1リクエストあたり$0.002で、同じ計算をブラウザーでは無料で実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/pdf/crop-pages \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pages":[{"width":612,"height":792,"crop_x":36,"crop_y":54,"crop_width":540,"crop_height":684},{"width":842,"height":595,"crop_x":20,"crop_y":15,"crop_width":800,"crop_height":560}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/crop-pages", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pages": [
{
"width": 612,
"height": 792,
"crop_x": 36,
"crop_y": 54,
"crop_width": 540,
"crop_height": 684
},
{
"width": 842,
"height": 595,
"crop_x": 20,
"crop_y": 15,
"crop_width": 800,
"crop_height": 560
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/crop-pages",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pages": [
{
"width": 612,
"height": 792,
"crop_x": 36,
"crop_y": 54,
"crop_width": 540,
"crop_height": 684
},
{
"width": 842,
"height": 595,
"crop_x": 20,
"crop_y": 15,
"crop_width": 800,
"crop_height": 560
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/crop-pages", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pages":[{"width":612,"height":792,"crop_x":36,"crop_y":54,"crop_width":540,"crop_height":684},{"width":842,"height":595,"crop_x":20,"crop_y":15,"crop_width":800,"crop_height":560}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pages":[{"width":612,"height":792,"crop_x":36,"crop_y":54,"crop_width":540,"crop_height":684},{"width":842,"height":595,"crop_x":20,"crop_y":15,"crop_width":800,"crop_height":560}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/crop-pages", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"pages": [
{
"width": 612,
"height": 792,
"crop_x": 36,
"crop_y": 54,
"crop_width": 540,
"crop_height": 684
},
{
"width": 842,
"height": 595,
"crop_x": 20,
"crop_y": 15,
"crop_width": 800,
"crop_height": 560
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.crop_pages",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 25 |
max_pages | 200 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |