2010-06-08 85 views
19

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

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

我试图找出空白区域(全白,或任何颜色的)一个PDF文档中,写一些图形/图片。

09,2010年6月:

我已经试过这一点,但它不工作。

为什么下面的代码不能按预期工作?

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(); 
+0

难道是'xgfx.Graphics'总是'null'? 'new Bitmap(int,int,Graphics)'方法的描述:“用指定大小和指定Graphics对象的分辨率初始化Bitmap类的新实例。难怪所有像素都返回0,因为这个函数没有(也不能)从Graphics对象中复制任何像素。 – 2015-06-30 08:44:58

回答

17

答案可以在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对象的DPI设置。图形对象绘制的东西,但他们不记得他们画的东西,他们不能在new Bitmap(...)的调用中重新创建图纸。这不适用于Microsoft的Graphics类,它不适用于PDFsharp的XGraphics类。

PDFsharp的XGraphics类可以用于在PDF页面上绘图,并且可以用于在位图上,打印机上或屏幕上绘图 - 它可以在PDF页面上绘制,也可以在任何可以从视窗。 MigraDoc也一样。
所以,如果你想创建PDF文件和位图相同的内容,PDFsharp和MigraDoc可以提供帮助。

但是PDFsharp没有提供任何方式将PDF页面呈现给位图。

+0

我不明白,虽然写入System.Drawing.Graphics是可能的,但从中读取像素是故意不可能的。对我来说,从Graphics创建Bitmap对象看起来是一个合理的要求。 ( – 2010-06-11 07:56:58

+11

)你写道:“从它读取的像素有意不可能” 这是不正确的:我们不能使它不可能PDF是一种矢量格式如何从矢量格式读取像素 您可以渲染PDF到位图并从中读取像素但PDFsharp不渲染位图 – 2010-06-14 07:34:04

+0

这可以通过MigraDoc完成吗?http://www.pdfsharp.net/wiki/documentviewer-sample.ashx – 2015-10-01 14:39:47