חילוץ טקסט מ PDF
-
מישהו יודע איך לעשות את זה בצורה טובה?
היכן יש מידע ברור איך קבצי PDF בנוים?
פתחתי קובץ PDF בפנקס רשומות ויש שם כותרות מעין אלו:
endstream
endobj
258 0 obj
<</Filter/FlateDecode/Length 3493>>streamובין הכותרות מידע בינארי. איפה אפשר ללמוד על כל זה?
אגב מי שהתרשמתי ממנו שעשה עבודה טובה וחילץ את הטקסט מPDF בצורה מדוייקת כמו אקרובט זה אוצר החכמה הנה קישור להורדה חינמית שהם פירסמו:
http://80.179.48.194/importpdf.zip
שילוב של כמה שפות תיכנות.פורסם במקור בפורום CODE613 ב25/07/2013 21:13 (+03:00)
-
לגבי חילוץ טקסט מpdf יש את הכלי xpdf זה בקוד פתוח. שאיתו אפשר לחלץ טקסט תמונות וכו'.
זה גירסה לוינדוס
http://gnuwin32.sourceforge.net/packages/xpdf.htmבגדול pdf בנוי מאובייקטים כמו שאתה יכול לראות.
ואם אתה רוצה ללמוד את זה לעומק אז יש לזה תקן מסודר.
http://www.adobe.com/devnet/pdf/pdf_reference.html
פורסם במקור בפורום CODE613 ב25/07/2013 21:28 (+03:00)
-
אם אתה יודע javascript.
אז יש פרוייקטים פה https://npmjs.org/search?q=pdf
שמפענחים pdf ע"י js טהור.
פורסם במקור בפורום CODE613 ב25/07/2013 21:34 (+03:00)
-
ניסיתי את XPDF אבל קיבלתי הודעת שגיאה שהוא לא תומך בגירסאות PDF מעל 1.4
אני לא כותב (בנתיים) ב JS אבל האם אפשר לתקשר עם DLL המדובר של JS בדוט נט?תחפש את הודעת שגיאה בגוגל לא סביר שהוא לא תומך בגירסאות יותר מעל 1.4
פורסם במקור בפורום CODE613 ב25/07/2013 22:27 (+03:00)
-
היה קשה למצוא pdf שיותר מ1.4 בסוף מצאתי אחד של 1.5
ניסתי עליו במחשב שלי (יש לי לינוקס וזה מותקן בחבילות של המחשב) וזה עבד טוב.
כנראה הלינק הקודם זה גירסה ישנה.
זה נראה לי הכי חדש.
http://www.foolabs.com/xpdf/download.htmlפורסם במקור בפורום CODE613 ב26/07/2013 09:34 (+03:00)
-
אני משתמש בitextsharp
הנה קוד בVB
Private Function ReadPdfFile(fileName As String) As String Dim text As New StringBuilder() If File.Exists(fileName) Then Dim pdfReader As New PdfReader(fileName) 'For page As Integer = 1 To pdfReader.NumberOfPages Dim strategy As parser.ITextExtractionStrategy = New parser.SimpleTextExtractionStrategy() Dim currentText As String = parser.PdfTextExtractor.GetTextFromPage(pdfReader, 1, strategy) currentText = New String(currentText.Reverse().ToArray) text.Append(currentText) 'Next pdfReader.Close() End If Return text.ToString() End Function
פורסם במקור בפורום CODE613 ב26/07/2013 15:00 (+03:00)
-
תודה רבה זה ממש מצויין! פעם אחרונה שראיתי קוד שמשתמש בסיפריה הזו לחילוץ טקסט מ PDF היה הכל בג'יבריש...
אבל זה ממש מצוייןרק הבעיה שהוא מביא את השורות מסוף העמוד לתחילתו ברוורס...
לכן היתי צריך לכתוב קצת אחרת את הפונקציות הבאות:Private Function ReadPdfFile2(fileName As String) As String Dim text As New StringBuilder() If File.Exists(fileName) Then Dim pdfReader As New pdf.PdfReader(fileName) For page As Integer = 1 To pdfReader.NumberOfPages text.AppendLine(parser.PdfTextExtractor.GetHebTextFromPage( pdfReader, page) & vbCrLf) Next pdfReader.Close() End If Return text.ToString() End Function
כמו שאתם רואים יש פה פונקציה חדשה שנקראת GetHebTextFromPage שלא קיימת בספריית ITEXT זו עוד פונקציה שהיתי צריך להוסיף
public static String GetHebTextFromPage(PdfReader reader, int pageNumber) { PdfReaderContentParser parser = new PdfReaderContentParser(reader); return parser.ProcessContent(pageNumber, new LocationTextExtractionStrategy()).GetResultantHebText(); }
ועוד פונקציה אחרונה חדשה
public string Reverse(string input) { char[] chars = input.ToCharArray(); Array.Reverse(chars); return new String(chars); } public virtual String GetResultantHebText() { if (DUMP_STATE) DumpState(); locationalResult.Sort(); StringBuilder sb = new StringBuilder(); StringBuilder sb2 = new StringBuilder(); TextChunk lastChunk = null; foreach (TextChunk chunk in locationalResult) { if (lastChunk == null) { sb2.Append(chunk.text[0] > 127 ? chunk.text : Reverse(chunk.text)); } else { if (chunk.SameLine(lastChunk)) { sb2.Append(chunk.text[0] > 127 ? chunk.text : Reverse(chunk.text)); } else { sb2.Append(chunk.text[0] > 127 ? chunk.text : Reverse(chunk.text)); sb.AppendLine(Reverse(sb2.ToString())); sb2 = new StringBuilder(); } } lastChunk = chunk; } return sb.ToString(); }
פורסם במקור בפורום CODE613 ב26/07/2013 16:28 (+03:00)
-
סליחה שאני כותב עוד לפני שקראתי הכל ובדקתי לעומק, אבל כדי לא לבזבז זמן אשאל את המנוסים כבר, אפשר לחלץ בעיקרון טקסט לפי מיקום מדוייק של קווי X-Y כלומר יש לי ריבוע שקבוע נמצא שם תעודת זהות, האם אני יכול פשוט לגשת לריבוע לפי מיקום פיזי במסמך.
תודה.פורסם במקור בפורום CODE613 ב22/07/2014 20:54 (+03:00)
-
https://github.com/modesty/pdf2json
נראה שזה יכול לתת טקסט עם מיקום.
פורסם במקור בפורום CODE613 ב22/07/2014 22:02 (+03:00)
-
-
@דוד ל.ט.
אתה לא אמור להוציא לפי מיקום.
אם זה תמיד במיקום מסויים, אז זה בהכרח גם במבנה זהה, ואתה יכול להוציא לפי מבנה. לדוגמה הפסקה החמישית.אם זה לא כטקסט אלא כפיקסלים אתה צריך להוציא אכן לפי מיקום.
אני מבין וחשבתי ע"ז יש שם מידע שהמחלקה של אייטקסט לא מזהה אותו וכנראה צריך OCR למזלי זה מידע של ספרות כך שאין צורך ב OCR עברי. חבל שאני לא יכול להעלות את הקובץ, מדובר במידע שמגיע ממשרדי ממשלה ונוגע לפרטיות של אנשים.... (לערוך את הקובץ PDF כדי לטשטש את המידע האישי צריך תוכנה, ואין לי את התוכנה לעריכת PDF זה צריך להגיע אלי בדואר רשום ממקסיקו עוד מאתיים שנה :lol: :lol: :lol: :lol: )
פורסם במקור בפורום CODE613 ב23/07/2014 17:41 (+03:00)