提供的代码报错无法从"SkiaSharp.SKSurface"转换为"iText.Kernel.Pdf.PdfDocument"
时间: 2023-07-19 20:18:22 浏览: 47
非常抱歉,我的代码有误。在第 4 步中,我错误地将 `SKSurface` 对象赋值给了 `PdfDocument` 类型的变量,导致类型转换错误。正确的代码应该是将 `SKBitmap` 对象保存为图片文件。以下是修改后的代码:
```csharp
using iText.Kernel.Pdf;
// 加载 PDF 文件到 PdfDocument 对象中
var pdfDoc = new PdfDocument(new PdfReader("path/to/pdf"));
// 获取 PDF 文件的页面数量
int pageCount = pdfDoc.GetNumberOfPages();
// 遍历每个页面,将其转换为 SkiaSharp 的 SKBitmap 对象
using (var renderer = new SKDocumentPdfRenderer(pdfDoc))
{
for (int i = 1; i <= pageCount; i++)
{
var page = pdfDoc.GetPage(i);
var pageSize = page.GetPageSize();
var bitmap = new SKBitmap((int)pageSize.GetWidth(), (int)pageSize.GetHeight());
using (var surface = SKSurface.Create(bitmap.Info))
{
renderer.RenderPageToSurface(i, surface);
surface.Canvas.Flush();
}
// 将 SKBitmap 对象保存为图片文件
using (var stream = new FileStream($"path/to/image_{i}.png", FileMode.Create))
{
bitmap.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
}
}
}
```
在上面的代码中,我们使用 `SKDocumentPdfRenderer` 类来渲染 PDF 页面到 `SKSurface` 对象中。然后,我们将 `SKSurface` 转换为 `SKBitmap` 对象,并将其保存为 PNG 图片。
请注意,为了使用 `SKDocumentPdfRenderer` 类,你需要在 Nuget 中安装 `SkiaSharp.Views.WPF" 和 "SkiaSharp.Pdfium.Viewer` 两个包,并且需要将 `Pdfium.dll` 文件复制到程序的输出目录中。