2012-03-06 22 views
6

Mam dość proste zadanie: muszę odczytać plik PDF i zapisać jego zawartość obrazu, ignorując jego treść. Zasadniczo potrzebuję uzupełnienia "zapisz jako tekst".C# PDFSharp: Przykłady sposobu usuwania tekstu z pliku PDF?

Idealnie wolałbym uniknąć jakiejkolwiek kompresji zawartości obrazu, ale jeśli nie jest to możliwe, to też jest w porządku.

Czy przykłady, jak to zrobić?

Dzięki!

Odpowiedz

0

Przykład bibliotek PDFSharp wyodrębnianie obrazów z pliku pdf:

link

library

EDIT:

Następnie, jeśli chcesz, aby wyodrębnić tekst z obrazka trzeba użyć biblioteki OCR .

Są dwa dobre OCRs tessnet Modi
Link to thread on stack
Ale ja w pełni mogę polecić MODI którego używam teraz. Niektóre próbki @codeproject.

EDIT 2:

Jeśli nie chcą czytać tekst z wyodrębnionych obrazów, należy napisać nowy dokument PDF i umieścić je wszystkie do niego. Do pisania plików PDF używam MigraDoc. Nie jest trudno korzystać z tej biblioteki.

+0

Spojrzałem na ten przykład, ale nie jestem pewien, czy ma wszystkie elementy, których potrzebuję. Szuka "obrazów" w dokumencie. Muszę też zachować renderowanie tekstu w formie obrazu, po prostu nie chcę mieć tekstu za obrazem.Innymi słowy, chcę, aby wyjście wyglądało dokładnie tak samo jak wejście, ale chcę wyłączyć możliwość zapisywania tekstu z wyjścia. –

+0

Tak jak teraz rozumiem, chcesz czytać tekst z obrazów i zwykłego tekstu z pdf? I ułóż je razem jako co? – Mariusz

+0

Dane wejściowe PDF mogą być tylko obrazem lub obrazem + tekstem za obrazem. Muszę więc wziąć wkład i zrobić z tego tylko plik PDF z obrazem. Innymi słowy, chcę wyeksportować wszystkie nietekstowe komponenty wejściowego pliku PDF do wyjściowego pliku PDF i nie eksportować komponentów tekstowych. –

1

Wyodrębnianie tekstu z pliku PDF z PdfSharp rzeczywistości może być bardzo proste, w zależności od rodzaju dokumentu i co zamierzasz z tym zrobić. Jeśli tekst jest w dokumencie jako tekst, a nie obraz, a nie zależy Ci na pozycji ani formacie, jest to całkiem proste. Ten kod pobiera cały tekst na pierwszej stronie w formacie PDF pracuję z:

var doc = PdfReader.Open(docPath); 
string pageText = doc.Pages[0].Contents.Elements.GetDictionary(0).Stream.ToString(); 

doc.Pages.Count daje całkowitą liczbę stron, a masz dostęp do każdego z nich za pośrednictwem tablicy doc.Pages z indeksu. Nie polecam używania tutaj foreach i Linq, ponieważ interfejsy nie są dobrze zaimplementowane. Indeks przeszedł do GetDictionary, dla którego element dokumentu PDF - może się różnić w zależności od sposobu, w jaki dokumenty są tworzone. Jeśli nie otrzymasz tekstu, którego szukasz, spróbuj zapętlić wszystkie elementy.

Tekst, który się pojawi, będzie zawierał różne kody formatowania PDF. Jeśli wszystko, co musisz zrobić, to wyodrębnić łańcuchy, ale możesz znaleźć te, które chcesz, używając Regexa lub innego odpowiedniego kodu wyszukiwania ciągów znaków. Jeśli potrzebujesz czegoś z formatowaniem lub pozycjonowaniem, to powodzenia - z tego co wiem, będziesz tego potrzebować.

+0

"Tekst, który to powoduje, będzie zawierał różne kody formatowania PDF." Lub innymi słowy: łatwo jest uzyskać coś, co nie jest łatwe do odczytania, aby uzyskać prawdziwy tekst na stronie. Widziałem konwertery PDF2DOC, które działają dobrze z niektórymi plikami PDF, ale nieudolnie z innymi. –

+0

Tak, w przypadku, gdy nie było to wystarczająco jasne - w ten sposób bardzo łatwo jest wyodrębnić fragmenty tekstu dla różnych rodzajów analiz. W ogóle nie jest łatwo zrozumieć ogólne formatowanie strony i wyświetlić ją na ekranie lub zmienić układ. – Mason

+0

Rysowanie tekstu "Hello, World!" może wyglądać jak "240.2734 427.6833 Td (Hello, World!) Tj' lub może wyglądać jak" 240.2734 427.6833 Td <002B0048004F004F0052000F0003003A00520055004F00470004> Tj' lub trochę inaczej. Łatwe implementacje będą działać z niektórymi plikami, ale zawiedzie z innymi plikami. –

Powiązane problemy