PDFメタデータ削除
PDFから読み取ったTitle、Author、Creator、CreationDate、社内の追跡番号を渡すと、空になったメタデータと、削除した5つの名前を並べた一覧が返ります。PDFファイル自体は変更しません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
PDFからメタデータを抽出した後、記録の共有、ログ保存、次工程への受け渡しを行う前に、その内容を取り除けます。PDFのバイト列を調査したり書き換えたりする機能ではありません。既存のPDFリーダーやライターと組み合わせやすく、テストと監査が容易な、小さく確定的なサニタイズ処理をアプリケーションに提供します。
空の結果と削除レポートを確認します
名前を報告することで、サニタイズの実施内容を確認できます。アルファベット順は意図的な仕様です。継承プロパティをたどらず、外部サービスへ接続せず、時計や乱数も使用しません。
空のメタデータオブジェクトも有効で、空のremoved一覧を返します。したがって冪等な処理に適しており、すでに消去済みの記録を再処理しても失敗せず、存在しない変更を報告しません。
PDF処理フローの適切な位置で使用します
この機能は、メタデータの抽出と、サニタイズ済み記録の書き込み、保存、共有を行う工程の間で使用してください。最終成果物がPDFファイルの場合は、別途PDFライターで空のオブジェクトを文書へ適用し、情報辞書やXMPのプロパティをバイト列から削除する必要があります。この機能自体はバイナリ文書を編集したとは主張しません。
この分離は、ファイルアクセスを既存システムが担当し、記述情報を消去する統一ルールだけが必要な場合に役立ちます。ネットワークを使わない確定的な実装なので、ブラウザーでも再現性のある処理が可能です。
活用例
抽出した文書レコードをサニタイズ
パーサーが生成したメタデータブロックを、後続サービスへ渡す前に空のオブジェクトへ置き換えます。
公開ポリシーを一貫して適用
複数のPDF取り込み経路と出力経路で、標準および独自メタデータを消去する同じ確定的ルールを適用します。
よくある質問
PDFのバイト列は変更されますか?
いいえ。 すでに抽出されたメタデータオブジェクトを処理します。空の結果を文書ファイルへ適用するにはPDFライターを使用してください。
メタデータがすでに空の場合はどうなりますか?
処理は成功し、空のメタデータオブジェクトと空のremoved配列を返します。
独自に追加した項目も削除されますか?
削除されます。TitleやAuthorのような標準の項目だけでなく、社内の作業ラベルやテンプレートの識別子、元のシステム名なども消えます。こうした情報は標準の項目より多くを明かすことがあります。
削除した項目の一覧はどんな順番ですか?
名前のアルファベット順です。項目がどの順番で渡されても、同じ組み合わせなら同じ一覧になるため、確認結果を比べやすくなります。
削除された値は返されますか?
返されません。返るのは削除した項目の名前だけで、AuthorやCreatorにどんな値が入っていたかは結果に残らないため、消したことだけを安全に確認できます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/pdf/strip-metadata \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"metadata":{"Title":"Board minutes","Author":"Example User","Creator":"Office Suite","CreationDate":"D:20260725103000Z"}}'const res = await fetch("https://api.kit.forhosting.com/pdf/strip-metadata", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"metadata": {
"Title": "Board minutes",
"Author": "Example User",
"Creator": "Office Suite",
"CreationDate": "D:20260725103000Z"
}
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/strip-metadata",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"metadata": {
"Title": "Board minutes",
"Author": "Example User",
"Creator": "Office Suite",
"CreationDate": "D:20260725103000Z"
}
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/strip-metadata", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"metadata":{"Title":"Board minutes","Author":"Example User","Creator":"Office Suite","CreationDate":"D:20260725103000Z"}}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"metadata":{"Title":"Board minutes","Author":"Example User","Creator":"Office Suite","CreationDate":"D:20260725103000Z"}}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/strip-metadata", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"metadata": {
"Title": "Board minutes",
"Author": "Example User",
"Creator": "Office Suite",
"CreationDate": "D:20260725103000Z"
}
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.strip_metadata",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
メタデータブロックをオブジェクトとして指定すると、空のメタデータオブジェクトと、削除されたフィールド名のアルファベット順一覧を返します。
抽出済みメタデータブロックを指定します
プロパティにはTitle、Author、Subject、Keywords、Creator、Producer、CreationDate、ModDateなど、一般的なPDF情報名を使用できますが、対象は固定の一覧に限定されません。独自に追加されたプロパティも削除されます。この点は、組織がワークフロー用ラベル、テンプレート識別子、元システム名、エクスポート設定などを付加している場合に重要です。配列も、番号付き要素がメタデータのプロパティマップを表さないため拒否します。値自体は文字列、数値、真偽値、null、配列、入れ子のオブジェクトのいずれでも構いません。PDFパーサー、文書サービス、フォームなどが生成したメタデータオブジェクトを用意し、リクエストのmetadataフィールドに指定してください。こうした情報は標準フィールド以上に出所や内部工程を明らかにすることがあります。リクエストには実際のオブジェクトが必要です。JSONを含む文字列はあくまで文字列であり、暗黙に解析せず拒否します。削除の判断は内容の解釈ではなく、フィールドの存在に基づくためです。シリアライズ済みJSONは呼び出し前に解析し、入力契約を明確で予測可能な状態にしてください。
空の結果と削除レポートを確認します
処理に成功したレスポンスでは、metadataは常に空のオブジェクトです。さらにremovedには、指定されたメタデータブロック内で見つかった、オブジェクト自身が持つ列挙可能な全フィールド名がアルファベット順で入ります。たとえばAuthor、Creator、日付、独自の追跡プロパティが存在し、消去されたことを、元の値をレスポンスに残さず確認できます。JavaScriptオブジェクトは異なる挿入順で構築できますが、同じフィールド集合なら可能な限り同じ確認結果になるべきです。そのため、アルゴリズムはオブジェクト自身のフィールドを列挙し、固定された英語ロケールで名前を並べ替え、名前だけを返します。
PDF処理フローの適切な位置で使用します
たとえば文書受付サービスでは、メタデータを読み取り、ブロックをここへ渡し、削除したフィールド名だけを監査イベントへ記録してから、ライターへ空の置換結果を保存するよう指示できます。公開フローでも、APIから文書詳細を提示する前に同じ処理を適用できます。APIでの料金は1項目あたり$0.002です。removed一覧はフィールド名を消去した確認情報であり、別のPDFファイルが書き換えられた証明ではありません。
連携の活用例
プライバシーに配慮した監査イベントを作成
機密性のある可能性がある値をログへ複製せず、削除したメタデータのフィールド名だけを記録します。
技術的な質問
どのメタデータフィールドが削除されますか?
指定されたオブジェクト自身が持つ列挙可能な全フィールドが対象です。標準および独自のプロパティ名を含みます。
削除したメタデータの値も返されますか?
いいえ。削除したフィールド名だけを報告し、元の値はレスポンスに保持しません。
JSON文字列を渡せますか?
いいえ。事前に解析してください。metadataフィールドはオブジェクトである必要があり、文字列や配列はinvalid_inputエラーになります。
API呼び出し1回の料金はいくらですか?
メタデータオブジェクト1件の処理料金は$0.002です。