PDFにしおりを追加してページを検証
32ページのPDFでCover、Methods、Appendixが1、8、27ページを指すとき、18ページへのしおりResultsは3番目に入ります。ページ数、今のしおり、タイトル、ページを入れると更新後の一覧が分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- ページ数
- 32
- タイトル
- Results
- ページ
- 18
- 数量
- 4
- 挿入されたインデックス
- 2
移動先が実在するか、どこに置くべきかを推測せずに、PDFのアウトラインへ確実なナビゲーション項目を追加できます。文書の総ページ数、現在の最上位しおり、タイトル、1から始まる移動先ページをご指定ください。この機能は新しい移動先を実際のページ範囲と照合し、既存のアウトラインも検証したうえで、ページ順にしおりを挿入します。新しい構造化アウトラインと挿入位置のインデックスが返るため、後続のPDF書き込み処理へ渡したり、自動文書ワークフローで確認したりできます。
PDFと追加するしおりをご指定ください
まずPDFの総ページ数をご指定ください。この値が、有効な移動先の範囲を決定します。次に、現在の最上位アウトラインを、タイトルとページを持つレコードの配列として文書内の順序どおりに渡します。
ページ番号は1から始まり、ページ1は表示上の最初のPDFページを意味します。内部的な0のオフセットではありません。最後に、追加するしおりのタイトルと移動先ページをご指定ください。
タイトルの前後にある空白は除去されるため、フォームや表計算から誤って入った余白が表示名に残りません。この機能が扱うのはアウトラインの表現であり、PDFのバイナリデータを解析したり書き換えたりはしません。そのため、パーサーがファイルを読み取った後、またはPDFライブラリが更新済みアウトラインを書き込む前の工程に適しています。
ページ範囲を検証し、予測可能な順序を保ちます
しおりは移動先が実在して初めて役立ちます。0ページ、負数、小数、最終ページを超える値には、許容範囲を示す入力エラーを返します。見かけ上は成功した編集に壊れた移動先が残らないよう、既存のしおりにも同じ検証を行います。
また、各タイトルには表示可能な文字が必要です。入力するアウトラインは、移動先ページの昇順に並んでいなければなりません。順不同の一覧を受け付けると「正しい位置」が曖昧になり、作成者が意図したナビゲーションを密かに並べ替えるおそれがあるためです。
検証後、アルゴリズムは後のページを指す最初のしおりまで走査し、その直前へ新しい項目を挿入します。同じページを指す項目がすでに複数ある場合は、それらの後に追加して相対順序を維持します。入力配列やレコード自体は変更しません。
返されたアウトラインを文書処理に適用します
不要であれば無視して、アウトラインを次の工程へ直接渡せます。ブラウザー版は公開前に編集者が移動先を素早く確認する用途に便利です。返却データは特定のライブラリに依存しません。
アプリケーション側で各タイトルと1から始まるページを、採用するPDFライターの移動先オブジェクトへ対応付けられます。この機能はPDFのバイト列を変更せず、ページ本文から見出しを推測せず、階層化した子しおりを作らず、順不同のアウトラインも修復しません。これらには別の解析、階層設計、シリアライズ処理が必要です。
最終的に書き込むPDFと同じ版から取得した総ページ数をご使用ください。
活用例
新しく執筆した章を追加
改訂版PDFを書き出す前に、検証済みの開始ページへ章のラベルを挿入できます。
レポートのナビゲーションを自動化
生成した付録や要約のしおりを追加し、存在しない移動先を計算するテンプレートを拒否できます。
アウトラインの変更を確認
元ファイルを変更する前に、承認画面で挿入インデックスと更新済みアウトラインを表示できます。
よくある質問
PDFファイル自体を書き換えますか?
いいえ。 PDFライターや文書ワークフローで適用できる、更新済みアウトライン表現を返します。
同じページのしおりがある場合、どこに追加されますか?
そのページを指す既存の全しおりの後に、元の順序を保って挿入されます。
入れ子のしおりも追加できますか?
いいえ。 この処理はページ順のアウトラインに最上位のしおりを1件追加します。
しおりが1つもないPDFにも追加できますか?
できます。空のしおり一覧も受け付けるため、同じ操作で最初のしおりを作ることも、長い目次に追加することもできます。
既存のしおりがページ順でないとどうなりますか?
受け付けません。既存のしおりはページの小さい順に並んでいる必要があります。順不同の一覧を認めると正しい位置があいまいになり、作成者が意図した並びを勝手に変えてしまうおそれがあるためです。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/pdf/bookmarks-add \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"page_count":24,"outline":[{"title":"Introduction","page":1},{"title":"Results","page":12}],"title":"Methods","page":7}'const res = await fetch("https://api.kit.forhosting.com/pdf/bookmarks-add", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"page_count": 24,
"outline": [
{
"title": "Introduction",
"page": 1
},
{
"title": "Results",
"page": 12
}
],
"title": "Methods",
"page": 7
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/bookmarks-add",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"page_count": 24,
"outline": [
{
"title": "Introduction",
"page": 1
},
{
"title": "Results",
"page": 12
}
],
"title": "Methods",
"page": 7
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/bookmarks-add", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"page_count":24,"outline":[{"title":"Introduction","page":1},{"title":"Results","page":12}],"title":"Methods","page":7}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"page_count":24,"outline":[{"title":"Introduction","page":1},{"title":"Results","page":12}],"title":"Methods","page":7}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/bookmarks-add", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"page_count": 24,
"outline": [
{
"title": "Introduction",
"page": 1
},
{
"title": "Results",
"page": 12
}
],
"title": "Methods",
"page": 7
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.bookmarks_add",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
PDFと追加するしおりをご指定ください
空のアウトラインも有効ですので、同じリクエスト形式で最初のしおりを作成する場合にも、既存の目次を拡張する場合にも対応できます。
ページ範囲を検証し、予測可能な順序を保ちます
そのため、指定ページは1以上page_count以下の整数でなければなりません。ネットワーク、日時、乱数、地域依存の比較を使わないため、同じJSON入力からは常に同じ結果が得られます。
返されたアウトラインを文書処理に適用します
レスポンスにはpage_count、更新後のしおり数、0から始まるinserted_index、完全な更新済みアウトラインが含まれます。確認画面で新規行を強調する場合はinserted_indexをご利用ください。法的告知、付録、リリースノート、自動生成した章などを反復的に追加する場合は、$0.002のAPI呼び出しをご利用いただけます。
技術的な質問
ページ番号はどのように数えますか?
1から数えます。1が最初のページで、page_countが最後の有効な移動先です。
移動先ページが範囲外の場合はどうなりますか?
invalid_inputで失敗し、有効なページ範囲を示すメッセージを返します。
APIリクエストの料金はいくらですか?
成功したAPIリクエストは$0.002です。同じ決定的処理をブラウザーでは無料で実行できます。