VBScript : TCPDFで MSフォントが使えるようにする全自動スクリプト

  概要



重要

TCPDF に付属されている  Arial Uni CID0(arialunicid0) 日本語フォントは
非埋め込み型の日本語フォントで、Windows にフォント本体があります。

この定義ファイルが、他の日本語フォントを TCPDF に組み込むためのサンプルで、同様の手順で
昔ながらの MS フォントを手作業で組み込んでみましたが、結構面倒なので全て自動化しました。


自動化のプロセス

1) TTC 分解用のアプリケーションのダウンロード

	エクセルソフトさんからダウンロードして解凍し、それで実行します
	それにより、5つの TTF フォントができあがります
	( Windows ディリクトリより直接取り出しているので、本体はそのままです )

2) TCPDF の仕様に基づいて、定義ファイルを作成

	TCPDF に付属している ttf2ufm.exe で .ufm を作成します
	その .ufm と元の .ttf を使って .php ファイルを作成
	この処理には、TCPDF 付属の makefont.php を使用しますが、
	このファイルの3番目の引数として、0 を渡す事によって、非埋め込み型になります
	( README.TXT に記述されています )
	-----------------------------------------------------------------------
	$embedded : Set to false to not embed the font, true otherwise (default).
	-----------------------------------------------------------------------

3) README.TXT の記述に基づいて、出来上がった .php ファイルを編集

	-----------------------------------------------------------------------
	a) change the font type to: $type='cidfont0';
	b) set the default font width by adding the line: $dw=1000;
	c) remove the $enc, $file and $ctg variables definitions
	d) add one of the following blocks of text at the end of the file
	// Japanese
	$enc='UniJIS-UTF16-H';
	$cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'Japan1','Supplement'=>5);
	include(dirname(__FILE__).'/uni2cid_aj16.php');
	-----------------------------------------------------------------------

4) TCPDF のフォントディレクトリに保存

	-----------------------------------------------------------------------
	copy the .php file to the TCPDF fonts directory.
	-----------------------------------------------------------------------

※ TCPDF の仕様では個別にイタリックやボールド書体を用意しないとその機能は使えないようです
※ ですから、.php という定義ファイルは書体一つについて一つしか作成していません。
※ サンプルの arialunicid0 も一つしかありませんでした。
※ 小塚ゴシックPro Mや小塚明朝Pro M は、Adobe のフォントである為フォント本体はありません
  ( フォントの詳細に関しては専門外なので良く解りませんが、特殊な定義ファイルになっていました )




  TCPDF 用全自動スクリプト



このままでは使えませんので注意して下さい。

TCPDF のインストールディレクトリと、PHP のインストールディレクトリを
ご自分の環境にあわせて変更していただく必要があります



処理終了後のカレントのファイル群について

これらは、TCPDF の処理には必要ありませんので全て削除していただいて結構です

ブラウザでダウンロード

書体印字サンプル

元々利用可能なフォントに加えて、MSフォントの印字サンプルです

<JOB>
<COMMENT>
************************************************************
■ 1) BREAKTTC.EXE をダウンロードする
■ 2) TTC であるMSゴシックとMS明朝を分解する
■ 3) TCPDF に登録する

■ 著作権その他

このプログラムはフリーです。どうぞ自由に御使用ください。
著作権は作者である私(lightbox)が保有しています。
また、本ソフトを運用した結果については、作者は一切責任を
負えせんのでご了承ください。
************************************************************
</COMMENT>

<COMMENT>
************************************************************
 外部スクリプト定義
************************************************************
</COMMENT>
<SCRIPT
	language="VBScript"
	src="http://homepage2.nifty.com/lightbox/laylaClass.vbs">
</SCRIPT>

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://homepage2.nifty.com/lightbox/" )
Call laylaLoadFunction( "baseFunction.vbs" )
Call laylaLoadFunction( "toolFunction.vbs" )


' ***********************************************************
' 対象
' ***********************************************************
strTarget = "ttsdk.zip"
strTTCTargetMSG = "MSGOTHIC.TTC"
strTTCTargetMSM = "MSMINCHO.TTC"
' PHP で使用する時のパス
strTCPDF = "C:\user\web\tcpdf_5_5_001"
' PHP のパス
strPHP = "C:\php"

strFont1 = "msgothic"
strFont2 = "msgothicp"
strFont3 = "msgothicui"
strFont4 = "msmincho"
strFont5 = "msminchop"

' ***********************************************************
' Cscript.exe の実行
' ***********************************************************
Crun2 80

if not OkCancel( "BREAKTTC.EXE をダウンロードして .TTC を TTF に分解する処理を実行してもよろしいですか?" ) then
	Wscript.Quit
end if


' ***********************************************************
' ダウンロードする URL
' ***********************************************************
strDownloadPlace = "http://www.xlsoft.com/jp/products/indigorose/files/" & strTarget
ret = HTTPDownload( strDownloadPlace, TempDir & "\" & strTarget )
if not ret then
	Wscript.Echo ErrorMessage
	Wscript.Quit
end if

Wscript.Echo strDownloadPlace & " をダウンロードしました"

' ***********************************************************
' 解凍ソフトのダウンロード
' ***********************************************************
strDownloadPlace = "http://homepage2.nifty.com/lightbox/Lhasa.exe"
ret = HTTPDownload( strDownloadPlace, TempDir & "\Lhasa.exe" )
if not ret then
	Wscript.Echo ErrorMessage
	Wscript.Quit
end if

Wscript.Echo strDownloadPlace & " をダウンロードしました"

' ***********************************************************
' 解凍
' ***********************************************************
strCommand = Dd( TempDir & "\Lhasa.exe" ) & " -d- -a -q -f -e- " & Dd(TempDir & "\" & strTarget )
RunSync(strCommand)


' ***********************************************************
' フォント分解
' ***********************************************************
strFontsDir = GetSpecialFolder("Fonts")
strExe = Dd(TempDir & "\ttsdk\TTC\BREAKTTC.EXE")

GetFso 
GetWshShell
strCurrentDirectory = WshShell.CurrentDirectory

on error resume next
Fso.CreateFolder("FONT1")
Fso.CreateFolder("FONT2")
on error goto 0

WshShell.CurrentDirectory = strCurrentDirectory & "\FONT1"

strFont = Dd(strFontsDir & "\" & strTTCTargetMSG)
strCommand = strExe & " " & strFont
Wscript.Echo "フォント分解を開始します"
RunSync2(strCommand)
Wscript.Echo "フォント分解を終了しました"

WshShell.CurrentDirectory = strCurrentDirectory & "\FONT2"

strFont = Dd(strFontsDir & "\" & strTTCTargetMSM)
strCommand = strExe & " " & strFont
Wscript.Echo "フォント分解を開始します"
RunSync2(strCommand)
Wscript.Echo "フォント分解を終了しました"

WshShell.CurrentDirectory = strCurrentDirectory


' ***********************************************************
' フォント名を小文字に
' ***********************************************************
on error resume next
Set objFile = Fso.GetFile( strCurrentDirectory & "\FONT1\FONT00.TTF" )
objFile.Name = strFont1 & ".ttf"
Set objFile = Fso.GetFile( strCurrentDirectory & "\FONT1\FONT01.TTF" )
objFile.Name = strFont2 & ".ttf"
Set objFile = Fso.GetFile( strCurrentDirectory & "\FONT1\FONT02.TTF" )
objFile.Name = strFont3 & ".ttf"

Set objFile = Fso.GetFile( strCurrentDirectory & "\FONT2\FONT00.TTF" )
objFile.Name = strFont4 & ".ttf"
Set objFile = Fso.GetFile( strCurrentDirectory & "\FONT2\FONT01.TTF" )
objFile.Name = strFont5 & ".ttf"
on error goto 0



' ***********************************************************
' UFM 作成
' ***********************************************************
Call CreateUfm( "FONT1", strFont1 )
Call CreateUfm( "FONT1", strFont2 )
Call CreateUfm( "FONT1", strFont3 )
Call CreateUfm( "FONT2", strFont4 )
Call CreateUfm( "FONT2", strFont5 )


' ***********************************************************
' 編集
' ***********************************************************
EditPhp( strFont1 )
EditPhp( strFont2 )
EditPhp( strFont3 )
EditPhp( strFont4 )
EditPhp( strFont5 )


' ***********************************************************
' 処理終了
' ***********************************************************
MsgOk( "処理が終了しました   " )




' ***********************************************************
' 
' ***********************************************************
Function CreateUfm( strDir, str )

	strCommand = Dd(strTCPDF & "\tcpdf\fonts\utils\ttf2ufm.exe") & " -a -F " & Dd(strCurrentDirectory & "\" & strDir & "\" & str & ".ttf")
	RunSync(strCommand)
	strCommand = Dd(strPHP & "\php.exe") & " " & Dd(strTCPDF & _
		"\tcpdf\fonts\utils\makefont.php") & _
		" " & Dd(strCurrentDirectory & "\" & strDir & "\" & str & ".ttf") & _
		" " & Dd(strCurrentDirectory & "\" & strDir & "\" & str & ".ufm") & " 0"
	RunSync(strCommand)

End Function

Function EditPhp( str )

	Set regEx = New RegExp
	regEx.Pattern = "TrueTypeUnicode"
	regEx.IgnoreCase = True
	strFontPhp = GetTextFile(str & ".php")
	strFontPhp = regEx.Replace(strFontPhp, "cidfont0")

	regEx.Pattern = "\$dw=.+?;"
	strFontPhp = regEx.Replace(strFontPhp, "$dw=1000;")
	regEx.Pattern = "\$enc=.+?;"
	strFontPhp = regEx.Replace(strFontPhp, "$enc='UniJIS-UTF16-H';" & vbCrLf & _
	"$cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'Japan1','Supplement'=>5);" & vbCrLf & _
	"include(dirname(__FILE__).'/uni2cid_aj16.php');" )
	regEx.Pattern = "\$file=.+?;"
	strFontPhp = regEx.Replace(strFontPhp, "")
	regEx.Pattern = "\$ctg=.+?;"
	strFontPhp = regEx.Replace(strFontPhp, "")
	Call PutTextFile( str & ".php", strFontPhp )
	Call Fso.CopyFile( str & ".php", strTCPDF & "\tcpdf\fonts\" & str & ".php", True ) 

End Function


</SCRIPT>

</JOB>














   SQLの窓    create:2010/06/27  update:2018/02/18   管理者用(要ログイン)





フリーフォントWEBサービス

SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ