如何使用 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
总是null
? new 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 页面导出为图像?的主要内容,如果未能解决你的问题,请参考以下文章
使用 TheArtOfDev.HtmlRenderer.PdfSharp 从 HTML 创建 PDF