PDFページのサムネイルグリッド配置を作成
PDFのページ数と希望するサムネイル列数から、正確なグリッド仕様を算出します。必要な行数、グリッドの総セル数、最終行に配置されるページサムネイル数を返します。PDFビューアー、コンタクトシート、レビューダッシュボード、印刷計画など、各ページ画像の準備前に予測可能な表示領域を確保したい画面の設計に役立ちます。
無料で実行
サムネイル生成前にグリッドを計画します
PDFサムネイル画面では、画像のレンダリングが完了する前にレイアウト構造が必要になることがあります。文書のページ数と希望する列数を入力すると、正確な行数がすぐに返されます。同時に、長方形グリッド全体のセル容量と、最終行を実際に占めるサムネイル数も確認できます。この3つの値を使えば、PDFを開いたり変更したりせずに、安定した領域の予約、プレースホルダーの作成、スクロール領域の寸法決定、レンダリング作業の分割ができます。たとえば、23ページを5列で配置する場合は5行、総セル数25、最終行の配置数3となります。計算には決定的な整数演算だけを使用するため、同じ入力からは常に同じ結果が得られます。この機能は画像を生成せず、PDFのバイト列を調べず、画像寸法や表示スタイルも決定しません。ネットワークやファイル送信を使わず、グリッド計画だけを扱います。
行、セル、最終行の値を正しく解釈します
返されるrowsは、指定した列数ですべてのページを収容できる最小の整数行数です。Total cellsは行数と列数の積で、最後のサムネイル以降の未使用位置を含む長方形全体の容量を示します。Last-row fillは、最終行に実際に置かれるサムネイル数です。ページ数が列数で割り切れる場合、最終行は満杯となり、その値は列数と同じになります。ゼロにはなりません。この規則により、ループ処理、アクセシビリティーラベル、最終行の装飾に結果をそのまま利用できます。ページ数と列数はいずれも安全な正の整数でなければなりません。小数、未指定、文字列、無限大、ゼロ、負数は、丸めたり暗黙に変換したりせず拒否されます。特に1未満の列数では、列のないグリッドへ有限行でページを配置できないため無効です。厳密な入力規則によって、設定ミスを発生源の近くで検出できます。
ビューアーや文書処理で結果を活用します
ビューアーでは、既知のサムネイル高さと行間隔から、行数を使ってギャラリー全体の高さを見積もれます。総セル数は、固定長のプレースホルダー配列にも利用できます。空き位置が必要なら総セル数とページ数を比較できますが、最終行のスタイル設定には通常、最終行の配置数が最も分かりやすい基準です。サーバー側で生成するレビュー画面では、画像処理の完了前にページを予測可能な単位へ分割したり、ページ移動用の目印を作ったりできます。コンタクトシートでは行数から用紙方向を選択でき、テストでは1ページ、完全に埋まるグリッド、最終行が1ページだけの境界条件を検証できます。この機能が受け取るのはPDF自体ではなくメタデータですので、信頼できるページ数は別の手段で取得してください。APIによる計算1回の料金は$0.002です。ブラウザーでも同じ純粋な計算を対話的に実行できます。
活用例
PDFビューアーの表示領域を予約
サムネイル生成の完了前に行数を求め、ビューアーで不快なレイアウト移動が起きないようにします。
コンタクトシートを設計
選択した列数に対する長方形の容量と、最終行の配置数を確定します。
レスポンシブ境界をテスト
列数ごとの正確な結果を比較し、自動UIテストで境界条件を確認します。
よくある質問
1回の計算料金はいくらですか?
APIによる計算1回の料金は$0.002です。このページでは対話型の計算も利用できます。
total_cellsは常にpage_countと同じですか?
いいえ。総セル数は長方形全体の容量なので、一部だけ埋まった最終行の空き位置を含む場合があります。
最終行が完全に埋まる場合はどうなりますか?
最終行の配置数は列数と同じです。満杯の最終行はゼロではなく、満杯として報告されます。
列数にゼロを指定できますか?
いいえ。列数は正の整数である必要があり、1未満の値は無効な入力としてエラーになります。
この機能はPDFを読み込んだり生成したりしますか?
いいえ。指定されたページ数だけを使って配置値を返します。PDFのバイト列を受け取らず、画像も作成しません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/pdf/page-thumbnail-grid-layout \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"page_count":23,"columns":5}'const res = await fetch("https://api.kit.forhosting.com/pdf/page-thumbnail-grid-layout", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"page_count": 23,
"columns": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/page-thumbnail-grid-layout",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"page_count": 23,
"columns": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/page-thumbnail-grid-layout", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"page_count":23,"columns":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"page_count":23,"columns":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/page-thumbnail-grid-layout", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"page_count": 23,
"columns": 5
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.page_thumbnail_grid_layout",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |