久し振りにPDFSharpを使う機会があったので、メモ。
(1)NuGetにあった。
Visual Studio 2015 を使っているのだけど、NuGetで「PDF Sharp」を検索すると、取得できた。
(2)使えるフォントが減っていた。
前は、日本語としては「游明朝」、「游ゴシック」が使えたのだけど、今回「Error while parsing an OpenType font.」エラーが発生して、「游ゴシック」が使えなかった。
それではと思い立って、以下を書いてテストしたところ、日本語フォントは、ぱっと見たところ「游明朝」以外は全滅。
また、「HG丸ゴシックM - PRO」などは、エラーにはならないけど日本語は文字化けで使えず。
c#
protected void Button1_Command(object sender, CommandEventArgs e)
{
using(PdfDocument document = new PdfDocument())
{
PdfPage page = document.AddPage();
page.Size = PageSize.A4; //用紙の大きさ
page.Orientation = PageOrientation.Landscape; //用紙の向き
XGraphics graphics = XGraphics.FromPdfPage(page);
var sb = new StringBuilder();
System.Drawing.Text.InstalledFontCollection ifc =
new System.Drawing.Text.InstalledFontCollection();
FontFamily[] ffs = ifc.Families;
foreach(FontFamily ff in ffs)
{
string buf = "";
try
{
using(Font fnt = new Font(ff, 8))
{
buf = fnt.Name;
var pdf_ja_font_options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);
var pdf_ja_font = new XFont(buf, 12, XFontStyle.Regular, pdf_ja_font_options);
graphics.DrawString("こんにちわ世界", pdf_ja_font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height), XStringFormats.Center);
}
}
catch(Exception ex)
{
buf += ":" + ex.Message;
}
sb.AppendFormat("{0}\n", buf);
}
string file = @"C:\work\フォント調査.txt";
using(StreamWriter sw = new StreamWriter(file, true, Encoding.Default))
{
sw.Write(sb.ToString());
}
}
}
IPAexフォントは、明朝、ゴシック共に正しく表示されたっぽいので、これを埋め込むことにする。
https://ja.osdn.net/projects/ipafonts/
Noto Fontsも使えそうなのだけど、埋め込むとPDFのサイズがすごいことになるので
(やり方が悪いのかも知れないのだけれど600倍以上になった)、今回はパス。
使えるフォントがとても限られるので、ちょっと不安。