質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Q&A

解決済

1回答

2524閲覧

XGraphics.DrawStringでサロゲートペアを表示したい。

GWks

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

0グッド

0クリップ

投稿2021/12/13 06:24

編集2021/12/13 06:27

前提・実現したいこと

C#で納品書作成システム(.PDF)を作っています。

XGraphics.DrawStringでサロゲートペア(????)を表示したい。
現状、出力すると□×が表示されます。

該当のソースコード

C#

1 // 指定したPDFドキュメントを編集する 2 PdfDocument editPDF = PdfReader.Open(@"../Template/InvoiceTemplate.pdf", PdfDocumentOpenMode.Modify); 3 4 if (GlobalFontSettings.FontResolver == null) 5 { 6 // フォントリゾルバーのグローバル登録 7 GlobalFontSettings.FontResolver = new FileFontResolver(); 8 } 9 10 // 描画するためにXGraphicsオブジェクトを取得 11 XGraphics gfx = XGraphics.FromPdfPage(editPDF.Pages[0]); 12 13 // テキストを描画 14 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 15 16 // 特殊文字 17 XFont 特殊文字フォント = new XFont("NotoSansJP", 20, XFontStyle.Regular); 18 gfx.DrawString("????", 特殊文字フォント, XBrushes.Black, new XRect(10, 10, editPDF.Pages[0].Width, editPDF.Pages[0].Height), XStringFormats.CenterLeft);

試したこと

テキストでは表示されることを確認。
フォントはサロゲートペア対応のNotoSansJPを使用。

補足情報(FW/ツールのバージョンなど)

.Netフレームワーク4.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

フォントの表示っていろいろ複雑なことになっているので、まずは調査から行ったほうがいいと思います。

(1) ツールはサロゲートペアに対応していますか?

XGraphics.DrawString って、PDFsharp ?
ざっと検索したところ以下をみつけました。

「Surrogate characters not working #63」
https://github.com/empira/PDFsharp/issues/63

.NET Core で対応したよっていうコメントがありますが、.NET Framework は未対応かもしれません。

(2) 出力したい文字が使用しているフォントに含まれていますか?

Windows にはフォントリンクという機能があって、選択したフォントに無い文字も表示できたります。

「なぜtahomaでハングルが表示できるのか?」
http://una.soragoto.net/topics/17.html

ディスプレイに表示、プリンタに印字できたからといっても、その文字がそのフォントに含まれているとは限りません。
ツールが対応できていないと PDF にはうまく表示できません。

(3) IVS(異体字セレクタ) に対応しているかってのもあります。

「IVD/IVSとは」
https://moji.or.jp/mojikiban/aboutivs/

「Unicode IVS対応製品」
https://moji.or.jp/products/

結局ツールが対応していないと PDF に特殊な文字を埋め込むことはできません。

そういえば、Cube PDF という PDF プリンタは、うまく対応していたなぁ・・・

なかなか大変なので、まずはツールの選定からですね。

投稿2021/12/13 08:10

編集2021/12/13 08:15
KOZ6.0

総合スコア2707

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GWks

2021/12/13 08:20

ご回答ありがとうございます。 説明不足申し訳ございません。 出力ツールは、PDFsharpです。 無償かつライセンスが複雑でないものがPDFsharpでしたので採用しました。 確かに、そもそもツールが対応しているのかを見落としていました。 いただいた回答の.NET Framework は対応しているのかどうかの部分を調査してみます。
KOZ6.0

2021/12/13 08:38

TN8001 さん、ありがとうございます。そうでしたか、残念。 GrapeCity の ActiveReports は Professional 版で対応しています。 実はこれの Standard 版をつかっていてひっかかたんでいろいろ調べたのです。
TN8001

2021/12/13 08:41

いや自動翻訳しただけなんで「そうだ」と自信があるわけではありません^^; わたしもググっただけで何の確認もしておりません^^;
GWks

2021/12/13 08:43

すみません。 「個人で対応版作ったけど本体には取り込まれてないよ」の本体はどういう意味でしょうか?
KOZ6.0

2021/12/13 08:52

本体ってのは PDFsharp そのものってことです。
TN8001

2021/12/13 08:56

> 本体はどういう意味でしょうか? empira Softwareというのか、PDFsharp-Teamってことになっているのかよくわかりませんが、 nugetや[Home of PDFsharp and MigraDoc Foundation - PDFsharp & MigraDoc](http://www.pdfsharp.net/ ここで配布されているものです。 GitHubでMITとしてソースが公開されているので、個人でフォークして改良することもできます。 本家の改善が遅いので(フリーのものにそこまでリソースを割けないというのは理解できます)、個人で対応してしまったということだと思います。 なお、私は動作確認はしていません。
GWks

2021/12/14 01:14

ご説明ありがとうございます。 対応版を引っ張ってこれば実現可能ということですか?
KOZ6.0

2021/12/14 01:15

>対応版を引っ張ってこれば実現可能ということですか? それを調べるのはあなたの仕事です。
GWks

2021/12/14 01:58

かしこまりました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問