如何使用 PDFsharp .NET 库将 PDF 页面导出为图像?

Posted

技术标签:

【中文标题】如何使用 PDFsharp .NET 库将 PDF 页面导出为图像?【英文标题】:How to export PDF page as an image using PDFsharp .NET library? 【发布时间】:2011-03-01 01:45:26 【问题描述】:

如何使用 PDFsharp .NET 库将 PDF 页面导出为图像,以进行像素级操作?

例如,System.Drawing.BitMap.GetPixel()

我正在尝试找出 PDF 文档中的空白区域(全白或任何颜色),以编写一些图形/图像。

2010 年 6 月 9 日:

我已经试过了,但它不起作用。

为什么下面的代码没有按预期工作?

Bitmap.GetPixel 总是返回 0。

//
// PdfSharp.Pdf.PdfDocument
// PdfSharp.Pdf.PdfPage
// PdfSharp.Drawing.XGraphics
// System.Drawing.Bitmap
//
string srcPDF = @"C:\hcr\test\tmp\file1.pdf";
PdfDocument pdfd = PdfReader.Open(srcPDF);
XGraphics xgfx = XGraphics.FromPdfPage(pdfd.Pages[0]);
Bitmap b = new Bitmap((int) pdfp.Width.Point, (int) pdfp.Height.Point, xgfx.Graphics);

int rgb = b.GetPixel(0, 0).ToArgb();

【问题讨论】:

难道xgfx.Graphics 总是nullnew Bitmap(int, int, Graphics) 方法的描述:“使用指定的大小和指定的 Graphics 对象的分辨率初始化 Bitmap 类的新实例。”难怪所有像素都返回 0,因为此函数不会(也不能)从 Graphics 对象复制任何像素。 【参考方案1】:

答案可以在 PDFsharp 常见问题列表中找到: http://www.pdfsharp.net/wiki/PDFsharpFAQ.ashx#Can_PDFsharp_show_PDF_files_Print_PDF_files_Create_images_from_PDF_files_3

PDFsharp 创建 PDF 文件,但无法呈现它们。

电话

Bitmap b = new Bitmap((int) pdfp.Width.Point, (int) pdfp.Height.Point, xgfx.Graphics);

不初始化位图的任何位,也不从 Graphics 对象复制任何内容,除了 Graphics 对象的 DPI 设置。图形对象绘制东西,但它们不记得自己绘制了什么,并且无法在调用 new Bitmap(...) 时重新创建图形。这不适用于 Microsoft 的 Graphics 类,也不适用于 PDFsharp 的 XGraphics 类。

PDFsharp 的 XGraphics 类可用于在 PDF 页面上绘图,它可用于在位图、打印机或屏幕上绘图 - 它可以在 PDF 页面和您可以从 Windows 获得的任何 DC 上绘图. MigraDoc 也是如此。 因此,如果您想创建内容相同的 PDF 文件和位图,PDFsharp 和 MigraDoc 可以提供帮助。

但 PDFsharp 不提供任何将 PDF 页面呈现为位图的方法。

【讨论】:

我不明白,虽然写入 System.Drawing.Graphics 是可能的,但从中读取像素却是故意不可能的。对我来说,从 Graphics 创建 Bitmap 对象看起来是一个合理的要求。 :( 您写道:“故意无法从中读取像素”。这不是真的:我们不会让它变得不可能。 PDF 是一种矢量格式。如何从矢量格式中读取像素?您可以将 PDF 渲染为位图并从中读取像素。但 PDFsharp 不渲染位图。 这可以通过 MigraDoc 完成吗? pdfsharp.net/wiki/documentviewer-sample.ashx DocumentPreview 无法显示 PDF 文件,因为 PDFsharp 无法渲染 PDF(如前所述)。 JPEG 和 PNG 图像显示在预览中,但对于 PDF 页面,您只能看到一个占位符。 MigraDoc 使用 PDFsharp 处理任何与 PDF 相关的内容。 "PDFsharp 的 XGraphics 类可用于在 PDF 页面上绘图,并可用于创建位图。"如何从 XGraphics 实例中获取位图?

以上是关于如何使用 PDFsharp .NET 库将 PDF 页面导出为图像?的主要内容,如果未能解决你的问题,请参考以下文章

C# PDFSharp:如何从 PDF 中去除文本的示例?

使用 PdfSharp 组合可填写的 Pdf 表单

iTextSharp操作PDF

使用 TheArtOfDev.HtmlRenderer.PdfSharp 从 HTML 创建 PDF

HTML到PDF - 使用PdfSharp和HtmlRenderer分页

使用 PDFSharp 从 HTML 模板生成 PDF 并发送到浏览器