PDF編集プラグイン for kintone JavaScript API ドキュメント

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[].pdfDataArrayBuffer必須PDFのバイナリデータ。
params.files[].recordRecord省略可レコード情報。定型文でレコードの値を参照したい場合には指定する。
params.closeOnSave真偽値省略可編集後PDFの取得完了後に PDF編集画面を自動で閉じるかどうか。
・true(省略時): 保存成功後、自動でPDF編集画面を閉じる
・false: 保存成功後も PDF編集画面を開いたまま。閉じるときは cn.pdfEdit.closeEditWindow() を使用

戻り値

プロパティ説明
isCancel真偽値PDF編集画面でキャンセル(×ボタンクリック、キャンセルボタンクリック、closeEditWindow() 実行)した場合true。保存完了時はfalse
files配列編集後PDFの一覧。キャンセル時は空配列 []
files[].fileName文字列ファイル名。
files[].pdfDataArrayBuffer編集後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 }],
  });
}

制限事項

なし