PDFをグレースケールへ変換して変更ページ数を確認
カラー、グレースケール、CMYK、グレースケールの4ページは、すべてグレースケールの4ページとして返り、実際に変更が必要だったのは2ページだと分かります。変換の計画や混在したファイルの確認に使えます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- ページ
- color, grayscale, CMYK, grayscale
- ページ
- grayscale, grayscale, grayscale, grayscale
- ページ数
- 4
- 変更されたページ
- 2
PDFをページメタデータの段階でグレースケールへ変換するための、小さく決定的な処理です。文書内の順序どおりに各ページの現在のカラーモードを指定すると、すべてをgrayscaleに統一した同じ長さの一覧を返します。さらに、総ページ数と実際にモードが変わったページ数も示すため、全面的な変換と、すでに準備済みだった文書を区別できます。ページがない入力は、明確な入力エラーとして拒否されます。
PDFをページモードの順序付き一覧として表します
この機能は、PDFの事前検査または処理工程で得られたページ単位のカラーモード情報を扱います。文書のページ順を保ったまま、各ページに空でない文字列を1つずつ指定してください。たとえば3ページのPDFは、color、grayscale、cmykのように表せます。
出力にも同じ順序で3つの要素が入り、すべてがgrayscaleに設定されます。アップロードされたバイナリそのものではなくページ記述子を処理するため、動作は予測可能で高速であり、PDF解析と、その後のレンダリングや書き出し工程の間へ簡単に組み込めます。入力には少なくとも1ページが必要です。
ページ順の並べ替え、重複排除、その他の変更も行いません。
PDF処理フローで結果を活用します
この結果は、PDFの検査、変換計画、ファイルのレンダリングを分けて行うワークフロー向けです。最初に、パーサーや文書管理システムが各ページの現在のモードを判定します。次に、この機能で計画を正規化し、変更が必要なページ記述子の数を確認します。
利用者が指定したページ単位のモード記述を変換します。件数は「30ページ中12ページを変更」のような事前表示、変換済み文書にカラーモードが残っていないかの確認、予期しない混在ソースの検出に利用できます。
活用例
変換計画を準備します
検出済みモードを正規化し、順序付きのグレースケール目標一覧をPDFレンダラーへ渡します。
混在モード文書を監査します
受け取ったPDFのうち、まだgrayscaleと記録されていないページ数を確認します。
上流の変換結果を検証します
空の結果を許可せず、処理済み文書に追加変更が不要であることを確かめます。
よくある質問
変換済みのPDFファイルが返されますか?
いいえ。 指定されたカラーモード記述子を正規化します。画素やリソースへの適用は後続のPDFレンダラーで行ってください。
ページの順序は変わりますか?
変わりません。 返されるpages配列は、入力と完全に同じ長さと順序を保ちます。
「GRAYSCALE」や前後に空白のある値は変更として数えられますか?
いいえ、数えられません。大文字と小文字の違いや前後の空白は無視されるため、すでにグレースケールのページとして扱われます。カラー、RGB、CMYK、モノクロなどは変更として数えられます。
変更ページ数が0になるのはどういう意味ですか?
指定が正しく、すべてのページがすでにグレースケールだったため、変更が不要だったという意味です。空の文書という意味ではなく、空の一覧は分かりやすい理由とともに受け付けられません。
変更ページ数はどのように役立ちますか?
「30ページ中12ページが変わります」のような事前の案内を出したり、変換済みのはずの文書にカラーのページが残っていないか確かめたり、カラーとグレーが混在したファイルを見つけたりできます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/pdf/grayscale \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pages":["color","grayscale","cmyk"]}'const res = await fetch("https://api.kit.forhosting.com/pdf/grayscale", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pages": [
"color",
"grayscale",
"cmyk"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/grayscale",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pages": [
"color",
"grayscale",
"cmyk"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/grayscale", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pages":["color","grayscale","cmyk"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pages":["color","grayscale","cmyk"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/grayscale", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"pages": [
"color",
"grayscale",
"cmyk"
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.grayscale",
"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をページモードの順序付き一覧として表します
pagesフィールドがない場合、一覧が空の場合、値が一覧でない場合、またはモードの文字列が空の場合は、0ページの有効な文書として扱わず、リクエストを拒否します。この厳密な検証により、処理フローの誤りが見えるようになり、パーサーから結果が得られなかった状態を変換成功と誤認しません。
変更されたページ数の意味を確認します
有効な入力要素はすべて、正規の値であるgrayscaleへ変わります。一方、color、rgb、cmyk、monochrome、または空でない別のモードは変更として数えられます。この区別は、上流工程ですでに変換した場合や、複数の提供元から混在文書が届く場合に役立ちます。pages_changedは、前後の空白を除き、大文字と小文字を区別せずに比較した結果、まだgrayscaleではなかったモードだけを数えます。そのため、grayscale、GRAYSCALE、前後に空白がある同じ語は変換済みと判断されます。page_countは常に入力要素数と一致し、返されるpages配列も同じ長さを保ちます。pages_changedが0なら、有効なリクエストで変更不要だったという意味であり、入力が空だったという意味ではありません。page_countと等しければ全ページが変更対象で、中間値なら複数モードが混在しています。ネットワーク、時刻、乱数、地域設定、変更可能な状態を使わないため、同じ入力からは常に同じJSONが得られます。
PDF処理フローで結果を活用します
その後、PDFエンジンは返された順序付き一覧を目標モードとして利用し、pages_changedを報告、検証、運用指標へ記録できます。この機能自体はPDFを開くことも、ラスタライズ、再着色、バイナリPDFの返却も行いません。この境界によりブラウザー実行と決定的なAPI自動化が可能ですが、実際の画素を変更する場合は、適切なPDFレンダラーへ計画を渡す必要があります。自動処理は1リクエストあたり$0.002で、この機能にはページ単位の追加料金はありません。
技術的な質問
pages_changedは何を数えますか?
空白と大文字小文字の違いを除いて比較し、まだgrayscaleではなかった有効なページを数えます。
全ページがすでにグレースケールの場合はどうなりますか?
処理は成功し、返される全ページはgrayscaleのままで、pages_changedは0になります。
空のpages配列を送信できますか?
できません。PDF記述には少なくとも1つのページモードが必要で、空または欠落した入力はinvalid_inputになります。
自動リクエストの料金はいくらですか?
公開料金は1リクエストあたり$0.002で、ページごとの追加料金はありません。