PDF編集ボタンの要素を取得する
プラグイン設定で定義した PDF 編集設定に対応する、レコード詳細画面の PDF 編集ボタン(HTMLButtonElement)を DOM から取得します。
カスタマイズ JavaScript からボタンの表示・非表示、スタイル変更、クリックイベントの追加などを行う際に利用します。
関数
cn.pdfEdit.getEditButtonElement(settingId)
引数
| パラメーター名 | 型 | 必須 | 説明 |
|---|---|---|---|
| settingId | 文字列 | 必須 | プラグイン設定画面で各 PDF 編集設定に付与する識別子。 プラグイン設定画面の「基本情報」→「設定ID」に表示される値をそのまま指定します。例: id-01 |
戻り値
| 型 | 説明 |
|---|---|
| HTMLButtonElement | 指定した設定ID に対応する PDF 編集ボタン要素。 次の場合はundefined。 ・パラメーターの settingId がプラグイン設定に存在しない場合・対応するボタンが DOM 上にまだ描画されていない場合 |
利用できる画面
レコード詳細画面
サンプルコード
kintone.events.on('app.record.detail.show', (event) => {
const button = cn.pdfEdit.getEditButtonElement('id-01');
if (!button) {
console.warn('PDF編集ボタン要素を取得できませんでした');
return event;
}
// ボタン非表示
button.style.display = 'none';
return event;
});
制限事項
- レコード詳細画面専用の DOM 取得 API です。 一覧画面などではボタン自体が描画されないため、有効な
settingIdを指定してもundefinedになります。
PDF編集画面を開く
JavaScript カスタマイズからPDF編集画面を開き、ユーザーが編集したPDFデータをArrayBufferとして取得します。外部で取得したPDFや生成したPDFに対して編集したい場合に利用します。
- この API は非同期です。Promise が返ります。
- PDF編集結果はレコードには自動保存されません。呼び出し元で戻り値に対して処理を実装してください。
- PDF編集画面で「保存」を押したタイミングでPromiseがresolveされます。
- 事前条件を満たさない場合、PromiseはPdfEditApiErrorでrejectされます。
関数
cn.pdfEdit.openEditWindow(params)
引数
| パラメーター名 | 型 | 必須 | 説明 |
|---|---|---|---|
| params | オブジェクト | 必須 | 編集画面を開くためのパラメーター。 |
| params.settingId | 文字列 | 必須 | 使用するPDF編集設定の設定ID。プラグイン設定画面「基本情報」の「設定ID」を指定します。例: id-01 |
| params.files | 配列 | 必須 | 編集対象の PDF ファイル一覧。 <仕様> ・配列の要素数は最大20まで。 ・1 ファイルあたりの最大サイズは10 MBまで。 |
| params.files[].fileName | 文字列 | 必須 | ファイル名。例: document.pdf |
| params.files[].pdfData | ArrayBuffer | 必須 | PDFのバイナリデータ。 |
| params.files[].record | Record | 省略可 | レコード情報。定型文でレコードの値を参照したい場合には指定する。 |
| params.closeOnSave | 真偽値 | 省略可 | 編集後PDFの取得完了後に PDF編集画面を自動で閉じるかどうか。 ・true(省略時): 保存成功後、自動でPDF編集画面を閉じる ・false: 保存成功後も PDF編集画面を開いたまま。閉じるときは cn.pdfEdit.closeEditWindow() を使用 |
戻り値
| プロパティ | 型 | 説明 |
|---|---|---|
| isCancel | 真偽値 | PDF編集画面でキャンセル(×ボタンクリック、キャンセルボタンクリック、closeEditWindow() 実行)した場合true。保存完了時はfalse。 |
| files | 配列 | 編集後PDFの一覧。キャンセル時は空配列 []。 |
| files[].fileName | 文字列 | ファイル名。 |
| files[].pdfData | ArrayBuffer | 編集後PDFのバイナリデータ。 |
利用できる画面
レコード詳細画面、レコード一覧画面
サンプルコード
(async () => {
try {
const pdfData = await fetchPdfFromSomewhere(); // ArrayBuffer
const result = await cn.pdfEdit.openEditWindow({
settingId: 'id-01',
files: [
{
fileName: 'document.pdf',
pdfData,
},
],
});
if (result.isCancel) {
console.log('編集がキャンセルされました');
return;
}
// 編集後PDFを利用(例: kintone REST API でレコード更新など)
for (const file of result.files) {
console.log(file.fileName, file.pdfData.byteLength);
}
} catch (error) {
if (error instanceof cn.pdfEdit.PdfEditApiError) {
console.error(error.code, error.message, error.details);
} else {
throw error;
}
}
})();
サンプルコード(エラー時)
Promise が reject される場合、エラーは cn.pdfEdit.PdfEditApiError のインスタンスです。
try {
await cn.pdfEdit.openEditWindow({ /* ... */ });
} catch (error) {
if (error instanceof cn.pdfEdit.PdfEditApiError) {
console.log(error.code); // エラーコード
console.log(error.message); // ユーザー向けメッセージ
console.log(error.details); // 付加情報(任意)
}
}
エラーコード一覧
| コード | 説明 |
|---|---|
| UNSUPPORTED_SCREEN | レコード詳細・一覧以外の画面で呼び出した |
| ALREADY_OPEN | 編集画面が既に開いており、進行中の Promise もない |
| AUTH_INVALID | プラグイン認証が無効 |
| INVALID_PARAMS | 引数の型・必須項目が不正 |
| SETTING_NOT_FOUND | 指定した設定ID がプラグイン設定に存在しない |
| FILE_COUNT_EXCEEDED | 引数のファイル数が上限(20 件)を超えた |
| FILE_SIZE_EXCEEDED | 引数の ファイルが 10 MB を超えた |
| INVALID_PDF_FORMAT | 引数のファイルがPDF 形式でない(%PDF シグネチャ不一致) |
| PDF_GENERATION_FAILED | 編集後PDFの生成に失敗 |
制限事項
- 同時に開ける編集画面は 1 つです。
- 編集ボタンの表示条件・レコード編集権限は本 API では検証しません。 プラグイン認証が有効であれば、ボタン非表示のレコードでも API から編集画面を開けます。
- 編集画面の UI 操作が必要です。プログラムから自動保存はできず、ユーザーがPDF編集画面上で「保存」または「キャンセル」するまで Promise は pending のままです。
補足:通常モード(編集ボタンからのPDF編集画面表示時)との違い
| 項目 | 編集ボタン | openEditWindow |
|---|---|---|
| PDF の入力元 | レコードの添付ファイルフィールド | 引数 files |
| 保存先 | プラグインで設定した保存先フィールド | なし(Promise の戻り値) |
| 編集元 PDF 選択ダイアログ | プラグイン設定に従う | 表示されない |
| 編集履歴の保存 | プラグイン設定に従う | 行われない |
PDF編集画面を閉じる
表示中の PDF編集画面をプログラムから閉じます。openEditWindow() で開いた編集画面をキャンセルしたい場合や、closeOnSave: false で保存後もPDF編集画面を開いたままにしている場合の終了処理などに利用します。
- この API は同期です。戻り値はありません。
- 編集画面が開いていない場合は何もしません(例外も発生しません)。
openEditWindow()でPDF編集画面を開いた状態で本関数を呼び出した場合、キャンセル相当として処理されます。
関数
cn.pdfEdit.closeEditWindow()
引数
なし
戻り値
なし
利用できる画面
レコード詳細画面、レコード一覧画面
サンプルコード
/** openEditWindow() をキャンセルする例 **/
const openPromise = cn.pdfEdit.openEditWindow({
settingId: 'id-01',
files: [{ fileName: 'document.pdf', pdfData }],
});
// 別の処理から編集画面を閉じる
cn.pdfEdit.closeEditWindow();
const result = await openPromise;
// result === { isCancel: true, files: [] }
/** openEditWindow()を closeOnSave: false で起動時、保存後に画面を閉じる **/
// 保存済み。result.isCancel === false、result.files に編集後 PDF あり
const result = await cn.pdfEdit.openEditWindow({
settingId: 'id-01',
closeOnSave: false,
files: [{ fileName: 'document.pdf', pdfData }],
});
// 画面を閉じる
if (cn.pdfEdit.isEditWindowOpen()) {
cn.pdfEdit.closeEditWindow();
}
制限事項
- 未保存の編集内容は破棄されます。 保存確認ダイアログは表示されず、即座にPDF編集画面が閉じます。
- 保存確認ダイアログ表示中に呼び出した場合、ダイアログもキャンセル扱いで閉じられます。
- 編集画面が開いていない場合は何もしません。エラーも返りません。
PDF編集画面が開いているか確認する
PDF 編集画面(Drawer)が現在表示されているかどうかを、真偽値で返します。openEditWindow() を呼び出す前の重複チェックや、closeEditWindow() を呼ぶ前の状態確認などに利用します。
関数
cn.pdfEdit.isEditWindowOpen()
引数
なし
戻り値
| 型 | 説明 |
|---|---|
| 真偽値 | PDF 編集画面が開いている場合 true、閉じている場合 false |
利用できる画面
本 API 自体は画面種別のチェックを行いません。プラグインが読み込まれ、cn.pdfEdit が利用可能な画面であれば呼び出せます。
サンプルコード
if (cn.pdfEdit.isEditWindowOpen()) {
console.log('PDF編集画面は既に開いています');
} else {
await cn.pdfEdit.openEditWindow({
settingId: 'id-01',
files: [{ fileName: 'document.pdf', pdfData }],
});
}
制限事項
なし