Есть ли способ узнать количество страниц в документе doc? - PullRequest
0 голосов
/ 24 октября 2018

Желательно сделать это в браузере с помощью JavaScript.Я уже могу разархивировать файл doc и прочитать файлы xml, но не могу найти способ подсчета страниц.Я надеюсь, что свойство существует в XML-файлах, и мне просто нужно его найти.

edit: я бы не сказал, что это дубликат Есть ли способ подсчета страниц doc, docx, pdfтолько с js (без Node.js)? Мой вопрос относится только к файлам word doc / docx, и этот вопрос так и не был решен.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Теоретически следующее свойство может возвращать эту информацию из файла Word Open XML, используя Open XML SDK:

int pageCount = (int) document.ExtendedFilePropertiesPart.Properties.Pages.Text;

На практике, однако, это ненадежно.Это может сработать, но с другой стороны, это может не сработать - все зависит от 1) того, что Word удалось сохранить в файле до его закрытия, и 2) какого рода редактирование могло быть выполнено для закрытого файла.

Единственный верный способ получить номер страницы или количество страниц - это открыть документ в интерфейсе приложения Word.Количество страниц и количество страниц рассчитывается динамически, во время редактирования, Word.Когда документ закрыт, эта информация является статической и не обязательно должна быть такой, какой она будет, когда документ открыт или распечатан.

См. Также https://github.com/OfficeDev/Open-XML-SDK/issues/22 для подтверждения.

0 голосов
/ 24 октября 2018

Когда вы говорите «сделайте это в браузере», я предполагаю, что у вас есть работающий веб-сервер с LAMP или его эквивалентом.В PHP есть довольно полезная опция для файлов .docx.Пример функции php:

function number_pages_docx($filename)
{
$docx = new docxArchive();

if($docx->open($filename) === true)
{  
    if(($index = $docx->locateName('docProps/app.xml')) !== false)
    {
        $data = $docx->getFromIndex($index);
        $docx->close();

        $xml = new SimpleXMLElement($data);
        return $xml->Pages;
    }

    $docx->close();
}

return false;
}
...