using System;
using System.Threading.Tasks;
using System.Windows.Media.Imaging;
namespace Ink_Canvas.Helpers
{
///
/// PDF 页数与位图渲染:优先 (Windows.Data.Pdf),失败或无效结果时使用 PDFtoImage(MIT) 备用。
///
internal static class PdfDocumentRenderHelper
{
public static async Task GetPageCountAsync(string pdfPath)
{
uint winRt = 0;
try
{
winRt = await PdfWinRtHelper.GetPageCountAsync(pdfPath).ConfigureAwait(false);
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"PDF WinRT 获取页数失败,将尝试 PDFtoImage(MIT): {ex.Message}", LogHelper.LogType.Warning);
}
if (winRt > 0)
return winRt;
try
{
return await Task.Run(() => PdfToImageMitHelper.GetPageCount(pdfPath)).ConfigureAwait(false);
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"PDFtoImage(MIT) 获取页数失败: {ex.Message}", LogHelper.LogType.Warning);
return 0;
}
}
public static async Task RenderPageToBitmapSourceAsync(string pdfPath, uint pageIndex)
{
try
{
BitmapSource win = await PdfWinRtHelper.RenderPageToBitmapSourceAsync(pdfPath, pageIndex).ConfigureAwait(false);
if (win != null)
return win;
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"PDF WinRT 渲染失败,将尝试 PDFtoImage(MIT): {ex.Message}", LogHelper.LogType.Warning);
}
try
{
return await PdfToImageMitHelper.RenderPageToBitmapSourceAsync(pdfPath, pageIndex).ConfigureAwait(false);
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"PDFtoImage(MIT) 渲染失败: {ex.Message}", LogHelper.LogType.Warning);
return null;
}
}
}
}