2012-04-20 2 views
7

У меня есть входной файл, и до «загрузки» мне нужно подсчитать количество страниц этого .pdf в JAVASCRIPT (например, JQuery ...)Как получить количество страниц .PDF, загруженных пользователем?

+1

Проверить это https://github.com/mozilla/pdf.js – elclanrs

+0

Кроме того, вы можете ограничить размер файла, который может быть загружен на ваш сайт, если вас беспокоит чрезмерное количество страниц. – halfer

ответ

0

Вы могли быть в состоянии сделать что-то с помощью pdf.js , но это потребует некоторых экспериментов.

+4

Вы * можете * сделать это с помощью PDF.JS, как указано ниже: @Sid Thakur ниже или прямо здесь: https://github.com/mozilla/pdf.js/blob/e9cdf6bb01a22bd7dda534b56ec2efca52597cfd/examples/node/ getinfo.js. Обновите выбранный ответ! – seb

+1

ответ не должен просто указывать «возможно» ... –

1

Как уже было сказано в других ответах, что-то вроде pdf.js - это то, что вы ищете. Я взглянул на API и включил функцию numPages(), чтобы вернуть общее количество страниц. Он также, кажется, считает страницы для меня при просмотре demo page from Mozilla.

Это зависит от того, можете ли вы использовать современные браузеры и экспериментальные технологии для вашего решения. pdf.js очень впечатляет, но он по-прежнему экспериментально соответствует github page.

Если вы можете рассчитывать страницы на сервере после загрузки, вы должны посмотреть на pdftools или аналогичные.

Нечто подобное pdftools --countpages является то, что вы ищете

21

В случае, если вы используете pdf.js вы можете ссылаться на example on github (».../примеры/узел/getinfo.js') с помощью следующего кода, который печатает номер страниц в pdf-файле.

const pdfjsLib = require('pdfjs-dist'); 
... 
pdfjsLib.getDocument(pdfPath).then(function (doc) { 
    var numPages = doc.numPages; 
    console.log('# Document Loaded'); 
    console.log('Number of Pages: ' + numPages); 
} 
2

и чисто Javascript решение:

var input = document.getElementById("files"); 
var reader = new FileReader(); 
reader.readAsBinaryString(input.files[0]); 
reader.onloadend = function(){ 
    var count = reader.result.match(/\/Type[\s]*\/Page[^s]/g).length; 
    console.log('Number of Pages:',count); 
} 
+0

Это регулярное выражение работает с документами, выполняющими ряд допущений и, в частности, может быть сбой для документов с несколькими версиями или интенсивным использованием потока объектов. – mkl

+0

Я тестировал его на многих pdf-документах, и он работает. у вас есть образец? –

+0

Я мог бы создать любое количество образцов: как вы, конечно же, знаете, формат PDF на уровне байтов позволяет добавлять комментарии; таким образом, я мог бы просто добавить любое количество комментариев, содержащих «/ Type/Page» в существующий документ, и поэтому регулярное выражение возвращает слишком высокий результат. Но вы, вероятно, не имеете в виду построенные примеры, а реальные. Для этого вы можете посмотреть на такие вопросы, как [этот] (http://stackoverflow.com/q/30236358/1729265) и т. Д. – mkl

Смежные вопросы