探してもほとんどみつからない。
PDFSharp、または、iTextSharp-LGPL 。
※PDFSharpはMITライセンス。
※iTextSharp 5はAGPLなのでライセンス的に使いづらいかも。
PDFSharpの日本語フォントの参考情報はこちら。
C#で日本語をPDFに出力する(PDFSharpを利用)
PDFSharp MigraDoc を使ってC#でPDF生成
FontResolverで指定すれば日本語フォントも使えるが、
改行がうまくいかないらしい。
TTFファイルを埋め込みリソースとして使うとき。
Embedded resourceみたいな指定でやる。
PDFSharpはGDIなのでサーバーではあまり良くないっぽい。
.NETの日本語対応のPDF出力ライブラリは有料を使うしかないかも。
簡単なのはPDFSharpで対応。
直接にTTFフォントのファイルパスを指定するのも可能。
C#で書いたコードを無くしたので、メモを書いておく。
改行が正しくいけばいいのにと思う。
Loading a Font with PdfSharp .Net Standard preview from Xamarin.Forms fails: No appropriate font found
参照サイトのをそのままでコピペして少し変更。
呼び出し元でFontResolver を呼び出す。
PdfSharp.Fonts.GlobalFontSettings.FontResolver = new FileFontResolver ();
この行でデフォルトのフォントを設定しない。
public string DefaultFontName => throw new NotImplementedException();
代わりに下記のreturnでデフォルトのフォントを指定する。
return PlatformFontResolver.ResolveTypeface("Arial", isBold, isItalic);
この箇所でフォントファイルのフルパスを入れる。
return new FontResolverInfo("Fonts/Verdana-BoldItalic.ttf");
public class FileFontResolver : IFontResolver // FontResolverBase { //public string DefaultFontName => throw new NotImplementedException(); public byte[] GetFont(string faceName) { using (var ms = new MemoryStream()) { using (var fs = File.Open(faceName, FileMode.Open)) { fs.CopyTo(ms); ms.Position = 0; return ms.ToArray(); } } } public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic) { if (familyName.Equals("Verdana", StringComparison.CurrentCultureIgnoreCase)) { if (isBold && isItalic) { return new FontResolverInfo("Fonts/Verdana-BoldItalic.ttf"); } else if (isBold) { return new FontResolverInfo("Fonts/Verdana-Bold.ttf"); } else if (isItalic) { return new FontResolverInfo("Fonts/Verdana-Italic.ttf"); } else { return new FontResolverInfo("Fonts/Verdana-Regular.ttf"); } } //return null; return PlatformFontResolver.ResolveTypeface("Arial", isBold, isItalic); } }
雑文ですみません。雑記的なブログです。
0 件のコメント:
コメントを投稿