2010-06-08 130 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