開発ブログ一覧に戻る
Update2025年12月15日

PDF出力の高速化

採点済み答案のPDF出力は、一括採点の重要な機能です。 しかし、答案枚数が多いと出力に時間がかかるという課題がありました。 本記事では、PDF出力を高速化した取り組みについて紹介します。

課題:大量の答案を処理する時間

採点済み答案のPDF出力では、以下の処理を答案1枚ごとに行います。

  1. 元の答案画像を読み込む
  2. 採点記号(丸・バツ・三角)を描画
  3. 点数を描画
  4. アノテーション(線・四角・テキストなど)を描画
  5. PDFページとして埋め込む

1枚あたりの処理時間は短くても、 40人×2ページの答案を処理すると80回、 100人のテストなら数百回の繰り返しになります。

従来の実装では、これらの処理を1枚ずつ順番に行っていました。 つまり、1枚目の処理が終わるまで2枚目は待機、 2枚目が終わるまで3枚目は待機...という形です。

この方式では、答案の枚数に比例して処理時間が長くなります。 大規模なテストでは、PDF出力だけで数分かかることもありました。

解決策:並列処理の導入

今回のアップデートでは、複数の答案を同時に処理する方式に変更しました。

具体的には、「Canvas Pool」という仕組みを導入しています。 Canvasとは、画像を描画するための作業領域のようなものです。 複数のCanvasを用意しておき、それぞれで異なる答案を同時に処理します。

並列処理のイメージ

従来(順次処理)

答案1 → 答案2 → 答案3 → 答案4 → ...

改善後(並列処理・4並列の例)

答案1 → 答案5 → 答案9 → ...
答案2 → 答案6 → 答案10 → ...
答案3 → 答案7 → 答案11 → ...
答案4 → 答案8 → 答案12 → ...

最大8つの答案を同時に処理できるため、 理想的な条件では処理時間を大幅に短縮できます。

並列数の調整

並列処理は高速ですが、同時に多くの処理を行うとパソコンに負荷がかかります。 そのため、ユーザーが並列数を1〜8の範囲で調整できるようにしました。

高性能なパソコンでは8並列で高速処理、 古いパソコンでは2〜4並列で安定処理、といった使い分けが可能です。

UIの改善

処理の高速化に合わせて、ユーザーインターフェースも改善しました。

進捗表示の刷新

PDF出力中の画面を刷新し、処理の進捗がより分かりやすくなりました。 全体の進捗に加えて、現在処理中のページ数も表示されます。

キャンセル機能の追加

新たにキャンセル機能を追加しました。 PDF出力を開始した後でも、途中で処理を中断できます。

「設定を間違えた」「別の作業を先にしたい」といった場面で、 出力完了を待たずに作業を中断できるようになりました。

その他の改善

点数印字位置の拡張

点数を印字する位置を、9方向から選択できるようになりました。

選択可能な位置
左上
中央上
右上
左中央
中央
右中央
左下
中央下
右下

答案のレイアウトに合わせて、最適な位置に点数を配置できます。

点数サイズの拡大

点数の表示サイズの上限を、48から200に拡大しました。 大きな答案用紙でも、見やすいサイズで点数を印字できます。

これらの改善により、採点済み答案のPDF出力がより快適になりました。 今後も処理速度の改善に取り組んでいきます。

一括採点を使ってみませんか?

最新版をダウンロードして、採点作業を効率化しましょう。

最新版をダウンロード