C# 从特定位置读取

C# 从特定位置读取,c#,itextsharp,ocr,C#,Itextsharp,Ocr,我在从PDF文件读取数据时使用iTextSharp时遇到问题。我想要实现的是只读取PDF页面的特定部分(我只想检索地址信息,它位于固定位置)。我在阅读以下所有页面时看到了iTextSharp的用法: StringBuilder text = new StringBuilder(); if (File.Exists(fileName)) { PdfReader pdfReader = new PdfReader(fileNa

我在从PDF文件读取数据时使用iTextSharp时遇到问题。我想要实现的是只读取PDF页面的特定部分(我只想检索地址信息,它位于固定位置)。我在阅读以下所有页面时看到了iTextSharp的用法:

        StringBuilder text = new StringBuilder();

        if (File.Exists(fileName))
        {
            PdfReader pdfReader = new PdfReader(fileName);

            for (int page = 1; page <= pdfReader.NumberOfPages; page++)
            {
                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);

                currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
                text.Append(currentText);
            }
            pdfReader.Close();
        }
        return text.ToString();
StringBuilder text=new StringBuilder();
if(File.Exists(fileName))
{
PdfReader PdfReader=新PdfReader(文件名);

对于(int page=1;page您可以做的一件事是将地址字段设置为PDF表单字段,然后您可以通过直接访问表单字段来提取信息。

您使用的是
SimpleTextExtractionStrategy
而不是
LocationTextExtractionStrategy
。请阅读官方文档和accomp任何示例(/)。如果
rect
是基于地址坐标的矩形,则需要:

RenderFilter[] filter = {new RegionTextRenderFilter(rect)};
ITextExtractionStrategy strategy;
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= reader.NumberOfPages; i++) {
    strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter);
    sb.AppendLine(PdfTextExtractor.GetTextFromPage(reader, i, strategy));
}
左下角的坐标是x=
mediabox.left
和y=
mediabox.Bottom
;右上角的坐标是x=
mediabox.right
和y=
mediabox.Top


x的值从左到右递增;y的值从下到上递增。PDF中测量系统的单位称为“用户单位”。默认情况下,一个用户单位与一个点重合(这可能会发生变化,但您不会发现许多具有不同用户单位值的PDF)。在正常情况下,72个用户单位=1英寸。

如果我是生成文档的人,这将是一件非常有用的事情。我没有创建布局,也不能更改布局,因此我无法使用此选项。很酷,我只是想提醒您注意。谢谢,这就是我要找的!不过有一个问题;cna我如何设置区域?我认为它是以像素为单位测量的,但当我输入(我认为是)正确的值时,我没有得到结果,因为字符串位于不同的位置。@BrunoLowagie
RegionExtrenderFilter
FilteredExtrenderListener
似乎不再是.net程序集的一部分。
Rectangle mediabox = reader.GetPageSize(pagenum);