תודה רבה זה ממש מצויין! פעם אחרונה שראיתי קוד שמשתמש בסיפריה הזו לחילוץ טקסט מ 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)