我一直在阅读StackOverflows关于在UWP中打印PDF的限制。其中一个主题How to print PDF in UWP without loosing quality after rasterization to PNG很好地总结了它。
我采取了以下步骤来打印PDF文件的图像
从本地文件夹
加载PDFStorageFile f = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync("pdffile.pdf");
PdfDocument doc = await PdfDocument.LoadFromFileAsync(f);
Load(doc);
将PDF转换为图像并将图像放入可观察的集合并将其保存到本地文件夹
async void Load(PdfDocument pdfDoc)
{
PdfPages.Clear();
for (uint i = 0; i < pdfDoc.PageCount; i++)
{
BitmapImage image = new BitmapImage();
var page = pdfDoc.GetPage(i);
using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
{
await page.RenderToStreamAsync(stream);
await image.SetSourceAsync(stream);
}
PdfPages.Add(image);
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("pdffilepage" + i +".jpg");
var stream2 = await file.OpenStreamForWriteAsync();
var serializer = new DataContractSerializer(typeof(ObservableCollection<BitmapImage>));
serializer.WriteObject(stream2, PdfPages[(int)i]);
await stream2.FlushAsync();
}
Debug.WriteLine("Writing file finished");
}
在此步骤中,我收到以下错误:
System.Runtime.Serialization.InvalidDataContractException:“类型'Windows.UI.Xaml.Media.ImageSource'无法序列化。请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员。或者,您可以确保该类型是公共的并且具有无参数构造函数 - 然后将序列化该类型的所有公共成员,并且不需要任何属性。“
我不知道如何处理上述错误。
答案 0 :(得分:1)
异常消息已清楚解释。您无法序列化ImageSource
的类型。
如果要将BitmapImage保存到StorageFile中,可以使用BitmapDecoder&amp; BitmapEncoder和WriteableBitmap。
请参阅此主题以获取更多详细信息:Storing a BitmapImage in LocalFolder - UWP 。