0

我正在使用 iTextSharp 在 PDF 中搜索关键字,并提取包含该关键字的任何行。我想做的不仅是提取带有关键字的行,而且是后续行。带关键字的行和下一行,带关键字的行和接下来的 2 行,等等。

我已经挂断了一段时间,尝试数组、哈希表、迭代器......它们都没有正常工作。任何帮助表示赞赏。这是我一直在使用的基本设计: $reader = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList anypdf.pdf

for ($page = 1; $page -le $reader.NumberOfPages; $page++) {
    $lines = [char[]]$reader.GetPageContent($page) -join "" -split "`n"

    foreach ($line in $lines) {
        if ($line -match $searchstring) {
            $line = $line -replace "^\[\(|\)\]TJ$", "" -split "\)\-?\d+\.?\d*\(" -join ""    
            $line = $line -replace "\\([\S])", $matches[1]
            Write-host $line
        }
    }
}

我不能相信从 PDF 中去除不需要的字符的逻辑,这可能就是我还没有弄清楚这一点的原因。上面的代码让我得到任何包含关键字的行。问题似乎是 PDF 被分成页面,而这些页面被分成几行(每行都是一个字符数组)。如果我可以从一开始就简单地为 PDF 中的每一行创建一个哈希表,那将是很好和高效的。

4

1 回答 1

0

这就是Select-String发明的目的。

for ($page = 1; $page -le $reader.NumberOfPages; $page++) {
  [char[]]$reader.GetPageContent($page) -join "" -split "`n" `
    | Select-String $searchstring -Context 0,2 `
    | % {
        $_ -replace "^\[\(|\)\]TJ$", "" `
           -split "\)\-?\d+\.?\d*\(" -join "" `
           -replace "\\([\S])", $_.Matches.Value
      }
}

我不太了解您在那里所做的所有拆分、合并和替换,因此您可能需要对其进行调整。

另外,上面不包括后面的上下文,因为我不知道你想要它去哪里。它可以通过 访问$_.Context.PostContext

于 2013-08-03T15:12:20.857 回答