2015-10-20 3 views
4

У меня есть около ста длинных PDF-файлов в каталоге и хотелось бы знать, может ли R подсчитать, сколько страниц в каждом файле. Моя операционная система - Windows 8.Использование R, как можно подсчитать количество страниц в файле PDF?

Вот ссылка на 10-страничный PDF-файл, если это поможет вам протестировать ваше решение. MWE pdf file

Возможно, можно считать страницы PDF с помощью python, но я не знаю этого языка python solution. Другие решения обсуждались на SO, используя, например, Imagemagick. и C##.

+1

Если 'Rpoppler :: PDF_info (имя файла) $ Страницы ' не работает, то (prbly) самый быстрый способ, чтобы захватить [Poppler для Windows] (http://blog.alivate.com.au/poppler-windows/) и используйте 'system2' для запуска' pdfinfo' в файлах и извлеките строку 'Pages:'. – hrbrmstr

+1

Обратите внимание, что 'Rpoppler', похоже, не доступен для Windows. – Benjamin

+0

Я не пытался его компилировать в Windows (мне пришлось использовать 'type =" source "' на OS X тоже), но так как Курт сделал это, я сделал предположение, что если все звезды выровнены в Windows коробка будет работать. Другой вариант - использовать [автономные инструменты для poppler для Windows] (http://blog.alivate.com.au/poppler-windows/) и использовать 'system2' для инструмента' pdfinfo' и захватить строку 'Pages:'. – hrbrmstr

ответ

0

На R версии 3.3.2 pdftools работы:

library(pdftools) 
pdfInfo <- pdf_info(<path to PDF file>) 
pdfInfo$pages 
0

Я работаю над машиной Windows 7, но мой опыт в Windows 8 заставляет меня думать, что он должен работать так же хорошо для вас.

Я не смог скомпилировать пакет Rpoppler, и, как указывает hrbrmstr, это, вероятно, не стоит сражаться. Если у вас есть 7-Zip, вы можете извлечь утилиту poppler для Windows. Я извлек их на место C:\poppler. Оказавшись там, я могу сделать следующий

file_name <- "C:/[file_path]/whitepaper-pdfprimer.pdf" 

pdf_pages <- function(file_name){ 
    require(magrittr) 
    pages <- system2("C:/poppler/bin/pdfinfo.exe", 
        args = file_name, 
        stdout = TRUE) 
    pages[grepl("Pages:", pages)] %>% 
    gsub("Pages:", "", .) %>% 
    as.numeric() 
} 

pdf_pages(file_name) 

И если у вас есть вектор имен файлов, которые вы хотите передать

vapply(file_names, pdf_pages, numeric(1)) 

Кредита @hrbrmstr для указывая на Poppler инструментов (я бы никогда слышали о них до сегодняшнего дня).

+0

Попробуйте пакет 'Rpoppler'? Я считаю, что это будет работать на Linux. – Benjamin

+0

Да, это работает в Linux, подтверждено. Это работает 'Rpoppler :: PDF_info ("/usr/share/doc/cvs/cvs.pdf ") $ Pages'. Обсуждено здесь http://unix.stackexchange.com/a/331185/16920 –