winrt attempt to insert image into pdf
I would like to insert code into a pdf document but after I convert the image file to stream, I get the ArgumentNullException.
Buffer cannot be null.
Parameter name: buffer
Code:
using (PdfLoadedDocument pdfDocument = new PdfLoadedDocument(await file.OpenStreamForReadAsync()))
{
var imgFile = await installedFolder.GetFileAsync(@"PathToImage\MyImage.png");
using (Stream ms = await imgFile.OpenStreamForReadAsync())
{
pdfDocument.Pages[0].Graphics.DrawImage(PdfImage.FromStream(ms), 0, 0, 300, 170);
}
}
SIGN IN To post a reply.
4 Replies
GL
George Livingston
Syncfusion Team
January 17, 2013 12:44 PM UTC
Hi Bee,
Thank you for your interest in Syncfusion
product.
Currently we do not support PNG images,
however we have added a feature request to implement this feature in any our
upcoming release. We will let you know once the feature has been implemented.
Please let us know if you have any
questions.
Regards,
George
AC
Adam Clark
February 26, 2013 04:05 PM UTC
I ran into this same issue. Your documentation is misleading because the first example implies its using a PNG image
http://help.syncfusion.com/UG/winrt/default.htm#!Documents/drawingimages.htm
//Draw bitmage image with image size
PdfImage image = new PdfBitmap(pngImage);
g.DrawImage(image, 0, 0, image.Width, image.Height);
RD
Ross Dargan
July 18, 2013 10:50 AM UTC
It's sad to see that this still is not supported, and the documentation doesn't really make this clear either.
RD
Ross Dargan
July 18, 2013 11:11 AM UTC
If anyone else encounters this issue here is a workaround.
using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Syncfusion.Pdf.Graphics; using Windows.Graphics.Imaging; using Windows.Storage; using Windows.Storage.Streams; namespace Relay.Forms.UI.Utils { public static class IStorageFileExtensions { public static async Task<PdfImage> ToPdfImage(this IStorageFile file) { using (var fileStream = await file.OpenReadAsync()) { IRandomAccessStream stream; if (file.ContentType == "image/png") { var decoder = await BitmapDecoder.CreateAsync(fileStream); var pixels = await decoder.GetPixelDataAsync(); stream = new InMemoryRandomAccessStream(); var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream); encoder.SetPixelData(decoder.BitmapPixelFormat, BitmapAlphaMode.Ignore, decoder.OrientedPixelWidth, decoder.OrientedPixelHeight, decoder.DpiX, decoder.DpiY, pixels.DetachPixelData()); await encoder.FlushAsync(); } else { stream = fileStream; } PdfImage image = PdfImage.FromStream(stream.AsStream()); return image; } } } }
Simply call this on your PNG image and it will work fine
IStorageFile fileImage = ...
PdfImage image = await fileImage.ToPdfImage();
SIGN IN To post a reply.
- 4 Replies
- 4 Participants
-
BE BEE
- Jan 16, 2013 11:03 PM UTC
- Jul 18, 2013 11:11 AM UTC