SQLの窓

2018年12月07日


TCPDF を使用してフリーフォントを選択して『FAX 送信案内』の PDF をそのフォントで出力します

とりあえずテストとして『トガリテ』というフリーフォントを使用してみると、Light でいい感じでした。フォントはライセンスを再度確認して追加していきます。
( TCPDF のサンプル作るのに比較的作るのが楽な FAX送信案内で試しました )

※ 出力した PDF はご自由にお使い下さい。

▼ 実行

▼ 実行




JavaScript での URL の呼び出しは jQuery で以下のようにして行っています。
<select id="fonts">
	<option value="togalite-black" >トガリテ Black</option>
	<option value="togalite-heavy" >トガリテ Heavy</option>
	<option value="togalite-bold" >トガリテ Bold</option>
	<option value="togalite-medium" >トガリテ Medium</option>
	<option value="togalite-regular" >トガリテ Regular</option>
	<option value="togalite-light" >トガリテ Light</option>
</select>
<input type="button" value="実行" id="fax_guide">

<script>

	$("#fax_guide").on("click", function(){
		var download = $("<a></a>").appendTo("body").css("display","none");
		download.prop({"href" : "http://webapp.winofsql.jp/phplib/fax_guide.php?font=" + $("#fonts").val(), "target": "_blank" });
		download.get(0).click();
		download.remove();
	});

</script>

トガリテのフォント使用許諾範囲
FZイモケンピ(Font Zone 108) Faq
fub工房 注意事項
Tフォント利用規定
ニコモジ+(プラス)
851チカラヅヨク
Oradano明朝フォント
ラノベPOP
おつとめフォント
GN-キルゴU-NA
自家製 Rounded M+ フォント ライセンス
源真ゴシック (げんしんゴシック)



posted by lightbox at 2018-12-07 16:13 | PHP + PDF | このブログの読者になる | 更新情報をチェックする

2018年12月02日


TCPDF をダウンロードして、フリーフォントを埋め込み型で使用する方法


2018/11/30 時点で 6.2.26
2016/01/13 時点で 6_2_12
2014/05/22 時点で 6_0_080
さくらサーバでは、php.ini で memory_limit = 256M で動作しています(日本語フォントが大きくなっていました )
2013/09/11 時点で 6_0_025TCPDF をダウンロードして、Windows の任意のフォルダで TCPDF 同梱のサンプルを実行する為の設定』の続きです。

少し昔に比べると格段に専用フォントを作成するのが楽になっています。以前はツールアプリケーションをいろいろ実行した後手作業とかもあったのですが、今はその作業を行う処理を TCPDF そのもの(tcpdf_addfont.php)にさせるようになっていて、コマンドプロンプトから php で処理できます。
埋め込み : c:\php\php tcpdf_addfont.php -t TrueTypeUnicode -f 32 -i hc-poo5.ttf
非埋め込み : c:\php\php tcpdf_addfont.php -t CID0JP -f 32 -i hc-poo5.ttf

-t は省略すると フォントファイルをチェックして通常は TrueTypeUnicode になり、-f は省略すると 32 です。 ※ -b を指定すると、character bounding box の情報を php のフォントファイルに書き込みます( If true includes the character bounding box information on the php font file. )
動的にフォントファイルを作成する addTTFfont メソッドの使い方 以下のようにして使用できますが、一度作成すると無駄なコードとなる上に ttf ファイルをサーバに置く管理になるので最初に TCPDF 用のフォントファイルを作成しておいて使用するのが現実的です。
// フォントを動的に作成して使用する方法( 作成するのは最初だけ )
// ※ 32 はデフォルトですが、メソッドの都合上省略しない
// ※ フォントフォルダのパスを / で終了させる
$fontname = TCPDF_FONTS::addTTFfont("hc-poo5.ttf", "TrueTypeUnicode", "", 32, "C:\\httpd142p\\pdf_format\\tcpdf\\fonts/");

フリーフォントは、通常システムに無いですから、『埋め込み』で処理する事になります。但しそのぶん PDF が大きくなってしまいますが、PC の環境に依存せず表示されます。
フリーフォントによっては崩れて使え無いですが、現在デフォルトで『部分埋込($font_subsetting)』により使用している文字のみ埋め込むようになっています( 全て埋め込む場合は $pdf->setFontSubsetting(false); を実行)
部分埋め込み : 84k
全て埋め込み : 4224k
	/**
	 * Boolean flag: if true enables font subsetting by default.
	 * @protected
	 * @since 5.3.002 (2010-06-07)
	 */
	protected $font_subsetting = true;

非埋め込み型は、Windows(等) に最初からあるフォントを対象とし、PDF のサイズを小さくする事が主な目的となります。

こちらから、実際に『HCP丸ゴシック(蓬莱和多流)』と言うフリーフォントを使ったPDF がご覧いただけます(部分埋め込み)。


この PDF は、サンプルの38番を書き換えたもので、オリジナルよりさらにシンプルになっています。
(部分埋め込み型です)
<?php
require_once('tcpdf_include.php');

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

$pdf->SetFont('hcpoo5', '', 20);
$pdf->AddPage();

$txt = 'example_038.pdfは非埋め込み型フォントのサンプルですが、hcpoo5はフリーフォントを埋め込み型で変換したものです

';
$pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0);

$pdf->SetFont('hcpoo5', '', 14);
$txt = '埋め込み	: c:\php\php tcpdf_addfont.php -i hc-poo5.ttf
非埋め込み	: c:\php\php tcpdf_addfont.php -t CID0JP -i hc-poo5.ttf

';
$pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0);

$pdf->SetFont('hcpoo5', '', 40);

$txt = 'こんにちは世界あいうえお漢字表示';
for( $i = 0; $i < 4; $i++ ) {
	$txt .= $txt;
}

$pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0);

// ---------------------------------------------------------

//Close and output PDF document
$pdf->Output('example_038.pdf', 'I');

TCPDF 用フォントの作成

作成されたフォントは、fonts フォルダにコピーされますが、再作成する場合はいったん削除します。埋め込み型では、3つ作成されますが、非埋め込み型だと1つです。
>c:\php\php tcpdf_addfont.php -t CID0JP -i hc-poo5.ttf

>>> Converting fonts for TCPDF:
*** Output dir set to C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf/fonts/
+++ OK   : C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf\tools\hc-poo5.ttf added as
hcpoo5
>>> Process successfully completed!


>c:\php\php tcpdf_addfont.php -i hc-poo5.ttf

>>> Converting fonts for TCPDF:
*** Output dir set to C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf/fonts/
+++ OK   : C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf\tools\hc-poo5.ttf added as
hcpoo5
>>> Process successfully completed!
( 上が非埋め込み、下が埋め込み )

非埋め込み型フォント使用時の代替フォントについて

TCPDF 内には cid0jp という非埋め込み型のフォントが用意されていますが、実際に PC にインストールされているフォントを内部では指定していません。なので、表示は代替フォントで表示されます。ただ、代替フォントについて詳細な情報はあまりありません。Adobe のドキュメントでのみ( 代替フォント )という言葉を見る事ができました。しかし、具体的にどのフォントを使うかまでは確認できていません。

こちらの環境(Windows)では、非埋め込み型フォントを使ってそのフォントが無い場合は代替で MSゴシックまたはMS明朝(たぶん)が使われていました
再度確認してみると、Chrome PDF Viewer で MS明朝(らしい)。Firefox 内臓ビュアーでMSゴシック
Firefox は、ブラウザの規定のフォントが使われていたので変更可能でした
Chrome は、pdf.dll の中に『Arial Unicode MS    MingLiU SimSun  MS Mincho』という文字列があったので、MS明朝が優先されているような気がします( 変更方法は不明 )

cid0jp について補足

$name='cid0jp'; 部分の cid0jp を日本語で置き換えて SHIFT_JIS で保存すると、英数字の文字ピッチは狂うと思いますが、インストールされているフォントであれば一応の表示が可能です。





漢字等にはほぼ影響出ないとは思いますが、正しいピッチで表示するにはオリジナルのフォントから非埋め込み用フォントを作成して登録する必要があります


※ Office で使用可能なフォントに関しては英語名が使用できませんでした


関連する記事

タグ:PHP TCPDF PDF
posted by lightbox at 2018-12-02 11:44 | PHP + PDF | このブログの読者になる | 更新情報をチェックする

2018年11月30日


TCPDF をダウンロードして、Windows の任意のフォルダで TCPDF 同梱のサンプルを実行する為の設定


2018/11/30 時点で 6.2.26
2016/01/13 時点で 6_2_12
2014/05/22 時点で 6_0_080
さくらサーバでは、php.ini で memory_limit = 256M で動作しています(日本語フォントが大きくなっていました )
2013/09/11 時点で 6_0_025

実際に一番面倒なのはフォントの用意ですが、とにかく動かない事には話にならないので。

テスト環境

❶ Windows10 64ビット + AN HTTPDTCPDF

テスト内容
TCPDF-master.zip を解凍すると、TCPDF-master\examples というフォルダがあり、そこにサンプルが沢山ありますが、それを他のフォルダでも同様に動作させます。
手順 ❶ example フォルダを全て 任意のフォルダにコピー( アプリの実行環境になります ) ❷ そのフォルダを AN HTTPD で、PHP が動作するようにする ( テストした php は、PHP 5.6.35 ) ❸ tcpdf_include.php を以下のように書き換える ( ダウンロードして解凍してそのまま使っています )
<?php
$path = "C:\\Users\\lightbox\\Downloads\\TCPDF-master";
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once('config/tcpdf_config_alt.php');
require_once('tcpdf.php');
?>


フォントの追加は、tcpdf_addfont.php で作成したフォントファイルを fonts フォルダにコピーします。
tcpdf.php は、TCPDF のコアファイルなので、解凍したフォルダの中にある必要があります

補足事項

そのまま『さくらインターネット』にアップロードして、パス(C:\\Users\\lightbox\\Downloads\\TCPDF-master)を /home からのパスに変更したら動作しました。
インターネットでテストすると重いので Windows でテストしてからアップロードします。
また、フォントも大きいのでローカルでテストすべきです。
TCPDF で使用されるフォントは(通常)埋め込みフォントになるので、出来上がった PDF も大きくなります。
埋め込みフォントは環境に依存せず文字が正しく表示されます
TCPDF内より使用可能な非埋め込みフォントは、cid0jp 内のフォント名を変更して使用可能です(ツールを使って作成すると半角の文字ピッチ等が正確に反映されます)。また、そのフォントは PC(Windows) にインストールされている必要があります。
フリーフォントを埋め込みするには、ツールで個別に専用データを作成する必要があります。


関連する記事

タグ:PHP PDF TCPDF
posted by lightbox at 2018-11-30 16:34 | PHP + PDF | このブログの読者になる | 更新情報をチェックする

Google Chrome + Windows10 + PDF ビューア + 非埋込みフォント で正しいフォントが表示されない

Windows7 の Google Chrome では正しく表示される事を確認したのですが、一般的( Windows10 ) には、非埋込みフォントの場合 Google Chrome が勝手にフォントを選択するという現象が一年前くらいに散見されます。結局その回避方法としては、HTML5 で表示しなおすという拡張機能で対応していました。(MS 明朝指定してゴシックになったので気が付きました / TCPDF で出力して Acrobat Reader や Edge では正しく表示されました)

PDF Viewer

確かに、GET メソッド( 通常のリンク )で表示すると、Google Chrome 拡張の URL にリダイレクトされて正しく表示されるのですが、POST メソッドでは対応していませんでした。また、デフォルトでは制限があるので『詳細』のページで『シークレット モードでの実行を許可する』と『ファイルの URL へのアクセスを許可する』を ON にする必要があります

注意 : 印刷が PDF 経由では無いので厳密には正しく印刷されませんでした( 線が重なった部分でPDF は同じ場所なら単純に一本ですが、HTML5 では重なった部分が微妙で、文字も若干アンチエイリアスされているようで小さい文字だとボケていました )






拡張機能そのもののオプション





posted by lightbox at 2018-11-30 12:27 | Google Chrome | このブログの読者になる | 更新情報をチェックする

2018年11月23日


タイトルの背景画像を CSS でスクロールさせて雪を降らせ、after を使って画像で装飾する

背景がスクロール
寒くなって来たら
背景がスクロール
クリスマスも近いですね ▼ 背景画像 : 幅 378, 高さ 223 概要 ⭐ 画像はシームレスです。斜めの角度は画像サイズに依存します。 ⭐ 100% の値をマイナスにすれば舞い上がります。 ⭐ 本体の position: relative; は、after で postion:absolute を設定するのに必要です。 ( div を一つ外側に追加してそこに設定してもいいとは思います ) ⭐ keyframes の終了(100%) は、画像のサイズである必要があります。 ⭐ 速さは、8s の 8 を変更します。 ⭐ after の横の位置合わせは、本体基準で right です。
<style>
.scroll_background {
	margin-top: 50px;
	padding: 10px;
	width:400px;
	background: url("https://lh3.googleusercontent.com/-GU0B2rJdhwU/W_dvZv5LSgI/AAAAAAAAtgM/7n7s1T6JVPkX-BaEKhui0ORu49bLivmxQCHMYBhgL/s378/pat2.jpg");
	animation: scroll_snow 8s linear infinite;
	position: relative;	/* after 用 */
}
@keyframes scroll_snow {
	0% { background-position: 0px 0px; }
	100% { background-position: 378px 223px; }
}

.scroll_background::after {
	background: url(https://pro-300.sakura.ne.jp/white/wp-content/themes/pro-1/cr2.png) left center no-repeat;
	background-size: 150px auto;
	content: '';
	position: absolute;
	right:0px;
	top: -40px;
	width: 150px;
	height: 70px;
}
</style>

<pre>
<div class="scroll_background">背景がスクロール</div>

寒くなって来たら
<div class="scroll_background">背景がスクロール</div>

クリスマスも近いですね
</pre>




posted by lightbox at 2018-11-23 12:47 | HTML / CSS | このブログの読者になる | 更新情報をチェックする

2018年11月21日


Excel でガントチャートを作成するテンプレート : 開始日と日数(工数)を入力

ダウンロード
(マクロ使用分:スケジュール_ガントチャート_カレンダー.xlsm と 非使用分:スケジュール_ガントチャート.xlsx)

WBSガントチャートをExcelで作ってみた というページからダウンロードできる Excel はとても使いやすく( 2か月の表示  )単純にできていました。( 2013年08月30日 で更新が止まっています )

さっそく使ってみましたが、少し問題点があったので『修正』と『追加仕様』を行いました。

1) Workday 関数の使い方が、金曜で日数が終わった場合に土日を含んだ完了日になっていたので修正
2) 日付の入力が、手入力なので VBA の Form + DTPicker でカレンダー入力を可能にした



1) の修正は以下のページを参考にしました
Excel2010:土日なら前の平日を返す(WORKDAY関数・WEEKDAY関数 )

2) の追加仕様は、Form と DTPicker を使用しましたが、VBA におけるイベント処理を詳細にコントロールする術が無く、Form で何をしても選択されている日付をセルに転送するようになっています。

ただ、対象列以外でカレンダーボタンをクリックした場合はエラーにしています。

また、Formを開いた時に DTPicker を開かせる為に SendKeys を使用しているのですが、Numlock が OFF になるバグがあったので、以下のページのコードを利用して対処しました。
VBAの「Sendkeys」についての質問です。


UserForm1
Private Sub DTPicker1_CloseUp()

    ActiveCell.Value = DTPicker1.Value
    
    Unload UserForm1

End Sub

Private Sub UserForm_Initialize()
    
    Call saveNumLock
    
    SendKeys ("%{DOWN}")
    
    Call numLockCheck

End Sub

Module1
Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)

Private Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long

Const VK_NUMLOCK = &H90 '「NumLock」キー
Const KEYEVENTF_EXTENDEDKEY = &H1 'キーを押す
Const KEYEVENTF_KEYUP = &H2 'キーを放す

Dim NumLockState As Boolean
Dim keys(0 To 255) As Byte

Sub カレンダー参照_Click()

    Dim no
    
    no = ActiveCell.Column
    If no <> 5 Then
    
        MsgBox ("開始日のセルを選択してください")
        Exit Sub
    End If


    UserForm1.Show
    
End Sub

Sub saveNumLock()
    
    GetKeyboardState keys(0)
    NumLockState = keys(VK_NUMLOCK)

End Sub

Sub numLockCheck()

  '「NumLock」キーがオンだった場合はオンにする。
  If NumLockState Then
    'キーを押す
    keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
    'キーを放す
    keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
  End If
End Sub



使用方法
開始と休日設定に、開始日と休日を設定します(土曜と日曜は休日なのでそれ以外の非稼働日です)

ガントチャートの開始日に日付を入力して、工数に日数を入力します

日付は、月から入力すると現在の年になります

現在以外の年を使用する場合は、18/12/1 のように年の下2桁を最初に入力します

カレンダーボタンで日付を参照できます

カレンダーはただ閉じても日付は選択されます
posted by lightbox at 2018-11-21 15:16 | Microsoft Office | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり