Method not found: ExcelPicture.ToImage()

System.MissingMethodException: Method not found: ‘System.Drawing.Image GemBox.Spreadsheet.ExcelPicture.ToImage()’

It seems that the method is not available on Linux container? - I think It runs OK on Windows

My dockerfile installation command

RUN apt-get update && apt-get install -y libfreetype6 libfontconfig1 libc6-dev ttf-mscorefonts-installer fontconfig && apt-get clean && rm -rf /var/lib/apt/lists/*

The Gembox.Spreadsheet version is 49.0.1153

Hi,

Yes, that method returns the System.Drawing.Image object and the problem is that System.Drawing is no longer supported on Linux.

Please check the remarks of the System.Drawing namespace:
https://learn.microsoft.com/en-gb/dotnet/api/system.drawing#remarks

Can you tell us what you’re doing with the Image object?

Regards,
Mario

Thanks for the reply.
I would like to scale the current row to the picture’s dimension

var picture = excelWorksheet.Pictures.Add(pictureStream, ExcelPictureFormat.Png,
    currentCell.Name, currentCell.Name);
var image = picture.ToImage();
var scaledHeightInPoint = currentCell.Column.GetWidth(LengthUnit.Point) * image.Height / image.Width;
currentCell.Row.SetHeight(scaledHeightInPoint, LengthUnit.Point);

Would there be another way to achieve that?

Hi,

Try replacing this:

var image = picture.ToImage();

With this:

var image = SKBitmap.Decode(pictureStream.ToArray());

The SKBitmap class comes from SkiaSharp.

I hope this helps.

Regards,
Mario

Thanks, Mario.

I would like to ask also if FormControls.AddCheckBox have some issues with Linux also?
I am rendering the excel content to PDF and it worked fine on Windows. Linux refuses to render the checkbox

using var resultExcelStream = new MemoryStream();
resultExcel.Save(resultExcelStream, GemBox.Spreadsheet.SaveOptions.PdfDefault);

Hi,

I believe your problem occurs because of the font that is used to render that content.
Try adding the “Segoe UI Emoji” font to your project.

For example, create a “Fonts” folder inside the project and add the “seguiemj.ttf” file to it.
Set the font file to be copied to the output directory:

<ItemGroup>
  <None Update="Fonts\seguiemj.ttf">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>
</ItemGroup>

Set the FontsBaseDirectory property to that folder:

FontSettings.FontsBaseDirectory = "Fonts";

Does this solve your issue?

Regards,
Mario

Thank you a lot Mario. The above answers helped us to solve almost all the problems. I have some small issues with the font being rendered differently on Linux vs Windows but I will make some more testing :smiley: