gpt4 book ai didi

c# - iTextSharp 从特定位置读取

转载 作者:太空狗 更新时间:2023-10-30 00:31:38 24 4
gpt4 key购买 nike

从 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();

但是我怎样才能将它限制在特定位置呢?我愿意使用任何东西,甚至是 OCR 技术,因为将来可能会发生某些文件将是图像的情况(但目前不是必需的)。此项目仅供本人使用,请勿用于商业用途。

谢谢!

最佳答案

您正在使用 SimpleTextExtractionStrategy 而不是 LocationTextExtractionStrategy。请阅读官方文档和附带的示例 ( Java/C# )。如果 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));
}

现在您将获得与 rect 相交的所有文本片段(因此部分文本可能在 rect 之外,iText 不会在其中剪切文本片段件)。

请注意,您可以使用以下方法获取页面的 MediaBox:

Rectangle mediabox = reader.GetPageSize(pagenum);

左下角坐标为x = mediabox.Left and y = mediabox.Bottom;右上角的坐标是 x = mediabox.Right 和 y = mediabox.Top

x的值从左到右递增; y 的值从底部到顶部增加。 PDF 中度量系统的单位称为“用户单位”。默认情况下,一个用户单位与一个点重合(这可以更改,但您不会找到许多具有不同 UserUnit 值的 PDF)。在正常情况下,72 个用户单位 = 1 英寸。

关于c# - iTextSharp 从特定位置读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24185066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com