Автоматически определять ошибки открытия PDF-файлов - PullRequest
0 голосов
/ 13 июня 2019

У меня есть папка с более чем 1000 PDF-файлов. Небольшое количество из них не может быть открыто (потому что автоматическая операция загрузки - выполненная в R с файлом download.file в режиме "wb" (win OS) как-то не удалась). Мне нужно повторно загрузить их, но для этого я должен получить их список. Как я могу получить это эффективным способом?

Я успешно использовал полу-ручной подход: используя цикл for, я печатаю имя каждого файла и использую pdf_info () для каждого файла, который пытается открыть его. Для тех, кто подвержен ошибкам, я получаю многократное сообщение об ошибке, например:

Ошибка PDF: не удалось найти трейлерный словарь

Ошибка PDF: неверная запись XRef 6796

Ошибка PDF: неверная запись XRef 408

Ошибка PDF: неверная запись XRef 6770

Ошибка PDF: объект страниц верхнего уровня имеет неправильный тип (ноль)

Из 100 файлов, таким образом, я идентифицирую 0-2 файла, затронутых ошибками (потому что имя файла напечатано перед ошибкой). Но тогда мне придется заново скачивать каждый файл, идентифицированный таким образом. Я хотел бы использовать какое-то условие, чтобы при появлении такой ошибки имя файла добавлялось в вектор имен файлов. Я просто не могу понять, как использовать такое условие.

Вот что я делаю сейчас:

library(pdftools)

files <- list.files(pattern = "pdf$")

for (i in 1:100){
  print(i)
  pdf_info(files[i])
}

Я хотел бы изменить цикл for (или использовать альтернативный код), чтобы иметь возможность собирать имена поврежденных PDF-файлов.

1 Ответ

0 голосов
/ 13 июня 2019

Что-то вроде этого должно сделать это:

library(pdftools)

files <- list.files(pattern = "\\.pdf$")

for (file in files){
  corruptedPdfs <- list()

  tryPdfInfo <- tryCatch({
    pdf_info(file)
    }, error=function(e){e}
  )

  if(inherits(tryPdfInfo, "error")){
    corruptedPdfs[[file]] <- file
  }
}

print(corruptedPdfs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...