You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中不使用iTextSharp搜索PDF文件中的匹配模式

哈哈,我懂你为啥用Select-String不行——PDF可不是纯文本文件啊!直接用它搜相当于在一堆二进制乱码里找东西,肯定找不到。不用iTextSharp的话,咱们有几个靠谱的办法,我给你捋捋:

为什么Select-String对PDF无效?

Select-String是专门处理纯文本文件的工具,它会直接读取文件的原始字节流并尝试匹配正则模式。但PDF是一种封装了字体、排版、压缩数据的二进制格式,里面的文本并不是以可读的ASCII/UTF-8直接存储的,所以直接搜索根本找不到目标内容。核心思路必须是先把PDF里的文本提取成纯文本,再用常规的文本搜索工具去匹配。

方法1:用pdftotext(Poppler工具集)提取文本后搜索

这是最常用的轻量方案,pdftotext是Poppler工具集里的一个小工具,专门用来把PDF转成纯文本,跨平台还免费。

步骤如下:

  1. 下载Poppler的Windows版本(直接搜Poppler Windows就能找到可信的下载源,比如GitHub镜像),解压到你方便的路径,比如C:\Poppler\bin。
  2. 用PowerShell调用它转换PDF为文本,再用Select-String搜索:
# 配置路径
$pdftotextPath = "C:\Poppler\bin\pdftotext.exe"
$pdfPath = "C:\path\to\your\target.pdf"
$tempTextFile = [System.IO.Path]::GetTempFileName() + ".txt"

# 把PDF转成纯文本
& $pdftotextPath $pdfPath $tempTextFile

# 搜索目标模式
$searchPattern = "你要找的内容或者正则表达式"
Select-String -Path $tempTextFile -Pattern $searchPattern

# 清理临时文件
Remove-Item $tempTextFile -Force
方法2:用Microsoft Word COM对象(需安装Office)

如果你电脑上已经装了Microsoft Word,可以利用它的COM接口来打开PDF并提取文本——Word本身就支持把PDF转换成可编辑的文本内容。

注意:用完一定要清理COM对象,避免Word进程残留后台。代码示例:

$pdfPath = "C:\path\to\your\target.pdf"
$searchPattern = "你要找的内容或者正则表达式"

# 启动Word后台进程
$word = New-Object -ComObject Word.Application
$word.Visible = $false

try {
    # 打开PDF(Word会自动完成格式转换)
    $doc = $word.Documents.Open($pdfPath)
    
    # 提取所有文本
    $docText = $doc.Content.Text
    
    # 用正则匹配或者Select-String搜索
    $matches = [regex]::Matches($docText, $searchPattern)
    
    if ($matches.Count -gt 0) {
        Write-Host "找到匹配项:"
        foreach ($match in $matches) {
            Write-Host "- $($match.Value)"
        }
    } else {
        Write-Host "未找到匹配项"
    }
} finally {
    # 清理资源,关闭Word进程
    $doc.Close()
    $word.Quit()
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($doc) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
    [System.GC]::Collect()
    [System.GC]::WaitForPendingFinalizers()
}
小提示
  • 批量处理PDF的话,pdftotext效率更高,而且不依赖Office,适合服务器环境;
  • 如果是扫描生成的PDF(本质是图片),不管哪种方法都提取不了文本,这时候需要搭配OCR工具,不过这是另一个场景了;
  • 两种方法都可以根据需求调整,比如修改pdftotext的参数保留排版,或者用正则做更复杂的匹配。

内容的提问来源于stack exchange,提问作者saik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:10:27