vTiger 7.4には見積り書、請求書、受注書、発注書等一部のモジュールでPDF形式のファイルを生成し出力する機能が標準実装されていますが残念ながら日本語環境では実用になりません。
日本語フォントが用意されていないことも一つですが最大の理由はPDFテンプレートのデザインがphpでハードコードされているために編集できません。
そこで各社から提供されているエクステンションを追加してPDF出力機能を増強する必要があります。
PDF Makerがお勧め
ITS4You社が提供しているPDF Makerというエクステンションがお勧めです。
この製品は無料版と有料版があり無料版でもほぼすべての機能が使えますが作成できるPDFテンプレートは4個までという制限があります。
また、このベンダーは英語ではありますがスクリーンショットと共に詳細に書かれたマニュアルが充実しており操作方法はもちろん特にカスタマイズに関する情報が数多く提供されています。
日本語フォント問題
vTigerにはデフォルトで日本語環境が用意されていません。
vTiger自体はマルチリンガル対応アプリケーションですので多少の手順でほぼ問題なく日本語環境での業務使用に耐えれます。
そのままの状態では日本対応していませんが言語ごとに翻訳ファイルを用意してほとんどのラベル(名称・表記)を日本語化することができます。 膨大な量がありますので手間はありますが翻訳ソフトからの出力そのままのような頓珍漢な日本語に翻弄されることはありません。
耐えれますという理由は100%日本語文化に対応できないという状況もありますが実用上は問題ないレベルまでハードコーディング無しで対応できます。 ハードコーディングで改善し始めるとマルチリンガルアプリケーションを使うメリットが殆ど無くなり日本特有のガラパゴス化に向かってしまいますからね。
この部分に日本語対応のフォントが出てくれば嬉しいですね。
日本語フォントがインストールされていない状態では英数字以外の部分が文字化けして表示されない場合や近似フォントに置き換わり中国語の表示になる場合がありきちんとした日本語表示ではありません。
日本語フォントの追加
TIS4You社公式サイトに詳しくその方法が掲載されています。
またPDF MakerはmPDFライブラリを使っていますのでこちらも参考になります。
追加したいフォントをtff形式で用意する
例としてWindows標準フォントなどのファイルは.ttc形式になっていますのでtransfonterなど無料ツールサイトで.ttc形式から.ttf形式に変換しておきます。
なお、フォントを利用する際には使用条件などを確認の上ご自身の要求に合うフォントで手順を進めてください。
また、フォントファイル名にも注意があります。
- すべて小文字英数
- スペースなし
予めファイル名を上記の条件に合わせて書き換えておきます。
Truetypeフォントファイルをディレクトリーにコピーする
準備が出来たら次のディレクトリーに変換したファイルをコピーします。
コピー先: vtigerfolder/modules/PDFMaker/resources/mpdf/ttfonts
mPDFライブラリコード修正
テンプレート内のHTMLやCSSで使用したいフォントをここに追記することにより使用可能になります。
/modules/PDFMaker/resources/mpdf/config_fonts.php
1 2 3 4 5 6 7 8 9 10 11 12 |
$this->fontdata = array( "dejavusanscondensed" => array( 'R' => "DejaVuSansCondensed.ttf", 'B' => "DejaVuSansCondensed-Bold.ttf", 'I' => "DejaVuSansCondensed-Oblique.ttf", 'BI' => "DejaVuSansCondensed-BoldOblique.ttf", 'useOTL' => 0xFF, 'useKashida' => 75, ), "msmincho" => array( 'R' => "msmincho.ttf", ), |
フォント名[dejavusanscondensed]は標準のフォントで最初に記載されていますので2つ目に日本語フォントを追加してみました。
大文字”R”はレギュラーで標準フォントの意味です。
B=Bold
I=Italic
BI=Bold/Italic
それぞれボールドやイタリックを使い分けたい場合は.ttfファイルを作りコピーしアレーの中に追加します。
1 2 3 4 5 6 7 8 9 10 |
// Add fonts to this array if they contain characters in the SIP or SMP Unicode planes // but you do not require them. This allows a more efficient form of subsetting to be used. $this->BMPonly = array( "msmincho", "dejavusanscondensed", "dejavusans", "dejavuserifcondensed", "dejavuserif", "dejavusansmono", ); |
258行目あたり以降の部分にも追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// These next 3 arrays do two things: // 1. If a font referred to in HTML/CSS is not available to mPDF, these arrays will determine whether // a serif/sans-serif or monospace font is substituted // 2. The first font in each array will be the font which is substituted in circumstances as above // (Otherwise the order is irrelevant) // Use the mPDF font-family names i.e. lowercase and no spaces (after any translations in $fonttrans) // Always include "sans-serif", "serif" and "monospace" etc. $this->sans_fonts = array('msmincho','dejavusanscondensed', 'sans', 'sans-serif', 'cursive', 'fantasy', 'dejavusans', 'freesans', 'liberationsans', 'arial', 'helvetica', 'verdana', 'geneva', 'lucida', 'arialnarrow', 'arialblack', 'arialunicodems', 'franklin', 'franklingothicbook', 'tahoma', 'garuda', 'calibri', 'trebuchet', 'lucidagrande', 'microsoftsansserif', 'trebuchetms', 'lucidasansunicode', 'franklingothicmedium', 'albertusmedium', 'xbriyaz', 'albasuper', 'quillscript', 'humanist777', 'humanist777black', 'humanist777light', 'futura', 'hobo', 'segoeprint' ); |
ここまでの修正で追加したフォントがKC Editorで動作するテンプレート編集画面に現れ選択可能になり、プレビューなどでも問題なく表示されますが一つ問題があります。
表示するクライアントによっては特にここで指定したフォントがインストールされていない場合に別のフォントで表示される現象が発生します。
この現象はWindows端末では問題になりませんがアップル製品(iPadやiPhone)で発生します。
例えば詳細の「細」糸偏の下半分が中国語です。
板倉の両方の漢字が日本語ではありません。
これはリーダーで埋め込まれているフォントが適用されておらずsun-extaが指定され日本語フォントが機能していない状態です。
PDFのプロパティを確認するとエンコーディングが「ビルトイン」になっています。
アップル製品ではこの状態でトラブルが発生することがあるようです。
更にconfig_lang2fonts.phpにも次の修正を加えます。
1 2 3 4 5 6 |
修正前 return array($coreSuitable, $unifont); } 修正後 return array($coreSuitable, "msmincho"); } |
この修正により埋め込みサブセットのエンコーディングがビルトインからIdentity-H(横書き)に変更されています。
アップル製品をこれまで業務で使用する機会が少なく気にせず過ごしてきましたがCRM等不特定多数のアクセスというわけではありませんが様々な端末やOSから環境依存せず使用できるのがクラウド化のメリットでもありこのあたりの設定に注意を払うのはメリットがあります。
Identity-Hがきちんと指定されることでアップル製品でのPDF表示問題が解決されるとネット上の情報ではありますが一向に解決されませんでした。
その理由はこれまでの修正は正しい手順でしたが不要なフォントが埋め込まれておりそれらのフォントが悪さをしています。
そこでさらに次の修正を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
// $this->backupSubsFont = array('dejavusanscondensed','arialunicodems','sun-exta'); // this will recognise most scripts $this->backupSubsFont = array('msmincho'); $this->fontdata = array( "msmincho" => array(/* Japaense FFT */ 'R' => "msmincho.ttf", ), "msgothic" => array(/* Japaense FFT */ 'R' => "msgothic.ttf", ), // Add fonts to this array if they contain characters in the SIP or SMP Unicode planes // but you do not require them. This allows a more efficient form of subsetting to be used. $this->BMPonly = array( "msmincho", "dejavusanscondensed", "dejavusans", "dejavuserifcondensed", "dejavuserif", "dejavusansmono", ); // These next 3 arrays do two things: // 1. If a font referred to in HTML/CSS is not available to mPDF, these arrays will determine whether // a serif/sans-serif or monospace font is substituted // 2. The first font in each array will be the font which is substituted in circumstances as above // (Otherwise the order is irrelevant) // Use the mPDF font-family names i.e. lowercase and no spaces (after any translations in $fonttrans) // Always include "sans-serif", "serif" and "monospace" etc. $this->sans_fonts = array('msmincho', 'dejavusanscondensed', 'sans', 'sans-serif', 'cursive', 'fantasy', 'dejavusans', 'freesans', 'liberationsans', 'arial', 'helvetica', 'verdana', 'geneva', 'lucida', 'arialnarrow', 'arialblack', 'arialunicodems', 'franklin', 'franklingothicbook', 'tahoma', 'garuda', 'calibri', 'trebuchet', 'lucidagrande', 'microsoftsansserif', 'trebuchetms', 'lucidasansunicode', 'franklingothicmedium', 'albertusmedium', 'xbriyaz', 'albasuper', 'quillscript', 'humanist777', 'humanist777black', 'humanist777light', 'futura', 'hobo', 'segoeprint' ); $this->serif_fonts = array('msmincho', 'dejavuserifcondensed', 'serif', 'dejavuserif', 'freeserif', 'liberationserif', 'timesnewroman', 'times', 'centuryschoolbookl', 'palatinolinotype', 'centurygothic', 'bookmanoldstyle', 'bookantiqua', 'cyberbit', 'cambria', 'norasi', 'charis', 'palatino', 'constantia', 'georgia', 'albertus', 'xbzar', 'algerian', 'garamond', ); |
1 2 3 4 5 6 7 8 |
修正前 :lang("ja"), :lang("jpn") { /* Japanese HIRAGANA KATAKANA */ font-family: sun-exta, sjis; } 修正後 :lang("ja"), :lang("jpn") { /* Japanese HIRAGANA KATAKANA */ font-family: msmincho, sjis; } |
不要な埋め込みサブセットが無くなり更にエンコーディングもIentity-Hになりアップル製品で開いても日本語フォントで表示されるようになりました。