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

使用iText与PowerShell拆分PDF每页为文本文件时的内容追加问题

问题原因与解决办法

你的问题核心是**SimpleTextExtractionStrategy是有状态的实例**——你在循环外初始化了一次这个策略,每次调用GetTextFromPage时,它会把当前页面的文本追加到自身已存储的内容里,而不是只返回当前页的文本。所以即使你清空了$text变量,策略本身已经累积了之前所有页面的内容,导致后续写入的文件会包含之前所有页的内容。

修复步骤

  1. 将策略的初始化代码移到for循环内部,每次处理新页面时都创建一个全新的SimpleTextExtractionStrategy实例,确保每次只提取当前页的文本。
  2. 用Join-Path拼接文件路径,避免手动拼接字符串出现路径分隔符的问题。
  3. 建议用try/finally块确保PDF资源能被正确释放,防止文件占用。

修改后的代码

$pdfReader = [PdfReader]::new($pdfName);
$pdfDocument = [iText.Kernel.Pdf.PdfDocument]::new($pdfReader);
$totalPages = $pdfDocument.GetNumberOfPages();

try {
    for ($p = 1; $p -le $totalPages; $p++) {   
        # 每次循环创建新的提取策略,避免内容累积
        [ITextExtractionStrategy] $strategy = [SimpleTextExtractionStrategy]::new();
        $page = $pdfDocument.GetPage($p);
        $text = [PdfTextExtractor]::GetTextFromPage($page, $strategy);
        # 用Join-Path安全拼接路径
        $fileout = Join-Path -Path $pageHoldTempDir -ChildPath "$textVersion$p.txt";  
        $text | Out-File -Path $fileout -Encoding UTF8;   
    }
}
finally {
    # 确保无论是否出错都关闭资源
    $pdfDocument.Close();
    $pdfReader.Close();
}

额外说明

  • Out-File默认是覆盖模式(-Append才是追加),所以只要$text是当前页的纯内容,就会正确覆盖生成单独的文件。
  • 加入-Encoding UTF8可以避免不同系统下的文本编码问题,确保生成的TXT文件兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:03:19