【Aspose.Cells for .Net】 外字を埋め込むと、他フォントにも外字が適用されてしまう

Aspose.Cells for .Net で、ExcelファイルをPDFファイルへ変換する時、外字を埋め込もうとしています。
外字はMSゴシック、MS Pゴシックに割り付けてあります。
Excel上には、他のフォントを指定した文字も記入しています。
これを、Aspose.Cell でPDFファイルへ変換すると、他フォントの外字範囲の文字コードも、MSゴシックに変わってしまいます。

外字埋め込みコード
Dim sourceMemory = New MemoryFontSource(System.IO.File.ReadAllBytes(gaijiFolder & “EUDC.TTE”))
FontConfigs.SetFontSources({sourceMemory})

Dim PdfSaveOptions As New Aspose.Cells.PdfSaveOptions
PdfSaveOptions.EmbedStandardWindowsFonts = True

Dim wb As New Workbook(tempExcelPath)
wb.Save(tempPdPath, PdfSaveOptions)

お気づきの点をご教示いただければ幸いです
Aspose.Cells for .Net 22.2.0.0 を使用しています。

===
下記ファイルを添付します。Aspose.Cells で、DestFileByExcel.pdf と同じように変換する方法を知りたいです。
SrcFile.xlsx(Excelで作成したファイル)
DestFileByExcel.pdf(Excelのエクスポート機能で生成したPDF)
DestFileByAsposeCells.pdf(Aspose.Cellsで変換したPDF)tempfile.zip (117.8 KB)

@wbys,

サンプルファイルありがとうございます。
あなたの問題を少し評価しました。 問題を正確に理解できませんでした。 問題を詳細に強調するために、いくつかの比較スクリーンショットを共有していただけますか。 さらに、おそらくフォントに使用した「EUDC.TTE」ファイルを圧縮して共有してください。 すぐに問題を確認いたします。

gaijitest.zip (495.4 キロバイト)
早々のご対応ありがとうございます。
キャプチャ画像、及び、外字ファイル(EUDC.TTE)を添付しますので、
どのようにコードを修正すればよいかご助言をお願いします。

大変恐縮ですが、別件の都合で、レスポンスは来週後半に確認いたします。

DestFileByAspoceCells.png (59.8 キロバイト)
DestFileByExcel.png (55.8 キロバイト)
SrcExcel.png (102.5 キロバイト)

@wbys,

スクリーンショットと外字 (EUDC.TTE) ファイルをありがとう。

あなたの問題について、ID「CELLSNET-52343」のチケットを記録しました。 外部文字を埋め込む場合、Excel から PDF への変換で外部文字が他のフォントに適用される理由を詳しく見てみましょう。 更新があり次第、こちらでお知らせします。

@wbys

セル C5, C6, F5, F6 および C13, C14, F13, F14 の文字は 0xE000, 0xE001, 0xE002, 0xE003 です。EUDC.TTE が他のフォントではなくフォント MS ゴシック および MS Pゴシック にのみ使用されることを知る方法

ご連絡ありがとうございます。

EUDC.TTE が他のフォントではなくフォント MS ゴシック および MS Pゴシック にのみ使用されることを知る方法

レジストリエディタで、HKEY_CURRENT_USER\EUDC\932 の画面キャプチャを添付します。
MSゴシック、MS Pゴシックにだけ、別のEUDC.TTE を適用しています。

eudcgaiji.png (21.8 キロバイト)

@wbys

現在、指定されたフォントがテキストを表示できない場合、Aspose.Cells は最初にすべてのフォントに対して EUDC という名前のフォントを試します。 これは、レジスターで定義された SystemDefaultEUDCFont のように機能します。

レジスターの構成として機能させるには、フォント ファイル EUDC.TTE を変更して、フォント ファミリ名を EUDC から別の名前に変更してください。 MSPGothicEUDC. 次に、最初に次のコードを追加します。

FontConfigs.SetFontSubstitutes("MS ゴシック", new string[] {"MSPGothicEUDC" });
FontConfigs.SetFontSubstitutes("MS Pゴシック", new string[] { "MSPGothicEUDC" });

ご回答ありがとうございます。

以下の通り修正しましたが、症状は改善しませんでした。
MS ゴシック、MS Pゴシック以外のフォントで、同じ外字を表示しています。

Dim gaijiFileName As String = “MSPGothicEUDC”
FontConfigs.SetFontFolder(gaijiFolder, False)
FontConfigs.SetFontSubstitutes(“MS ゴシック”, {gaijiFileName})
FontConfigs.SetFontSubstitutes(“MS Pゴシック”, {gaijiFileName})

レジストリエディタのスクリーンショットを添付します。
regedit.png (22.9 キロバイト)

また、修正後に、Aspose.Cells で出力したPDFを添付します。
DestFileByAspoceCells1130.pdf (151.0 キロバイト)

他に修正すべき処理がありましたら、ご指摘をお願いいたします。

@wbys

フォント ファイル内のフォント ファミリ名を変更するには、何らかのフォント ツールを使用する必要があります。
テスト用に共有したフォントファイルMSPGothicEUDC.TTEをお試しください。 フォントファイルEUDC.TTEのフォントファミリ名をMSPGothicEUDCに修正しました。

MSPGothicEUDC.zip (252.0 KB)

添付いただいたMSPGothicEUDC.TTEを、所定のフォルダに配置し、コードを下記の通り修正しましたが、改善しませんでした。

FontConfigs.SetFontFolder(gaijiFolder, True)
FontConfigs.SetFontSubstitutes(“MS ゴシック”, {“MSPGothicEUDC”})
FontConfigs.SetFontSubstitutes(“MS Pゴシック”, {“MSPGothicEUDC”})

引き続きご支援よろしくお願いいたします。

@wbys,

詳細をありがとう。

問題が解決されていないことをお詫び申し上げます。 既存のチケットに対する調査結果を記録しました。 すぐに調査します。

@wbys

私が共有した「MSPGothicEUDC.TTE」ファイルを除くすべての TTE ファイルをフォルダーから削除して、出力された pdf ファイルに違いがあるかどうかを確認してください。

当該フォルダには、TTEファイルは、MSPGothicEUDC.TTE だけです。他に、TTEファイルは存在しません。

@wbys

FontConfigs.SetFontFolder(gaijiFolder, True) 行にコメントを付けて、出力された pdf ファイルを共有してください。

'FontConfigs.SetFontFolder(gaijiFolder, True)
FontConfigs.SetFontSubstitutes("MS ゴシック", {"MSPGothicEUDC"})
FontConfigs.SetFontSubstitutes("MS Pゴシック", {"MSPGothicEUDC"})

ご指摘の行をコメントアウトしました。出力結果に変化はありません。
Dim gaijiFileName As String = “MSPGothicEUDC”
'FontConfigs.SetFontFolder(gaijiFolder, True)
FontConfigs.SetFontSubstitutes(“MS ゴシック”, {gaijiFileName})
FontConfigs.SetFontSubstitutes(“MS Pゴシック”, {gaijiFileName})

結果を添付します。
Excel.xlsx(元のExcelファイル)
PdfByAspose.pdf(Aspose.CellsでPDF作成)
PdfByExcel.pdf(Excelのエクスポート機能でPDF作成)

testresult.zip (117.5 キロバイト)

@wbys

前述したように、指定されたフォントがテキストを表示できない場合、Aspose.Cells は最初に EUDC という名前のフォントをチェックします。 あなたが共有した結果ファイルから、Aspose.Cells によって読み込まれる EUDC という名前の別のフォントがあるようです。

また、リファレンス では、EUDC の仕組みについて説明しています。 しかし、あなたのようにレジスターを構成した後、Excel であなたと同じテキストを取得できません。

Excel_text_display.png (77.6 KB)

ご報告内容、確認しました。
私のパソコンでは「指定されたフォントがテキストを表示できない場合」を再現できていないため、
別のパソコンで試した後、改めてご報告するようにします。

なお、フォントと外字ファイルとの関連付けは、eudcedit.exeを使用しています。
レジストリを直接構成した場合と同じ結果になるかは未検証です。

前回とは異なるパソコンで、外字の関連付けからやり直しました。
関連付けは、Windows標準の eudc.exe を使用しています。
今回は、外字を関連付ける前の状態もキャプチャしました。
ご確認よろしくお願い致します。

<外字ファイル関連付け前>
レジストリ(1.png)
Excel表示(2.png)
ExcelでエクスポートしたPDF(3.png)

<外字ファイルをフォントへ関連付け>
eudcedit.exeの画面キャプチャ(4_1.png、4_2.png)

<外字ファイル関連付け後>
レジストリ(5.png)
Excel表示(6.png)
ExcelでエクスポートしたPDF(7.pdf)

<Aspose.Cellsから生成>
Excel表示(8.png)
Asposeで生成したPDF(9.pdf)

eudctest.zip (509.2 キロバイト)

>指定されたフォントがテキストを表示できない場合、

Excel は指定したフォントで外字を正常に表示していますので、
「指定されたフォントがテキストを表示できない場合」は、Aspose.Cells で発生している現象です。
指定したフォントに関連付けた外字を、Asposeが生成するPDFへ正しく反映するために、
コードをどのように改善すればよいか、ご助言をお願いいたします。

@wbys

新しいマシンで、最初に次のコードを追加してください (そうでない場合)。以前に共有した MSPGothicEUDC.TTE フォント ファイルのみがフォント フォルダー gaijiFolder にあることを確認してください。

FontConfigs.SetFontFolder(gaijiFolder, True)
FontConfigs.SetFontSubstitutes("MS ゴシック", {"MSPGothicEUDC"})
FontConfigs.SetFontSubstitutes("MS Pゴシック", {"MSPGothicEUDC"})

その後、Aspose.Cells によって生成された pdf ファイルを共有してください。

>新しいマシンで、最初に次のコードを追加してください (そうでない場合)。

コードは追加してあることを確認しました。

> MSPGothicEUDC.TTE フォント ファイルのみがフォント フォルダー gaijiFolder にあることを確認してください。

gaijiFolder に、.tte ファイルが、MSPGothicEUDC.TTE だけであることを確認しました。

>その後、Aspose.Cells によって生成された pdf ファイルを共有してください。

添付します。先ほどの、9.pdf と同じファイルです。

9.pdf (46.6 キロバイト)