private void PdfExport_CellExporting(object sender, DataGridCellPdfExportingEventArgs e)
{
if (e.CellType == ExportCellType.RecordCell && e.ColumnName == "Image")
{
var style = new PdfGridCellStyle();
// ImageSource source = ImageSource.FromResource("DataGridDemo.Images." + e.CellValue.ToString(), typeof(MainPage).GetTypeInfo().Assembly);
var streamImageSource = e.CellValue as StreamImageSource;
if (streamImageSource != null)
{
var imageStream = typeof(App).GetTypeInfo().Assembly.GetManifestResourceStream(ExportingHelper.GetImagePath(streamImageSource));
if (imageStream != null)
{
PdfImage pdfImage = PdfImage.FromStream(imageStream);
style.BackgroundImage = pdfImage;
e.PdfGridCell.ImagePosition = PdfGridImagePosition.Center;
e.PdfGridCell.Style = style;
imageStream.Flush();
e.CellValue = null;
}
}
}
} |
Hi Tayyip,Thank you contacting Syncfusion support.We have checked your requirement. “How to export SfDataGrid with image column in Xamarin forms”. SfDataGrid does not have direct support to export image. However, we can achieve your requirement by using CellExporting of DataGridPdfExportingController. Please refer the following code snippet for reference.Code Snippet:
private void PdfExport_CellExporting(object sender, DataGridCellPdfExportingEventArgs e){if (e.CellType == ExportCellType.RecordCell && e.ColumnName == "Image"){var style = new PdfGridCellStyle();// ImageSource source = ImageSource.FromResource("DataGridDemo.Images." + e.CellValue.ToString(), typeof(MainPage).GetTypeInfo().Assembly);var streamImageSource = e.CellValue as StreamImageSource;if (streamImageSource != null){var imageStream = typeof(App).GetTypeInfo().Assembly.GetManifestResourceStream(ExportingHelper.GetImagePath(streamImageSource));if (imageStream != null){PdfImage pdfImage = PdfImage.FromStream(imageStream);style.BackgroundImage = pdfImage;e.PdfGridCell.ImagePosition = PdfGridImagePosition.Center;e.PdfGridCell.Style = style;imageStream.Flush();e.CellValue = null;}}}}We have also attached sample for your reference in the following linkLet us know if you need any further assistance on this.Regards,Pradeep Kumar B
private void PdfExport_CellExporting(object sender, DataGridCellPdfExportingEventArgs e)
{
if (e.CellType == ExportCellType.RecordCell && e.ColumnName == "Image")
{
var style = new PdfGridCellStyle();
// ImageSource source = ImageSource.FromResource("DataGridDemo.Images." + e.CellValue.ToString(), typeof(MainPage).GetTypeInfo().Assembly);
var streamImageSource = e.CellValue as StreamImageSource;
if (streamImageSource != null)
{
var imageStream = typeof(App).GetTypeInfo().Assembly.GetManifestResourceStream(ExportingHelper.GetImagePath(streamImageSource));
if (imageStream != null)
{
PdfImage pdfImage = PdfImage.FromStream(imageStream);
style.BackgroundImage = pdfImage;
e.PdfGridCell.ImagePosition = PdfGridImagePosition.Center;
e.PdfGridCell.Style = style;
imageStream.Flush();
e.CellValue = null;
}
}
}
} |
Code to get byte array from URL
async Task<byte[]> DownloadImageAsync(string imageUrl)
{
try
{
using (var httpResponse = await httpClient.GetAsync(imageUrl))
{
if (httpResponse.StatusCode == HttpStatusCode.OK)
{
return await httpResponse.Content.ReadAsByteArrayAsync();
}
else
{
//Url is Invalid
return null;
}
}
}
catch (Exception e)
{
//Handle Exception
return null;
}
}
ImageArrary = await DownloadImageAsync("https://www.syncfusion.com/downloads/support/directtrac/general/logo2059051212"),
private async void PdfExport_CellExporting(object sender, DataGridCellPdfExportingEventArgs e)
{
if (e.CellType == ExportCellType.RecordCell && e.ColumnName == "Image")
{
var style = new PdfGridCellStyle();
byte[] bytes = ((e.Record as RecordEntry).Data as OrderInfo).ImageArrary;
Stream imageStream = null;
if (bytes != null)
{
imageStream = new MemoryStream(bytes);
}
if (imageStream != null)
{
PdfImage pdfImage = PdfImage.FromStream(imageStream);
style.BackgroundImage = pdfImage;
e.PdfGridCell.ImagePosition = PdfGridImagePosition.Center;
e.PdfGridCell.Style = style;
imageStream.Flush();
e.CellValue = null;
}
}
} |