macomp
1
Aspose Cells for Javaを使用して、ExcelファイルをPDFファイルへ変換すると
PDFファイルへ出力した文字が文字化けします。
Excelファイルにはクメール語が出力されておりますが、Windows環境で文字を入力し、
Alpine Linux環境にコピーして、PDFファイルへ変換してます。
Alpine Linux環境にはクメール語のフォントをインストールしております。
文字化けは以下のような感じになります。
image.png (2.2 KB)
こちらの環境は以下です。
【バージョン】aspose-cells-25.10
【クメール語フォント】leelawui.ttf
【PDF変換サーバ】Alpine Linux 3.22.2
お手数ですがよろしくお願い致します。
@macomp
概要
Aspose Cells for Java で Excel を PDF に変換すると、Alpine Linux 環境でクメール文字が文字化けすることがあります。これは、使用するフォントがシステムに認識されていないか、PDF に埋め込まれていないことが原因です。
原因
- フォント検索パスが不足
- Alpine は最小構成のフォントデータベースしか持たず、Aspose Cells はシステムフォントまたは
FontSettings で明示的に登録されたフォントしか利用できません。
- PDF へのフォント埋め込みが無効
- 保存時にフォント埋め込みが行われないと、PDF を閲覧する側に同じフォントがなく、文字が正しく表示されません。
対策手順
- フォントと fontconfig をインストール
apk add fontconfig ttf-dejavu # fontconfig は必須
クメール用フォント(例: leelawui.ttf)を /usr/share/fonts/truetype/khmer/ に配置し、キャッシュを更新します。
fc-cache -f -v
- Aspose にフォントフォルダーを登録
import com.aspose.cells.FontSettings;
import com.aspose.cells.FontSource;
import com.aspose.cells.FolderFontSource;
String fontFolder = "/usr/share/fonts/truetype/khmer";
FontSource[] sources = new FontSource[] { new FolderFontSource(fontFolder, true) };
FontSettings.getInstance().setFontSources(sources);
- 必要に応じてデフォルトフォントを設定
import com.aspose.cells.Workbook;
Workbook wb = new Workbook("input.xlsx");
wb.getDefaultStyle().getFont().setName("Leelawui"); // フォント内部名と一致させる
- PDF 保存時にフォント埋め込みを有効化
import com.aspose.cells.PdfSaveOptions;
PdfSaveOptions pdfOpts = new PdfSaveOptions();
pdfOpts.setEmbedAllFonts(true); // すべての使用フォントを埋め込む
// 必要に応じて
// pdfOpts.setFontEmbeddingMode(PdfFontEmbeddingMode.EMBED_ALL);
wb.save("output.pdf", pdfOpts);
- 生成結果の確認
- 作成された PDF を PDF ビューアで開き、クメール文字が正しく表示されているか確認してください。
- トラブルシューティング(文字化けが残る場合)
- フォントファイルが破損していないか、Unicode 範囲 U+1780‑U+17FF を含んでいるかを
fc-scan などで確認。
pdfOpts.setFontEmbeddingMode(PdfFontEmbeddingMode.EMBED_ALL); を試す。
- フォント名が実際の内部名と完全に一致しているか再確認。
以上の手順を順に実施すれば、Alpine Linux 上でもクメール文字が正しく PDF に埋め込まれ、文字化けは解消される可能性が高くなります。問題が続く場合は、実行したコードと取得したエラーログを添えて提示してください。
@macomp
Linux環境に必要なフォントが正しくインストールされているにもかかわらず、PDF変換時にテキストが文字化けして表示される場合は、カスタムフォントディレクトリを設定することで問題を解決できます。以下のドキュメントをご参照ください。
macomp
4
ご回答いただき、ありがとうございます。
下記を試してみました。
1.fontconfigのインストール
2.スプレッドシートのレンダリングのためのフォントの設定
※「Asposeにフォントフォルダを登録」は[aspose-cells-25.10]にFontSettingsクラスが存在しないため未実施
※「必要に応じてデフォルトフォントを設定」は「2.スプレッドシートのレンダリングのためのフォントの設定」で実施済み
※「PDF 保存時にフォント埋め込みを有効化」はPdfSaveOptionsクラスのsetEmbedAllFontsメソッドが[aspose-cells-25.10]に存在しないため、未実施
実行したソースファイルを添付しております。
こちらを実行した結果、文字化けの状況は変わりません。
実行したソースファイルの中でFontConfigs.isFontAvailableを実行して、フォントが利用できるか確認してますが
trueが返ってくるので、設定はできている認識です。
また、作成されたPDFファイルのフォントプロパティにも、対象のフォントが埋め込まれていることが確認できます。
お手数ですが、宜しくお願い致します。
Test.zip (14.0 KB)
John.He
5
@macomp
Excelのサンプルファイル、サンプルファイルで使用されているフォントファイル、そして結果のPDFファイルをご提供いただけますか?すぐに確認させていただきます。
macomp
6
出力したPDFと使用したフォントを添付しました。
お手数ですがよろしくお願い致します。
PDF出力結果.zip (205.9 KB)
@macomp
申し訳ございませんが、圧縮ファイルにはサンプルのExcelファイルが含まれていません。サンプルのExcelファイルをフォーラムにアップロードしていただけますか? zipファイルに圧縮してこちらにアップロードしてください。すぐに確認いたします。
macomp
8
失礼しました。
宜しくお願い致します。
PDF出力結果2.zip (212.9 KB)
@macomp
フィードバックありがとうございます。最新バージョンのv25.10とサンプルファイルとコードを使用してテストしたところ、問題を再現できました。ExcelからPDFに変換すると、クメール語の文字が文字化けして表示されます。
内部問題追跡システムで次の新しいチケットを開き、Free Support Policies に記載されている条件に従って修正を提供しています。
質問番号:CELLSJAVA-46538
macomp
10
ご確認いただき、ありがとうございます。
元々、購入していたバージョンは「aspose-cells-20.10」となります。
新しいバージョンなら問題が解消しているかと思い、
30日間トライアルとして最新バージョンを使用させていただいておりました。
この場合、提供されるバージョンは最新バージョンとなりますか?
その場合はライセンスを購入すれば使用できるようになるのでしょうか?
John.He
11
@macomp
試用期間中は最新バージョンを引き続きご利用いただけます。ただし、試用版にはいくつかの制限事項があります。試用版の制限事項については、以下のドキュメントをご参照ください。
新規ライセンスをご購入いただいた後、ライセンスの有効期間内であれば、どのバージョンでもご利用いただけます。
macomp
12
ご回答ありがとうございます。
修正版の提供をお待ちしております
John.He
13
@macomp
ご意見ありがとうございます。どういたしまして。ご質問等ございましたら、お気軽にお問い合わせください。