LoginSignup
1
1

More than 5 years have passed since last update.

Ubuntu 16.04でのsdapsによる日本語アンケートとレポート

Last updated at Posted at 2018-03-14

はじめに

これまで、Ubuntu 12.04を利用して、SDAPSを利用してきましたが、開発者がPPAに最新版を上げたので、Ubuntu 16.04に更新してみました。

2018/03/22 追記
残念ながら、PPAで現在配布されているバージョンでは、レポートで標準偏差が正しく反映されない問題があります。
Githubでの議論やパッチについては、Ubuntu PPAのSDAPSパッケージでレポートの標準偏差がおかしくなる問題への対応にまとめています。

SDAPSはプリンターとスキャナを利用するお手軽なマークシートアプリです。

ただ利用している技術は、LaTeXやPDFなので、日本語を表示するためには欧米仕様のままでは絶対に無理です。フォントの設定などの変更は必須なので、とりあえずad-hocに、いろいろ変更して使えるようにしたので、メモを残しておきます。

環境

本家サイトのTutorialで基本的な操作(コマンドライン)は知っていることを前提としています。

また、LaTeX(setup_tex)の利用が前提で、LibreOfficeを使うODTフォーマットは使っていません。

利用している環境

  • Ubuntu 16.04
  • sdaps debパッケージ (PPA)
  • レーザープリンター (OKI B841)
  • ドキュメントスキャナ (Brother ADS-3600W)

ScanSnapとは違い、ADS-3600Wは直接TIFFマルチページ形式でUSBメモリにファイル出力ができるので、とても助かっています。安定して一度に処理できるページ数は40ページ(300dpi,20枚両面)程度という印象です。

debパッケージのインストール

PPAなので、Ubuntu(LTS)では、ドキュメントのとおりにインストールします。

日本語を使うために、xetexも導入します。

$ sudo apt-get install texlive-xetex

変更箇所

きれいな方法ではないですが、パッケージで入れられたファイルをとりあえずは編集しています。

今回は以下のdebパッケージ管理下のファイルを編集しています。

  • /usr/lib/python2.7/dist-packages/sdaps/defs.py
  • /usr/lib/python2.7/dist-packages/sdaps/reporttex/init.py.20180314
  • /usr/lib/python2.7/dist-packages/sdaps/report/buddies.py.20180314
  • /usr/lib/python2.7/dist-packages/sdaps/report/answers.py.20180314
  • /usr/lib/python2.7/dist-packages/sdaps/template.py.20180314

pdflatexの呼び出しをxelatexに変更

強引ですが、defs.pyのpdflatexコマンドをxelatexに変更しています。

/usr/lib/python2.7/dist-packages/sdaps/defs.py
latex_engine = "xelatex"

サンプルを使った質問票LaTeXファイル側の変更について

/usr/share/doc/sdaps/examples/example.tex.gzにあるサンプルに日本語を混ぜてコンパイルするには、最低限、次のような変更が必要です。

--- a.tex       2018-03-14 13:42:18.744530821 +0900
+++ b.tex       2018-03-14 13:19:49.607947987 +0900
@@ -30,7 +30,13 @@
 % For demonstration purposes
 \usepackage{multicol}

-\author{The Author}
+\usepackage{xltxtra}
+\setmainfont{IPAPMincho}
+\setsansfont{IPAPGothic}
+\setmonofont{IPAGothic}
+\XeTeXlinebreaklocale "ja"
+
+\author{The Author ここに日本語}
 \title{The Title}

 \begin{document}

以下のページを参考に書き換えました。

この他に、日本で一般的なA4用紙を使う時には、明示的にdocumentclassにa4paperを設定してください。QRコードの読み取りがポイントなので、後で説明するスケーリングしない印刷をするために必要になると思います。

定型文の編集について

Ubuntuのパッケージの問題だと思うのですが、Babelではjapaneseの設定ができないので、Egnlish用のテンプレートファイル、translator-sdaps-dictionary-English.dict、を編集して日本語を組み入れます。

このファイルはsdapsコマンドの引数に指定するディレクトリにコピーされるので、無理にdebパッケージ配下のファイルを編集する必要はありません。

質問票、生成後のレポート出力に必要な変更

前項までの変更でアンケート用の日本語PDFファイルは生成できます。

sdaps reportコマンドはreportlabを利用しているので、変更点はここでのフォント周りです。関連するファイルのdiff出力は次のようになりました。

template.py
--- /usr/lib/python2.7/dist-packages/sdaps/template.py.20180314 2015-08-20 15:36:32.000000000 +0900
+++ /usr/lib/python2.7/dist-packages/sdaps/template.py  2018-03-14 14:46:51.793808299 +0900
@@ -25,6 +25,8 @@
 """


 from reportlab import platypus
+from reportlab.pdfbase import pdfmetrics
+from reportlab.pdfbase.cidfonts import UnicodeCIDFont
 from reportlab.lib import styles
 from reportlab.lib import units
 from reportlab.lib import pagesizes
@@ -78,7 +80,8 @@

     def beforeDrawPage(self, canvas, document):
         canvas.saveState()
-        canvas.setFont('Times-Bold', 24)
+        pdfmetrics.registerFont(UnicodeCIDFont("HeiseiKakuGo-W5"))
+        canvas.setFont('HeiseiKakuGo-W5', 24)
         canvas.drawCentredString(
             document.width / 2.0,
             document.height - 50 * mm,
answers.py
--- /usr/lib/python2.7/dist-packages/sdaps/report/answers.py.20180314   2017-07-17 06:16:41.000000000 +0900
+++ /usr/lib/python2.7/dist-packages/sdaps/report/answers.py    2018-03-14 15:02:32.738665807 +0900
@@ -21,6 +21,8 @@

 from reportlab import pdfgen
 from reportlab import platypus
+from reportlab.pdfbase import pdfmetrics
+from reportlab.pdfbase.cidfonts import UnicodeCIDFont
 from reportlab.lib import styles
 from reportlab.lib import units
 from reportlab.lib import pagesizes
@@ -205,7 +207,8 @@
     def draw(self):
         if 0:
             assert isinstance(self.canv, pdfgen.canvas.Canvas)
-        self.canv.setFont("Times-Roman", 10)
+        pdfmetrics.registerFont(UnicodeCIDFont("HeiseiKakuGo-W5"))
+        self.canv.setFont("HeiseiKakuGo-W5", 10)
         # mean
         mean = flowables.Box(self.mean_width, self.mean_height, self.box_depth)
         mean.transparent = 0
buddies.py
--- /usr/lib/python2.7/dist-packages/sdaps/report/buddies.py.20180314   2017-07-17 06:16:41.000000000 +0900
+++ /usr/lib/python2.7/dist-packages/sdaps/report/buddies.py    2018-03-14 15:06:34.401587886 +0900
@@ -19,6 +19,8 @@
 import math

 from reportlab import platypus
+from reportlab.pdfbase import pdfmetrics
+from reportlab.pdfbase.cidfonts import UnicodeCIDFont
 from reportlab.lib import styles
 from reportlab.lib import colors
 from reportlab.lib import units
@@ -49,11 +51,13 @@
     spaceBefore=5 * mm,
 )

+pdfmetrics.registerFont(UnicodeCIDFont("HeiseiKakuGo-W5"))
+
 stylesheet['Question'] = styles.ParagraphStyle(
     'Question',
     stylesheet['Normal'],
     spaceBefore=3 * mm,
-    fontName='Times-Bold',
+    fontName='HeiseiKakuGo-W5',
 )

 stylesheet['Text'] = styles.ParagraphStyle(

印刷時の不具合の回避

ドキュメントにも載っていますが、QRコードが読めない可能性があるので、日本であれば一般的なA4サイズをTeXファイル上で明示して、特大ページを縮小などのオプションは使わないのがお勧めです。

また読み取りの問題に関連して、コピー機での大量複写もお勧めしません。コストと時間は少しかりますが、経験的にできるだけレーザープリンタで印刷するのが良いと思います。

この他のTips

経験からは、ボールペンやシャープペンシルといった違いは問題になりません。折り目がついたりスキャンしたTIFFファイルを目でみてノイズが目立つと思っても割と処理はスムーズです。

ただTIFFファイルをPDFから変換した場合には、どうやってもうまく処理ができないものが全体の1割ぐらい発生したこともあります。

学生時代はPostscriptファイルの日本語化に悩まされましたが、欧米で開発されたソフトウェアのページ記述言語(PDL)での出力は、いつまでもフォント周りに泣かされるなと感じます。reportlabは優秀だと思いましたが、フォントの指定をしないといけないので、一人の開発者が全てを把握するのは無理だなと思います。

毎年繰り返しアンケートを取っているので、定期的にアンケート用紙のアップデートを行なっています。Ubuntu 12.04では、Version 1.1を使っていたので、今回、Version 1.9に変更になり、choicequestionの引数が[2]のような表記から、[cols=2]と変更になったところだけ、昔のファイルを変更して利用しました。

この他の参考文献

以上

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1