2010-06-08 6 views
19

Jak wyeksportować stronę PDF jako obraz przy użyciu biblioteki PDFSharp .NET, aby manipulować poziomami pikseli?Jak wyeksportować stronę PDF jako obraz przy użyciu biblioteki PDFSharp .NET?

Na przykład coś takiego, System.Drawing.BitMap.GetPixel()

Próbuję dowiedzieć się pusty obszar (cały biały lub dowolnego koloru) wewnątrz dokumentu PDF, aby napisać kilka grafik/obraz.

09, czerwiec 2010:

Próbowałem to, ale to nie działa.

Dlaczego poniższy kod nie działa zgodnie z oczekiwaniami?

Bitmap.GetPixel zawsze zwraca 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

Czy to możliwe, że 'xgfx.Graphics' ma zawsze wartość' null'? Opis metody 'nowa bitmapa (int, int, Graphics)' "Inicjuje nową instancję klasy Bitmap o określonym rozmiarze i rozdzielczości określonego obiektu Graphics." Nic dziwnego, że wszystkie piksele zwracają 0, ponieważ ta funkcja nie (i nie może) kopiować żadnych pikseli z obiektu Graphics. –

Odpowiedz

17

Odpowiedź można znaleźć w liście FAQ PDFsharp: http://www.pdfsharp.net/wiki/PDFsharpFAQ.ashx#Can_PDFsharp_show_PDF_files_Print_PDF_files_Create_images_from_PDF_files_3

PDFsharp tworzy pliki PDF, ale nie można uznać je.

Wezwanie

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

nie inicjuje żadnych bitów bitmapy i nie kopiować niczego od obiektu Graphics z wyjątkiem ustawienia DPI Obiektu Graficznego. Obiekty graficzne rysują rzeczy, ale nie pamiętają, co narysowały i nie mogą odtworzyć rysunków w wywołaniu new Bitmap(...). To nie działa z klasą Graphics firmy Microsoft, to nie działa z klasą XGraphics z PDFsharp.

Klasy XGraphics z PDFsharp można używać do rysowania na stronach PDF i można jej używać do rysowania na mapie bitowej, na drukarce lub na ekranie - może rysować na stronach PDF i na dowolnym DC, który można pobrać z Windows. To samo dotyczy MigraDoc.
Jeśli chcesz tworzyć pliki PDF i bitmapy o tej samej zawartości, pomocne mogą być PDFsharp i MigraDoc.

Ale PDFsharp nie zapewnia żadnego sposobu renderowania strony PDF do bitmapy.

+0

Nie rozumiem, pisząc do System.Drawing.Graphics jest możliwe, czytanie pikseli z niego wykonane celowo niemożliwe. Dla mnie tworzenie obiektu Bitmap z grafiki wygląda na rozsądne wymaganie. :( –

+11

Piszesz: "czytanie pikseli z niego zrobione celowo niemożliwe" To nie jest prawda: nie uniemożliwiamy, PDF jest formatem wektorowym Jak odczytujesz piksele z formatu wektorowego? Możesz renderować PDF do mapy bitowej i odczytać z niej piksele, ale PDFsharp nie renderuje bitmap: –

+0

Czy można tego dokonać za pomocą MigraDoc? http://www.pdfsharp.net/wiki/documentviewer-sample.ashx –