WinRt转换PDF图像,提高图像质量
本文关键字:图像质量 图像 转换 PDF WinRt | 更新日期: 2023-09-27 17:52:41
在WinRt应用程序中,我想显示pdf内容。因此,我将所有pdf页面转换为图像。但是质量很差。而且在放大之后,它变得更糟了。
我怎样才能提高质量!?是否可以使用编码器?或者我需要一个更高的宽度/高度值?
StorageFile pdfFile = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
//Load Pdf File
pdfDocument = await PdfDocument.LoadFromFileAsync(pdfFile);
if (pdfDocument != null && pdfDocument.PageCount > 0) {
//Get Pdf page
for (int pageIndex = 0; pageIndex < pdfDocument.PageCount; pageIndex++) {
var pdfPage = pdfDocument.GetPage((uint)pageIndex);
if (pdfPage != null) {
// next, generate a bitmap of the page
StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder;
StorageFile pngFile = await tempFolder.CreateFileAsync(Guid.NewGuid().ToString() + ".png", CreationCollisionOption.ReplaceExisting);
if (pngFile != null) {
IRandomAccessStream randomStream = await pngFile.OpenAsync(FileAccessMode.ReadWrite);
PdfPageRenderOptions pdfPageRenderOptions = new PdfPageRenderOptions();
pdfPageRenderOptions.IsIgnoringHighContrast = false;
PdfPageDimensions rotation = pdfPage.Dimensions;
Size pdfPageSize = pdfPage.Size;
if (pdfPageSize.Height > 1000) {
pdfPageRenderOptions.DestinationHeight = (uint)(pdfPageSize.Height * 0.85);
}
else if (pdfPageSize.Width > 1000) {
pdfPageRenderOptions.DestinationWidth = (uint)(pdfPageSize.Width * 1.25);
}
await pdfPage.RenderToStreamAsync(randomStream, pdfPageRenderOptions);
await randomStream.FlushAsync();
randomStream.Dispose();
pdfPage.Dispose();
PdfPagePath = pngFile.Path;
PdfPagesPathCollection.Add(pngFile.Path);
}
}
}
}
PDF格式允许无限完美缩放,因为它是基于矢量的格式。当您将页面转换为图像时,您受到该转换的分辨率的限制,缩放将显示像素。
一个解决方案是以更高的分辨率渲染并按比例显示,它会给你一些缩放纬度,但它仍然会达到极限。在其他平台上,这是通过以所需的缩放级别渲染部分来完成的,但我认为使用PdfDocument
.