在我的程序中,我从PDF文件中提取文本,效果很好。 ItextSharp逐行从PDF中提取文本。但是,当PDF文件包含2列时,提取的文本不正常,因为每行连接两列。
我的问题是:如何逐列提取文本?
以下是我的代码。 PDF文件是阿拉伯语。对不起,我的英语不太好。
PdfReader reader = new PdfReader(@"D:\test pdf\Blood Journal.pdf");
int intPageNum = reader.NumberOfPages;
string[] words;
string line;
for (int i = 1; i <= intPageNum; i++)
{
text = PdfTextExtractor.GetTextFromPage(reader, i,
new LocationTextExtractionStrategy());
words = text.Split('\n');
for (int j = 0, len = words.Length; j < len; j++)
{
line = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(words[j]));
// other things here
}
// other things here
}
答案 0 :(得分:3)
您可能希望使用RegionTextRenderFilter
来限制列区域,然后使用LocationTextExtractionStrategy
来提取文本。但是,这需要您正在解析的PDF文件的先验知识,即您需要有关列的位置和大小的信息。
更详细地说,您需要传入列的坐标以定义矩形,然后从该矩形中提取文本。样本将是这样的:
PdfReader reader = new PdfReader(@"D:\test pdf\Blood Journal.pdf");
int intPageNum = reader.NumberOfPages;
private string GetColumnText(float llx, float lly, float urx, float ury)
{
// reminder, parameters are in points, and 1 in = 2.54 cm = 72 points
var rect = new iTextSharp.text.Rectangle(llx, lly, urx, ury);
var renderFilter = new RenderFilter[1];
renderFilter[0] = new RegionTextRenderFilter(rect);
var textExtractionStrategy =
new FilteredTextRenderListener(new LocationTextExtractionStrategy(),
renderFilter);
var text = PdfTextExtractor.GetTextFromPage(reader, intPageNum,
textExtractionStrategy);
return text;
}
这是另一篇讨论你想要的内容的帖子,你也可以查一下:iTextSharp - Reading PDF with 2 columns。但是他们也没有找到解决方案:(