使用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
}

使用ItextSharp阅读C#中的PDF列

您可能希望使用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,有两列。但他们也没有找到解决方案:(