@ n0nuf의 발자취를 따라 pdfinfo를 사용하여 특정 폴더의 모든 PDF를 확인하고 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