0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

外字不要のPDF帳票作成サーバー

Last updated at Posted at 2023-11-28

PDF帳票作成サーバー py3o

PDF帳票作成サーバー py3o を使って、異体字を含んだPDF帳票を作成することができます。

PDF帳票の例
image.png

PDF出力時の付加機能

  1. フォントの埋め込み
  2. PDFフォーム
  3. PDF/Aドキュメント
  4. 透かし入りのPDFドキュメント
  5. パスワードで保護された PDF ドキュメント
  • 本記事では、py3oで作成されるPDF帳票に IPAmj明朝 フォントが埋め込まれ、異体字が正しい字形で表現されることを確認します。

IVS対応

py3o は、IVSに対応していますので、IPAmj明朝 フォントの異体字を正しい字形で表現できます。PDF形式ファイルには、使用されているフォントが埋め込まれますので、IPAmj明朝 フォントがインストールされていないパソコンでも、正しい字形での表示や印刷が可能です。

参考:IVD/IVSとは (文字情報技術促進協議会)

IPAmj明朝フォント - https://moji.or.jp/mojikiban/font/

IPAmj明朝フォントは、人名の表記等で、細かな字形の差異を特別に使い分ける必要のある業務等での活用を想定したフォントです。また、同フォントを十分に活用するためには、対応したアプリケーションソフトが必要となります。

Webサービス

py3oは、Webサービスですので、様々なシステムからの連携が可能です。

  1. PDF帳票の データ 項目を設計します。
  2. LibreOfficeの文書(Writer)で ひな形ファイル を作成します。
  3. データひな形ファイル をPDF帳票作成サーバーに送信します(POST)。
  4. データフォント とが埋め込まれた PDF帳票 が送信元に返されます。
分類 項目 説明
入力 ひな形ファイル LibreOfficeの文書ファイル(ODT形式)
入力 フォント 帳票で使用するフォント
入力 データ 帳票に差し込むデータ
処理 PDF帳票作成サーバー PDF形式ファイルの生成
出力 PDF帳票 PDF形式ファイル

py3oについて
py3oはERPであるodooのPDF帳票エンジンとして開発されました

Webサービス(POSTメソッド)として実装されていますので、odooに限らず、様々なシステムからの連携が可能です。

インストールと起動

Dockerファイルが用意されていますので、PDF帳票作成サーバーをインストールし、起動します。

動作環境(バージョン)

  • Ubuntu 18.04.6 LTS
  • Python 2.7.17
  • LibreOffice 6.0.7.3 00m0(Build:3)
  • openjdk version "1.8.0_362"
  • OpenJDK Runtime Environment (build 1.8.0_362-8u372-ga~us1-0ubuntu1~18.04-b09)
  • OpenJDK 64-Bit Server VM (build 25.362-b09, mixed mode)

本家

次のリポジトリで、本家のDockerファイルが公開されています。

次の docker コマンドで、Dockerイメージを起動することができます。

Docker - xcgd/py3o
docker run --network host xcgd/py3o:1.0.0

派生 - IPAmj明朝フォント

異体字を含むPDF帳票を作成するために、 IPAmj明朝 フォントがインストールされるDockerファイルを利用します。

ツール(アプリ)のインストール

ソースコードの取得(Dockerファイル)

git clone --depth=1 https://github.com/jp-one/py3o-whl.git

VSCodeで開く

取得した py3o-whl フォルダ をVisual Studio Codeで開きます。

Containerを起動

Visual Studio Code Dev Containers (拡張機能) がインストールされていれば、 Reopen in Container が表示されますので、それを実行します。

image.png

もしくは、左下のアイコン(><)をクリックするとメニューが表示されますので、その中から Reopen in Container を選択します。

image.png

フォントの確認

Visual Studio Code で、新しいターミナルを開いて、 fc-list コマンドを実行するとサーバーにインストールされているフォントの一覧が表示されます。

ターミナル
fc-list
コマンド実行例
フォント一覧
root@1234a56789cd:~# fc-list
/usr/share/fonts/truetype/msttcorefonts/comicbd.ttf: Comic Sans MS:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: DejaVu Serif:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf: DejaVu Sans Mono:style=Book
/usr/share/fonts/truetype/msttcorefonts/comic.ttf: Comic Sans MS:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/opentype/noto/NotoSerifCJK-Bold.ttc: Noto Serif CJK SC:style=Bold
/usr/share/fonts/opentype/noto/NotoSerifCJK-Bold.ttc: Noto Serif CJK TC:style=Bold
/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf: Times New Roman:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,thường,Arrunta
/usr/share/fonts/truetype/msttcorefonts/courbi.ttf: Courier New:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,Lodi etzana
/usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf: Courier New:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,nghiêng,Etzana
/usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf: Verdana:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,Etzana
/usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf: Arial:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,nghiêng,Etzana
/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf: DejaVu Sans:style=Book
/usr/share/fonts/truetype/ipaexfont00401/IPAexfont00401/ipaexg.ttf: IPAexGothic,IPAexゴシック:style=Regular
/usr/share/fonts/truetype/msttcorefonts/ariblk.ttf: Arial Black:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/truetype/msttcorefonts/Arial.ttf: Arial:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,thường,Arrunta
/usr/share/fonts/truetype/msttcorefonts/couri.ttf: Courier New:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,nghiêng,Etzana
/usr/share/fonts/opentype/noto/NotoSerifCJK-Bold.ttc: Noto Serif CJK JP:style=Bold
/usr/share/fonts/opentype/noto/NotoSerifCJK-Bold.ttc: Noto Serif CJK KR:style=Bold
/usr/share/fonts/truetype/msttcorefonts/Georgia_Bold.ttf: Georgia:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans CJK JP:style=Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans CJK HK:style=Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans CJK KR:style=Regular
/usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf: Courier New:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,thường,Arrunta
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans CJK SC:style=Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans CJK TC:style=Regular
/usr/share/fonts/truetype/msttcorefonts/trebucit.ttf: Trebuchet MS:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,Etzana
/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Bold_Italic.ttf: Trebuchet MS:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,Lodi etzana
/usr/share/fonts/truetype/msttcorefonts/arialbd.ttf: Arial:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,đậm,Lodia
/usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf: Verdana:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/truetype/msttcorefonts/georgiab.ttf: Georgia:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/truetype/ipafont00303/IPAfont00303/ipamp.ttf: IPAPMincho,IPA P明朝:style=Regular
/usr/share/fonts/truetype/msttcorefonts/Georgia_Bold_Italic.ttf: Georgia:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,Lodi etzana
/usr/share/fonts/truetype/msttcorefonts/trebuc.ttf: Trebuchet MS:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/truetype/ipafont00303/IPAfont00303/ipag.ttf: IPAGothic,IPAゴシック:style=Regular
/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc: Noto Serif CJK SC:style=Regular
/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc: Noto Serif CJK TC:style=Regular
/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf: Times New Roman:style=Italic,cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,kursywa,Itálico,Курсив,İtalik,Poševno,nghiêng,Etzana
/usr/share/fonts/truetype/msttcorefonts/georgiaz.ttf: Georgia:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,Lodi etzana
/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf: DejaVu Sans:style=Bold
/usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf: Comic Sans MS:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/truetype/msttcorefonts/Georgia_Italic.ttf: Georgia:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,Etzana
/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc: Noto Serif CJK JP:style=Regular
/usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf: Arial:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,nghiêng đậm,Lodi etzana
/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc: Noto Serif CJK KR:style=Regular
/usr/share/fonts/truetype/msttcorefonts/timesbd.ttf: Times New Roman:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiona,Negrito,Полужирный,Fet,Kalın,Krepko,đậm,Lodia
/usr/share/fonts/truetype/ancient-scripts/Symbola_hint.ttf: Symbola:style=Regular
/usr/share/fonts/truetype/msttcorefonts/Webdings.ttf: Webdings:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/truetype/msttcorefonts/Verdana.ttf: Verdana:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/truetype/ipamjm0601/ipamjm.ttf: IPAmjMincho,IPAmj明朝:style=Regular
/usr/share/fonts/truetype/msttcorefonts/Georgia.ttf: Georgia:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/truetype/ipaexfont00401/IPAexfont00401/ipaexm.ttf: IPAexMincho,IPAex明朝:style=Regular
/usr/share/fonts/truetype/msttcorefonts/trebucbd.ttf: Trebuchet MS:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/truetype/msttcorefonts/cour.ttf: Courier New:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,thường,Arrunta
/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Italic.ttf: Trebuchet MS:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,Etzana
/usr/share/fonts/truetype/ipafont00303/IPAfont00303/ipam.ttf: IPAMincho,IPA明朝:style=Regular
/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf: DejaVu Sans Mono:style=Bold
/usr/share/fonts/truetype/ipafont00303/IPAfont00303/ipagp.ttf: IPAPGothic,IPA Pゴシック:style=Regular
/usr/share/fonts/truetype/msttcorefonts/georgiai.ttf: Georgia:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,Etzana
/usr/share/fonts/truetype/msttcorefonts/verdanai.ttf: Verdana:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,Etzana
/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf: Times New Roman:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,nghiêng đậm,Lodi etzana
/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Bold.ttf: Trebuchet MS:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/truetype/msttcorefonts/arialbi.ttf: Arial:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,nghiêng đậm,Lodi etzana
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans Mono CJK TC:style=Bold
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans Mono CJK SC:style=Bold
/usr/share/fonts/truetype/msttcorefonts/courbd.ttf: Courier New:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,đậm,Lodia
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans Mono CJK KR:style=Bold
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans Mono CJK HK:style=Bold
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans Mono CJK JP:style=Bold
/usr/share/fonts/truetype/msttcorefonts/Impact.ttf: Impact:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/truetype/msttcorefonts/verdanab.ttf: Verdana:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf: Courier New:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,đậm,Lodia
/usr/share/fonts/truetype/openoffice/opens___.ttf: OpenSymbol:style=Regular
/usr/share/fonts/truetype/msttcorefonts/verdanaz.ttf: Verdana:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,Lodi etzana
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans Mono CJK SC:style=Regular
/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf: Times New Roman:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiona,Negrito,Полужирный,Fet,Kalın,Krepko,đậm,Lodia
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans Mono CJK TC:style=Regular
/usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf: Verdana:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,Lodi etzana
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans Mono CJK HK:style=Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans Mono CJK KR:style=Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans Mono CJK JP:style=Regular
/usr/share/fonts/truetype/msttcorefonts/Arial_Black.ttf: Arial Black:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans CJK JP:style=Bold
/usr/share/fonts/truetype/msttcorefonts/Andale_Mono.ttf: Andale Mono:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans CJK KR:style=Bold
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans CJK HK:style=Bold
/usr/share/fonts/truetype/msttcorefonts/trebucbi.ttf: Trebuchet MS:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,Lodi etzana
/usr/share/fonts/truetype/msttcorefonts/timesi.ttf: Times New Roman:style=Italic,cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,kursywa,Itálico,Курсив,İtalik,Poševno,nghiêng,Etzana
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans CJK TC:style=Bold
/usr/share/fonts/truetype/msttcorefonts/andalemo.ttf: Andale Mono:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans CJK SC:style=Bold
/usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf: Arial:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,đậm,Lodia
/usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf: Courier New:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,Lodi etzana
/usr/share/fonts/truetype/msttcorefonts/timesbi.ttf: Times New Roman:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,nghiêng đậm,Lodi etzana
/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf: DejaVu Serif:style=Book
/usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf: Comic Sans MS:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/truetype/msttcorefonts/times.ttf: Times New Roman:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,thường,Arrunta
/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS.ttf: Trebuchet MS:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/truetype/msttcorefonts/ariali.ttf: Arial:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,nghiêng,Etzana

フォントの追加方法
さらに別のフォントを追加するには、/usr/share/fonts/ ディレクトリの配下に フォントファイル をコピーし、 fc-cache -vf コマンドで登録を完了します。
または、(ubuntu 18.04 向けに用意された)そのフォントのインストーラーを使ってインストールします。

IPAフォントの確認

次のコマンドで、インストールされているフォンを絞り込むことができます。

ipaで絞り込み
fc-list | grep ipa
実行例
root@1234a56789cd:~# fc-list | grep ipa
/usr/share/fonts/truetype/ipaexfont00401/IPAexfont00401/ipaexg.ttf: IPAexGothic,IPAexゴシック:style=Regular
/usr/share/fonts/truetype/ipafont00303/IPAfont00303/ipamp.ttf: IPAPMincho,IPA P明朝:style=Regular
/usr/share/fonts/truetype/ipafont00303/IPAfont00303/ipag.ttf: IPAGothic,IPAゴシック:style=Regular
/usr/share/fonts/truetype/ipamjm0601/ipamjm.ttf: IPAmjMincho,IPAmj明朝:style=Regular
/usr/share/fonts/truetype/ipaexfont00401/IPAexfont00401/ipaexm.ttf: IPAexMincho,IPAex明朝:style=Regular
/usr/share/fonts/truetype/ipafont00303/IPAfont00303/ipam.ttf: IPAMincho,IPA明朝:style=Regular
/usr/share/fonts/truetype/ipafont00303/IPAfont00303/ipagp.ttf: IPAPGothic,IPA Pゴシック:style=Regular

IPAmj明朝 フォントがインストールされていることを確認できます。
ipamjm.ttf: IPAmjMincho,IPAmj明朝:style=Regular

動作確認

Webブラウザーから 8765ポート へアクセスすると、 py3o.fusion サーバーのページが開きます。
リンク: http://localhost:8765/

image.png

使い方 - Features

Features ページ を開くと、 特徴 が説明されており、 Python による Webサービスの使い方のサンプルコードが紹介されています。

image.png

Webサービスの概要

項目 内容 備考
HTTPメソッド POST
エンドポイント http://localhost:8765/form /form
データ targetformat:出力形式
datadict:差し込みデータ(辞書)
image_mapping:固定画像対応付け
(任意)
ignore_undefined_variables:変数定義エラーの無視
escape_false:空文字列のFalse化
ファイル ひな形ファイル(tmpl_file)と固定画像ファイル(任意)
レスポンス 出力ファイルデータ(stream) エラー情報(400)

また、サンプルとなるひな形ファイル(ODT形式ファイル)やPDF形式ファイルを起動しているサーバー(http://localhost:8765/)からダウンロードできます。

サンプル1

サンプル2

動作確認フォーム - Test form

Test form ページ で、PDF帳票の作成ができます。

image.png

サンプル1

Features ページ の1つ目のサンプルを試します。
このサンプルは、単にODT形式ファイルをPDF形式ファイルに変換するだけのものです。

Test form ページ で、次のとおりに各項目に内容を入力し、 Submit ボタンをクリックすると、変換されたPDF形式ファイルがダウンロードされます。

入力内容

項目 内容 備考
Target Format pdf
Data dictionary {} 空の辞書
Image Mapping {} 空の辞書
Image1 (なし)
Template simple.odt ダウンロード - simple.odt

サンプル2

Features ページ の2つ目のサンプルを試します。
このサンプルは、ひな形ファイルと差し込みデータからPDF形式ファイルを作成するものです。

Test form ページ で、次のとおりに各項目に内容を入力し、 Submit ボタンをクリックすると、データが差し込まれたPDF形式ファイルがダウンロードされます。

入力内容

項目 内容 備考
Target Format pdf
Data dictionary {"document": {"person_name": "Aide", "person_surname": "Florent", "person_company": "XCG Consulting", "person_url": "http://www.xcg-consulting.fr"}}
Image Mapping {} 空の辞書
Image1 (なし)
Template fusion2pdf.odt ダウンロード - fusion2pdf.odt

IPAmj明朝フォントの活用

py3oと IPAmj明朝 フォントを活用して、住所や氏名等に含まれる異体字を正しい字形でPDF帳票として出力することができます。

インストール

ひな形ファイルを作成するパソコンに LibreOfficeIPAmj明朝フォント をインストールします。

ひな形ファイルを作成するパソコンにのみ必要
LibreOfficeIPAmj明朝フォント のインストールは、 ひな形ファイルを作成するパソコンにのみ必要 です。
Test formページ等からPDF帳票サーバーへアクセスするパソコンへのインストールは 不要 です。

データ項目の設計

住所1と住所2のデータを用意し、それをひな形ファイルに差し込み出力できるようにします。

項目 内容 備考
addr1 住所1 東京都の区
addr2 住所2 奈良県の市

image.png

Test form ページData dictionary 項目へは、次の内容を入力します。

Data dictionary
{"addr1":"東京都葛飾区","addr2":"奈良県\u845B\uDB40\uDD02城市"}

異体字の入力方法とunicodeエスケープシーケンス
「奈良県葛城市」の「葛」の文字は、多くの日本語入力変換機能では、入力できません(未対応)。その為、文字情報基盤検索システムで検索した文字(MJ022335)コピーフィールドからコピーした文字をペーストして入力します。
また、「葛」(MJ022335)の文字は、 unicodeエスケープシーケンス を使って \u845B\uDB40\uDD02 と表されますので、ここでは、この文字列を文字情報として入力しています。試しに、\u845B\uDB40\uDD02 の文字列を、 コピーフィールドからコピーした文字に置換(ペースト) しても、作成されるPDF帳票では、正しい字形が表示されます。

ひな形ファイルの作成

LibreOfficeの文書(Writer)で、ひな形ファイルを作成します。ひな形ファイルは、LibreOfficeの通常の文書ドキュメント(ODT形式ファイル)です。
py3oでは、フィールドのユーザー欄(変数)を使って、データが文書に差し込まれます。

ひな形ファイルの作成方法

ひな形ファイルの作成方法等については、 Templating with LibreOffice (英語/フランス語) にて文書化されています。

文書ドキュメントの新規作成

LibreOfficeの文書(Writer)で、文書ドキュメントを新規作成し、固定の文言やレイアウト、罫線を編集します。

フィールドのユーザー欄(変数)の定義

次の手順で、データ項目の addr1addr2 のフィールドを定義します。

  1. LibreOffice Writer のメニューから [挿入] > [フィールド] > [他のフィールド...] を選択し、開いた フィールド のタブで [変数] を選びます。
  2. フィールドタイプユーザー欄 を選択します。
  3. 名前 欄に 差込データへのアクセス式 を記述し、 欄に 差込データの説明 を記述します。
  4. ✓マーク ボタンで、入力を確定します(✕マーク ボタンで削除)。
  5. [閉じる] ボタンで フィールド を一旦閉じます。

定義する内容

# 名前
1 py3o.addr1 addr1
2 py3o.addr2 addr2

フィールドの定義例
image.png

フィールドの挿入

次の手順で、データ項目の addr1addr2 の値を差し込みたい箇所に、定義したフィールドを挿入します。

  1. 文書の挿入したい箇所に入力カーソルを合わせます。
  2. LibreOffice Writer のメニューから [挿入] > [フィールド] > [他のフィールド...] を選択し、開いた フィールド のタブで [変数] を選びます。
  3. フィールドタイプユーザー欄 を選択します。
  4. 選択 欄で挿入したい定義済みの名前を選択し、 書式 欄で テキスト を選択します。
  5. [挿入] ボタンで選択している ユーザー欄(変数) をフィールドとして挿入します。
  6. [閉じる] ボタンで フィールド を閉じます。

フォントの指定

挿入したフィールドのフォントを IPAmj明朝 フォントに指定します。通常、 アジア諸言語有効 になっていますので、 アジア諸言語用フォント も漏れなく指定します。

フォントの指定例
image.png

アジア諸言語用フォント

LibreOfficeは、多言語に対応しており、 アジア諸言語用フォント を別に指定することが可能です。日本語の文字列をLibreOfficeがアジア諸国言語と判断して、 アジア諸言語用フォント で指定されたフォントを適用します。
日本語の文字列が期待するフォントで表示されない場合は、この アジア諸言語用フォント が正しく指定されていることを確認してください。

ひな形ファイルの保存

作成したひな形ファイルは、通常の文書ドキュメント(ODT形式ファイル)として、保存します。

image.png

PDF帳票の作成

Test form ページ で、次のとおりに各項目に内容を入力し、 Submit ボタンをクリックすると、データが差し込まれたPDF形式ファイルがダウンロードされます。

入力内容

項目 内容 備考
Target Format pdf
Data dictionary {"addr1":"東京都葛飾区","addr2":"奈良県\u845B\uDB40\uDD02城市"}
Image Mapping {} 空の辞書
Image1 (なし)
Template py3o_addr.odt 作成したひな形ファイル
Data dictionary
{"addr1":"東京都葛飾区","addr2":"奈良県\u845B\uDB40\uDD02城市"}

PDF形式ファイルの表示と確認

さくせいされたPDF形式ファイルを表示すると、「葛」の異体字が正しい字形で表現されていることを確認できます。

image.png

使用されているフォント

作成されたPDF形式ファイルをAcrobat Reader等のPDFビューワーで開き、そのプロパティを確認すると、使用されているフォントが埋め込まれていることを確認できます(埋め込みサブセット)。

そのため、 IPAmj明朝 フォントがインストールされていないパソコンでPDF帳票を開いても、正しい字形で表示・印刷することが可能です。また、PDF帳票作成は、サーバー側で処理される為、 IPAmj明朝 フォントがインストールされていないパソコンで、Test form ページ からPDF帳票を作成しても、正しい字形で表示・印刷することもできます。

image.png

補足事項 - odoo連携

Odoo Apps Store に登録されている次のodoo拡張モジュールをodooにインストールすれば、odooからのPDF帳票作成サーバーとして連携することができます。

py3oのサンプル拡張モジュールである Sample py3o sale reports (sale_report_py3o) を例にすると、 sale_report_py3o/report.xml でpy3oサーバーを参照するように編集します。

report.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>

<record id="local_py3o_server" model="py3o.server">
    <!--
    <field name="url">http://localhost:8765/form</field>
    -->
    <field name="url">http://py3o:8765/form</field>
</record>

<record id="sale.action_report_saleorder" model="ir.actions.report">
    <field name="report_type">py3o</field>
    <!--
    <field name="py3o_filetype">odt</field>
    -->
    <field name="module">sale_report_py3o</field>
    <field name="py3o_template_fallback">sale_order.odt</field>
    
    <field name="py3o_server_id" ref="local_py3o_server"/>
    <field name="py3o_filetype">pdf</field>
    <field name="print_report_name">object.name + '-' + object.date_order.strftime('%Y-%m-%d') + '-' + object.commercial_partner_id.name.replace(' ', '_') + '.pdf'</field>
    
</record>


...

</odoo>

Sample py3o sale reports (sale_report_py3o) をインストールするには、次の記事の「Py3o帳票テンプレートのサンプル」の章を参照してください。

「Py3o帳票テンプレートのサンプル」

おわりに

本記事では、PDF帳票作成サーバーpy3oを使って、異体字を含んだPDF帳票を作成しました。

  • PDF帳票作成サーバー py3o をDockerで起動しました。
  • IPAmj明朝フォント等がPDF帳票サーバーにインストールされていることを確認しました。
  • Test formページで2つのサンプルPDF帳票を出力しました。
  • IPAmj明朝フォントを使ったひな形ファイルを作成しました。
  • 出力されたPDF帳票の異体字が正しい字形で表現されることを確認しました。
  • PDF帳票にIPAmj明朝フォントが埋め込みサブセットとして使用されていることを確認しました。

PDF帳票作成サーバーpy3oIPAmj明朝フォント を活用すれば、文字情報基盤で同定された約6万文字において、 外字が不要 です。

0
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?