2010-06-08 3 views
19

Как экспортировать PDF-страницу в качестве изображения с помощью библиотеки PDFsharp .NET для манипуляций на уровне пикселей?Как экспортировать PDF-страницу в качестве изображения с помощью библиотеки PDFsharp .NET?

Например, что-то вроде System.Drawing.BitMap.GetPixel()

Я пытаюсь выяснить, пустое пространство (все белое, или любого цвета) внутри PDF документа, чтобы написать некоторые графики/образ.

09, июнь 2010:

Я попытался это, но он не работает.

Почему следующий код не работает должным образом?

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)»: «Инициализирует новый экземпляр класса Bitmap с указанным размером и с разрешением указанного объекта Graphics». Неудивительно, что все пиксели возвращают 0, так как эта функция не копирует (и не может) любые пиксели из объекта Graphics. –

ответ

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); 

не инициализировать любые биты растрового изображения и ничего не копировать из графического объекта для настройки DPI графического объекта, за исключением. Графические объекты рисуют вещи, но они не помнят, что они нарисовали, и они не могут воссоздать чертежи при вызове new Bitmap(...). Это не работает с классом Graphics от Microsoft, это также не работает с классом XGraphics из PDFsharp.

Класс XGraphics из PDFsharp может использоваться для рисования на страницах PDF и его можно использовать для рисования на растровых изображениях, на принтере или на экране - он может рисовать на страницах PDF и на любом DC, из которого вы можете получить Окна. То же самое касается MigraDoc.
Итак, если вы хотите создавать PDF-файлы и растровые изображения с тем же содержимым, могут помочь PDFsharp и MigraDoc.

Но PDFsharp не предоставляет никакого способа визуализации страницы PDF в растровое изображение.

+0

Я не понимаю, при записи в System.Drawing.Graphics возможно, чтение пикселей из него было сделано намеренно невозможным. Для меня создание объекта Bitmap из Graphics выглядит как разумное требование. :( –

+11

Вы пишете: «чтение пикселей из него сделано намеренно невозможным». Это неправда: мы не делаем это невозможным. PDF - это векторный формат. Как вы читаете пиксели из векторного формата? Вы можете визуализировать PDF к растровому изображению и чтению оттуда. Но PDFsharp не отображает растровые изображения. –

+0

Можно ли это сделать через MigraDoc? http://www.pdfsharp.net/wiki/documentviewer-sample.ashx –

Смежные вопросы