使用ItextSharp阅读C#中的PDF列
本文关键字:PDF 中的 ItextSharp 阅读 使用 | 更新日期: 2023-09-27 18:19:34
在我的程序中,我从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
}
您可能希望使用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-阅读PDF,有两列。但他们也没有找到解决方案:(