【Aspose.Cells】Aspose.Cells.CellsException: Chart/Picture to image Error!

Aspose.Cells で グラフが入ったxlsxファイルを PdfA1a で保存すると例外が発生します。


    string inputPath = @"/mnt/gcs/test.xlsx";
    string outputPath = @"/mnt/gcs/out.xlsx";

    // PDF/A
    Aspose.Cells.PdfSaveOptions saveOption = new()
    {
        Compliance = Aspose.Cells.Rendering.PdfCompliance.PdfA1a
    };

    var workbook = new Aspose.Cells.Workbook(inputPath);
    using (MemoryStream ms = new MemoryStream())
    {
        workbook.Save(ms, saveOption); // <===== D:\dotnet-docker\aspnetapp\Program.cs:line 57
        ms.Position = 0;
        File.WriteAllBytes(outputPath, ms.ToArray());
    }
Aspose.Cells.CellsException: Chart/Picture to image Error!
   at Aspose.Cells.Workbook.Save(Stream stream, SaveOptions saveOptions)
   at Program.<>c.<<Main>$>b__0_2() in D:\dotnet-docker\aspnetapp\Program.cs:line 57

検証用のサンプルを添付いたしましたので、回避方法などあればお教えいただけると幸いです。
検証には、.NET10 と docker desktop が必要です。

1.aspnetappディレクトリで以下のコマンドを実行し実行ファイルを作成します。
dotnet publish -c Release -o published

2.試しにローカルで実行するときはdotnet-dockerディレクトリで以下のコマンドを実行します。5353は仮のポートです。
docker build -t aspnetapp .
docker run -v /d/dotnet-docker/aspnetapp/gcs:/mnt/gcs/ -it --rm -p 5353:8080 --name aspnetcore_sample aspnetapp

http://localhost:5353/Test にアクセスするとdotnet-docker\aspnetapp\gcs に test.xlsx を開いて保存しただけの out.pdf が作成される予定ですが、例外になり出力できません。

Aspose.Cells は Version 25.11.0
SkiaSharp.NativeAssets.Linux は Version 3.119.1 です。

検証用ファイル.zip (1.9 MB)

@HidekazuTamura

概要
Aspose.Cells で Excel を PDF/A‑1a に変換しようとした際に Aspose.Cells.CellsException: Chart/Picture to image Error! がスローされるケースがあります。提供された情報だけでは正確な原因や回避策は特定できませんが、一般的にこの例外は以下のような状況で発生します。

なぜ起きるのか(一般的な可能性)

  • PDF/A‑1a では、すべての描画要素(チャート、画像、SmartArt など)をビットマップに変換して PDF に埋め込む必要があります。
  • 変換処理は内部で SkiaSharp などの画像描画ライブラリに依存しており、Linux コンテナ環境で必要なネイティブライブラリ(例: libgdiplus, libskia, libpng, libjpeg, libfontconfig など)が不足していると変換に失敗し、上記例外が発生することがあります。
  • また、使用している Aspose.Cells のバージョンと SkiaSharp のバージョン間の互換性問題、あるいは特定のチャートタイプや画像フォーマットが PDF/A 変換時にサポートされていないケースも考えられます。

次に取るべき対策(一般的なトラブルシューティング手順)

  1. コンテナに必要なネイティブライブラリをインストール
  • Debian 系ベースのイメージを使用している場合の例:
FROM mcr.microsoft.com/dotnet/aspnet:10.0
RUN apt-get update && apt-get install -y \
libgdiplus \
libskia \
libpng16-16 \
libjpeg62-turbo \
libfontconfig1 \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY published/ .
ENTRYPOINT ["dotnet", "YourApp.dll"]
  • Alpine 系の場合は apk add --no-cache libgdiplus libskia libpng libjpeg-turbo fontconfig などに置き換えてください。
  1. PDF/A 以外で保存できるか確認
var pdfOptions = new Aspose.Cells.PdfSaveOptions(); // Compliance を設定しない
workbook.Save("out.pdf", pdfOptions);

これで通常の PDF が生成できれば、例外は PDF/A 用のラスタライズ処理に起因している可能性が高いです。

  1. Aspose.Cells と SkiaSharp のバージョンを最新に更新
  • 新しいリリースでは Linux 環境での画像化に関する既知の問題が修正されていることがあります。
dotnet add package Aspose.Cells --version 25.12.0
dotnet add package SkiaSharp.NativeAssets.Linux --version 3.120.0
  1. 例外の内部情報を取得
try
{
workbook.Save(ms, saveOption);
}
catch (Aspose.Cells.CellsException ex)
{
Console.Error.WriteLine(ex.ToString()); // InnerException に "Failed to load native library" 等が出ていないか確認
}

取得したスタックトレースや InnerException のメッセージがあれば、欠如しているライブラリ名を特定できることがあります。

  1. 代替策
  • PDF/A‑1a の代わりに PDF/A‑1b や PDF/A‑2a へ変更してみる(画像化要件が緩やかになる場合があります)。
  • まず通常の PDF を生成し、外部ツール(例: Ghostscript)で PDF/A に変換するワークフローに切り替える。

まとめ
提示された情報だけでは例外の根本原因は確定できませんが、Linux Docker コンテナでのネイティブ画像描画ライブラリの不足やバージョン互換性が最も一般的な要因です。上記手順で必要なライブラリをインストールし、Aspose.Cells と SkiaSharp を最新バージョンに更新した上で再度実行してみてください。もし依然として例外が発生し、取得した例外メッセージに具体的なライブラリ名やエラーコードが含まれる場合は、その情報を追記いただければ、さらに詳細な解析が可能です。

もともと以下のライブラリがコンテナにインストール済みでした。
libfontconfig1 libicu74 libgdiplus libc6-dev

追加で以下のライブラリをインストールしましたが問題は解消しませんでした。
libpng16-16t64 libjpeg62

PdfA1aでなく以下のオプションで実行しましたが問題は解消しませんでした。

Aspose.Cells.PdfSaveOptions saveOption = new();

以下のバージョンが最新のようでした。問題は解消しませんでした。
Aspose.Cells 25.11.0
SkiaSharp.NativeAssets.Linux 3.119.1

特に追加のエラーメッセージはありませんでした。

こちらについては試行していません。

問題がおきるファイルを改めて添付させていただきます。
引き続きよろしくお願いいたします。

入力ファイル.zip (19.0 KB)

@HidekazuTamura
最新バージョンのv25.11でサンプルファイルとコードを使用してテストしたところ、問題を再現できました。ファイルをPDF形式で保存すると例外が発生します。

内部問題追跡システムで次の新しいチケットを開き、Free Support Policies に記載されている条件に従って修正を提供しています。

質問番号:CELLSNET-59376