オープンソースのLMSであるMoodleには, 学生がファイルを提出する課題 Assignment 活動がある. PDF注釈Annotate PDFによるフィードバックでは, そのファイルが一律にPDFに変換されて評定ページで教師に提示され, 教師はPDF注釈を加えて学生に返すことができる.
この過程にはいくつかの外部プログラム, ライブラリが介在しており, (特に日本語やHEICフォーマットをサポートする場合は)設定が複雑なのでこの記事で解説.
今まで, Moodle.org のフォーラムに記事を投稿してきた.
- (unoconv, 日本語) 課題の評定画面の課題ファイルの表示について https://moodle.org/mod/forum/discuss.php?d=338260 *「課題」ツールのPDF注釈機能について https://moodle.org/mod/forum/discuss.php?d=364983
この記事は hig3.hatenadiary.com の,最近のバージョンに対する更新.主に Moodle と Ubuntu の改善により手順が簡単になっている.
バージョン
- Ubuntu Server 22.04.3 Server LTS 要root
- Moodle 4.1.6 LTS 要admin
- unoconv 0.8.2
- python 3.10.12
- LibreOffice 7.6.4.1
流れ
PDF注釈は次のように進む.
- 学生が課題に提出したファイルがPDFならそのまま,PDF以外なら unoconv がPDFに変換する
- PDFは評定ページで ghostscript や pdftopnm によって表示される
- 評定ページで教師がPDFに書き込む操作をすると, tfpdf がPDF注釈が加える*1
この順で, 設定(手順)と確認(test)を示す.
PDFを表示する設定(PDF注釈を使用する設定)
Ghostscript のインストール
sudo apt install ghostscript
Moodle>Site Administration>Server>System paths>Path to ghostscript に /usr/bin/gs
と設定.
test0
Moodle の課題でPDF注釈によるフィードバックを有効化できる
test1
Moodle > Site Administration >Plugins>Annotate PDF >Path to Ghostscript で, Test Ghostscript path でスタンプにより注釈された画像が表示される
test2
学生が課題にPDFをアップロードし,教師が評定を開くと,PDF注釈のページが表示される.この段階で日本語も表示される.
poppler-utils のインストール(optional)
PDFのWebページ上の表示(のみ,注釈とは無関係)が高速化される.
sudo apt install poppler-utils
Moodle>Site Administration>Server>System paths>Path to pdftoppm に /usr/bin/pdftoppm
と設定*2.
提出ファイルのPDFへの変換を可能にする設定
unoconv のインストール
Universal Office Converter (unoconv) - MoodleDocsの手順の通り行う.
test
unoconv --version echo hello > afo.txt unoconv -f pdf afo.txt
Python 3.12でdeprecate…のような警告がでるが,放置してかまわないようだ.
Document Converter の有効化
Moodle>Site Administration>Plugin>Document converfters>Manage document converter で Unoconv を有効化, Google Drive など他のConverterより上位に置く.
test1
Moodle>Site Administration/Plugins/Unoconv で, Test unoconv path, Download the converted pdf test file でPDFファイルがダウンロードできるはず.
test2
PDF注釈を有効化した課題に afo.txt をアップロードすると,PDFに変換されたものが評定ページで表示される
提出ファイルのPDFへの変換を日本語対応にする設定
この段階で日本語テキストファイルを提出すると, PDFでは日本語部分が豆腐になる. そこで, unoconv に日本語フォントを与える.
Noto-CJK フォントの導入
sudo apt install fonts-noto-cjk fonts-noto-cjk-extra
unoconv を service にしている場合は service を再起動する
sudo systemctl restart unoconv
test1
echo 日本語 > foo.txt unoconv -f pdf foo.txt
test2
課題にアップロードした日本語テキストファイルも変換される
変換されたPDFへの注釈を可能にする
PDF注釈
この状態でできるはず.
test1
Moodle > Site Administration >Plugins>Annotate PDF >Path to Ghostscript で, Test Ghostscript path でスタンプにより注釈された画像が表示される
test2
PDF注釈で, ツール群がPDF表示の上に現れ, テキストツールで英語を書き込み, Download feedback PDFで, その内容が書かれたPDFファイルがダウンロードできる.
日本語によるPDF注釈を可能にする設定
この段階では, 注釈でつけた日本語のノートはPDF注釈後に豆腐になる. これを防ぐには, Moodle, tfpdf に日本語フォントを与える必要がある.
sudo vi $(MOODLE)/config.php
で tfpdf の持っているフォントを指定する.
$CFG->directorypermissions = 0777; $CFG->pdfexportfont='kozminproregular'; //$CFG->pdfexportfont='kozminpromedium'; // On Debian?
HEIC 形式のファイルもPDFに変換する設定
HEICはiOSデバイスが使う高圧縮な画像フォーマット. この段階では, 拡張子.heicのHEIC形式ファイルを課題に提出すると, PDF注釈ページではPDFに変換されず, Some of the files can only be accessed through download.という注記が表示される.
そこで,HEICからjpegへの変換をサポートする ImageMagick または libheif で前処理する導入する
Imagemagick のインストール
sudo apt install imagemagick
type -a convert
libheif のインストール
sudo apt install libheif-examples
type -a heif-convert
test
scp somewhere:iPhone/photo.heic . convert photo.heic photo.jpeg
converter.php の書き換え
- $(MOODLE)/files/converter/unoconv/classes/converter.phpで定義される converter クラスのメソッド protected static function fetch_supported_formats() が返す拡張子の配列に, 要素 'heic' を追加する.
388c405 < self::$formats = array_unique($formats); --- > self::$formats = array_unique(array_merge($formats,['heic']));
- convertクラスのメソッド public function start_document_conversion(\core_files\conversion $conversion) で, 作業ディレクトリへの提出ファイルのコピーが終わった後, 拡張子が 'heic'である場合のみ, /usr/bin/convert でJPEG形式に変換する前処理を追加し, その後,JPEGをunoconvがPDFに変換するようにする
128c128,145 < } --- > } else { // hig > if( \core_text::strtolower($fromformat) == 'heic'){ > $jpgfilename=$uniqdir . '/' . $file->get_id() . '.jpg'; > $cmd=escapeshellcmd("/usr/bin/convert"). ' '. >// $cmd=escapeshellcmd("/usr/bin/heif-convert"). ' '. > escapeshellarg($filename) . ' '. > escapeshellarg($jpgfilename); > > $output = null; > $currentdir = getcwd(); > chdir($uniqdir); > > $result = exec($cmd, $output, $returncode); > $filename=$jpgfilename; > > chdir($currentdir); > touch($filename); > } > } // hig
このファイル converter.php は,Moodle 4.0 から変わっていなかった.
test
課題に拡張子 .heic のHEIC形式ファイルを提出すると, PDFに変換され,評定ページで表示される.
この方法でよい理由
クラスメソッドpublic static function supports($from, $to)
で, unoconv が拡張子$fromから$toへの変換をサポートしているかを判定している. このメソッドは結局, unoconv --show
で出力される, 対応拡張子リストを参照している.
これにはHEICは含まれないので, Moodleは変換しようとしない. また, 実際 unoconv
は HEIC形式ファイルを扱えない.
Imagemagick (convert) は HEIC形式を JPEG形式などに変換できるので, unoconv の前に convert で前処理することにした.
さらにやってもいいHEIC対応
Moodle > Site administration > Server > File types でHEICを登録すると, 提出ファイル一覧などで, 画像ファイルのアイコンが表示される.