@ n0nufの足跡をたどって、特定のフォルダー内のすべてのPDFをpdfinfoでチェックし、壊れている場合は修正する試みとしてcpdfにプッシュするバッチスクリプトを作成しました。
@ECHO OFF
FOR %%f in (*.PDF) DO (
    echo %%f
    pdfinfo "%%f" 2>&1 | findstr /I "error"  >nul 2>&1
    if not errorlevel 1 (
        echo "bad -> try to fix"
        @cpdf -i %%f -o %%f_.pdf 2>NUL
        mv %%f .\\bak\\%%f
    ) else (
       REM echo good        
    )
)
@ECHO ON
またはbashスクリプトと同じ:
for file in $(find . -iname "*.pdf")
do
    echo "$file"
    pdfinfo "$file" 2>&1 | grep -i 'error' &> /dev/null
    if [ $? == 0 ]; then
       echo "broken -> try to fix"
       cpdf -i "$file" -o "$file"_.pdf
    fi
done
壊れたPDFはサブフォルダ\ bakに移動され、再作成されたPDFには_.pdfというサフィックスが付きます(これは完璧ではありませんが、私には十分です)。注:再作成されたPDFはエラーが少なく、通常のPDFビューアで表示できるはずです。しかし、これはすべてのコンテンツを取り戻すという意味ではありません。回復不可能なコンテンツは空のページにつながります。
ここで@kraftydevilによって提案されたJHOVE(オープンソースファイル形式の識別、検証、特性評価ツール)でも同じことを試しました:Linuxのコマンドラインを使用してPDFファイルが破損していないか確認し、これが有効なアプローチであることを確認できます。(最初はあまり成功しませんでしたが、JHOVEの出力を正しく処理していないことに気付きました。)
両方のアプローチをテストするために、テキストエディターを使用してPDFからランダムな部分を削除および変更しました(ストリームが削除されたため、PDFビューアでページをレンダリングできず、PDFタグが変更され、一部のビットがシフトされました)。結果は次のとおりです。pdfinfoとJHOVEの両方で、破損したファイルを正しく検出できます(場合によっては、JHOVEはさらに敏感でした)。
そして、これがJHOVEと同等のスクリプトです。
@ECHO OFF
FOR %%f in (*.PDF) DO (
    echo %%f
    "C:\Program Files (x86)\JHOVE\jhove.bat" -m pdf-hul %%f | findstr /C:"Well-Formed and valid" >nul 2>&1
    if not errorlevel 1 (
        echo good
    ) else (
        echo "bad -> try to fix"
        @cpdf -i %%f -o %%f_.pdf 2>NUL
        REM mv %%f .\\bak\\%%f
    )
)
@ECHO ON