投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/10/4 12:18:39
> 特定の文字列をバーコードフォントでExcelのセル出力したい。

Excel 文書に、「OS にインストールされていないフォント」が指定されていた場合、
そのフォントは別のフォントで代替されてしまい、正しくレンダリングされません。
これは Excel ファイルが、フォントの埋め込みをサポートしていないためです。
https://excel.tips.net/T001969_Embedding_Fonts_in_Excel.html

ゆえに、バーコードフォントを採用するのであれば、
文書を開く予定の PC すべてに、そのフォントを
事前にインストールしておかねばならない、ということです。

これはバーコードフォントに限った話ではありません。
フォントの代わりに、バーコード生成用の ActiveX コントロールを用いる場合も同様で、
各PC にそのコントロールがレジストされていなければならないことになります。

環境依存性を減らすためには、バーコードを画像化して埋め込むことをお奨めします。

ただしこの時、バーコードフォントからバーコード画像を生成することはお奨めしません。
TextRenderer.DrawText や Grapchis.DrawString 経由だと、必ずしも
十分な品質が得られない可能性があるというのがその理由です。
また、そもそもバーコードフォント側がそのような使い方を想定しておらず、
ライセンス的に許諾されてないケースもあります。


バーコード画像を動的に生成する方法としては、無償/有償を含めて、
VBA ソースや VB.NET ソース、あるいはコンパイル済みの DLL などが
各種ありますので、そうしたものを探してきて利用するのが良いでしょう。
https://www.vector.co.jp/soft/win95/writing/se333820.html
https://www.codeproject.com/Articles/1033002/Code-Barcodes-in-VB-NET-and-Csharp
http://www.atmarkit.co.jp/ait/articles/1803/14/news020.html


> ただし、バーコードフォントは、ソリューションプロジェクト内の「font」フォルダ内に格納し、
> Excel出力プログラムはそれを使うこと。
> ※フォントファイルをパソコンにインストールすることは考慮しません。

インストールすることを考慮しない、というのは、
「インストールしたくない」という意味でしょうか。それとも
「インストールしても構わないが、事前にインストールされてはいない」
といった意味でしょうか。

インストールして良いなら話が早いのですが、インストールせずに使う場合、
プライベートフォントとしての利用になります。

自アプリだけで使う場合は、PrivateFontCollection を使えば済むのですが、
他アプリ(今回は Excel)で利用する場合にはプライベートフォントは使えません。
(Excel ファイルを開く側の PC に、フォントファイルをインストールするのなら OK ですが)

Dim ttfPath As String = System.IO.Path.Combine(My.Application.Info.DirectoryPath, "fon""CODE39.ttf")
Dim pfc As New System.Drawing.Text.PrivateFontCollection()
pfc.AddFontFile(ttfPath)
Me.Label1.AutoSize = True
Me.Label1.Font = New System.Drawing.Font(pfc.Families(0), 48.0F)
Me.Label1.Text = "*VISUAL BASIC*"