xpdf/mupdf/pdfbox, wyciąganie pozycji elementów

0

jak w tytule - czy za pomocą biblioteki iTextSharp da się wyciągnąć położenie (offset w pikselach, procentach, łokciach, stajaniach, latach świetlnych... cokolwiek) w pdf jakiegoś elementu, na przykład tekstu? jeśli się da, to jak? od razu uprzedzam, że nie buduję nowego dokumentu, tylko chcę sparsować istniejący.

znalazłem opinie, że ta biblioteka średnio nadaje się do parsowania/analizy pdf; zgadzacie się z tą opinią? co lepszego (możliwie darmowego) mogę użyć?

0

tak mi się przypomniało - itextsharp w wersji bodajże 4.0.8, co oznacza, że itextextractionstrategy czy jak mu tam odpada :\

0

udało mi się wydobyć chyba wszystkie teksty, to koszmarnie niskopoziomowe rzeźbienie, niemal równie dobrze mógłbym to napisać sam bez pomocy itextsharp.
więc mam tekst, mam token z nim powiązany, mam listę obiektów Tm ("macierz" skali i przesunięć) oraz Td (offset elementu), tylko za cholerę nie umiem użyć tych danych do obliczenia współrzędnej tekstu na stronie. użycie ostatniego Td nic nie daje, dodawanie samych Td nic nie daje, ani użycie ostatniego Tm i sumy Td, ostatniego Tm i ostatniego Td... jakieś pomysły? ktoś z was zajmował się bieganiem po pdf? jak się używa Tm i Td?

0

iTextSharp nie nadaje się do parsowania pdf (a przynajmniej nie z moim stanem wiedzy).
udało mi się częściowo zrobić to przy pomocy PDFBox'a, ale niestety biblioteka jest ciężka i niezbyt szybka (port z javy - dochodzi około 10MB IKVM i 6MB samej biblioteki, start środowiska trwa kilka sekund, na szczęście później przyspiesza), a dokumentacja ssie. udało mi się wyciągnąć wszystkie teksty razem z ich pozycjami, ale jak zachciało mi się mieć jeszcze wszystkie linie ("l" i "m") i prostokąty ("re"), to zrobiło się pod górkę; niektóre wyciągane moją metodą linie mają nieprawidłowe współrzędne. wiem, że PDFBox potrafi narysować całego pdfa dobrze (gotowa metoda do eksportowania do obrazka działa poprawnie), tylko ja nie umiem zmusić go do tego. bawił się ktoś pdfbox'em?

zacząłem rozglądać się za kolejnymi bibliotekami. PDFsharp, Report.NET, SharpPDF, ASP.NET fo PDF, PDFjet Open Source Edition - wszystkie odpadają, mają znikomy interfejs do parsowania pdf. PDF Clown wygląda fajnie, ale... wymaga .net 3.5, a ja z pewnych względów muszę mieć 2.0. Ghostview jest dla mnie niezrozumiałe i chyba nie ma porta do c#.
walczę teraz z xpdf i mupdf, xpdf jest bardzo szybki, nieduży (dll ma 3MB - pikuś przy 15MB PDFBox'a), ma opakowanie w c# pod .net 2.0 i na pewno potrafi zrobić to, co potrzebuję, tylko brak dobrej dokumentacji. mupdf nie ma w ogóle dokumentacji. i tu kolejne pytanie, może tym razem uda mi się uzyskać odpowiedź - czy ktoś z was pracował z xpdf lub mupdf i może mi podpowiedzieć jak mogę zebrać listę wszystkich tekstów i linii oraz ich położeń na danej stronie?

0

Nie pomogę Ci z Twoim egzotycznym problemem, ale co do tego:

ŁF napisał(a):

PDF Clown wygląda fajnie, ale... wymaga .net 3.5, a ja z pewnych względów muszę mieć 2.0. Ghostview jest dla mnie niezrozumiałe i chyba nie ma porta do c#.

Słyszałem, że można skompilować aplikację pod 2.0, dodać dllki z 3.5 do referencji, i program wówczas działa. (Przynajmniej niektóre programy mojemu byłemu kierownikowi.)

0

jest to jakieś rozwiązanie... ale po dwóch dniach grzebania w sieci znalazłem coś, od czego w ogóle powinienem zacząć (bo już używałem tej biblioteki, choć trochę w innym celu) - xpdf/mupdf plus wrapper do c# pod .net 2.0. znalezienie pozycji tekstu jest banalne, a biblioteka jest zajebiaszczo szybka i lekka. tylko jeszcze muszę obczaić jak wyciągnąć położenia tych cholernych linii i innych figur geometrycznych, ale widzę światełko na końcu tunelu.

0

Witam
Od pewnego czasu też siedzę w necie i szukam jakiegoś rozwiązania, jak ustalić pozycje x,y konkretnego słowa w pdfie.
Używałem bibliotek pdfsharp i itextsharp, ale nic konkretnego nie znalazłem.
Jeśli ktoś by znalazł jakieś rozwiązanie lub znalazł jakiegoś linka to byłbym wdzięczny za info.

0

PdfLibNet skompilowana ze źródeł dostępnych w necie. możesz tam wylistować (IEnumerable WordList) wszystkie słowa znajdujące się na stronie wraz z ich połozeniem, szerokością, wysokością itp. można też wyciągnąć słowa znajdujące się w danym prostokącie (pages[i].ExtractText(...)), ale mi zawsze zwracało pustego stringa. nie działało mi też rysowanie po kontrolkach (konkretnie - po bitmapie) - jednak w dołączonym przykładowym programie wszystko działa z dokładnie tą samą biblioteką, z którą nie działa mi, więc na pewno to ja coś źle zrobiłem. na szczęście page.WordList i document.ExtractJpeg() do pliku działają wyśmienicie i mnie urządziły.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0