2013-08-03 68 views
0

我正在使用iTextSharp搜索關鍵字的PDF,並提取任何包含該關鍵字的行。我想要做的不僅是提取帶有關鍵字但後續行的行。 帶關鍵字和下一行的行,包含關鍵字和接下來的兩行的行等PowerShell解析PDF並提取多行

我已經掛了這一段時間,嘗試數組,哈希表,迭代器......沒有人工作對。任何幫助表示讚賞。這是基本的設計,我一直在與: $讀卡器=新物體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中創建每行的哈希表,那將會非常有效。

回答

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訪問。

+0

謝謝你的迴應,請原諒我的無知......但你如何獲得這個代碼中的第二條'線'?它爲第一場比賽找到了工作,但不是第二場。 – yodish

+0

你的意思是後環境線?像這樣:'$ _。Context.PostContext'。對不起,我以前忽略了這一點信息。 –

+0

謝謝你,我到了那裏! – yodish