Перенумеровать страницы PDF

Я хочу отредактировать метаданные отсканированного PDF, чтобы назначить пользовательские номера страниц различным страницам. Например, какие сейчас страницы 1-3 я могу назвать i, ii и iii, а какие страницы 4-10 я хочу назвать 1-7. Я не хочу изменить фактический порядок страниц.

Есть ли А) Способ сделать это вообще с помощью бесплатных инструментов; и B) способ сделать это «в пакетном режиме» (то есть без необходимости перенумерации каждой страницы вручную).

23
задан 13.11.2019, 23:53

9 ответов

Существует небольшой скрипт на python, который может выполнить эту работу: https://github.com/lovasoa/pagelabels-py

В вашем случае вызов:

[ 110]
0
ответ дан 13.11.2019, 23:53

Здесь решение на основе LaTeX. Он использует пакет pdfpages для включения отсканированного PDF (здесь он называется scan.pdf). Нужные метки страниц PDF можно установить с помощью пакета hyperref с включенной опцией pdfpagelabels. Он использует обычный макрос \thepage в качестве метки, которую можно определить для строчных римских чисел. Затем счетчик страниц сбрасывается и возвращается к нормальным числам.

\documentclass[a4paper]{article}% or use 'letterpaper'
\usepackage{pdfpages}
\usepackage[pdfpagelabels]{hyperref}
\begin{document}
% Set lower case roman numbers (\Roman would be upper case):
\renewcommand{\thepage}{\roman{page}}
\includepdf[pages=1-3]{scan.pdf}
% Back to normal (arabic) numbers:
\renewcommand{\thepage}{\arabic{page}}
% Reset page counter to 1:
\setcounter{page}{1}
\includepdf[pages=4-]{scan.pdf}
\end{document}

Поместите вышеуказанный код в файл (например, scan_mod.tex) и скомпилируйте его с помощью pdflatex:

# pdflatex scan_mod

. Это приведет к scan_mod.pdf. Однако любые специальные аннотации вкл. гиперссылки исчезнут. Это не должно быть проблемой с отсканированными PDF-файлами.

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

0
ответ дан 13.11.2019, 23:54

Openoffice / Libreoffice может добиться цели с расширением pdf-import и макросом разбиения на страницы.

Не идеальное решение, но оно работает для меня (кроме использования PDF Mod - который я настоятельно рекомендую).

0
ответ дан 13.11.2019, 23:54
  • 1
    Расширение импорта PDF кажется арестованным для OpenOffice.org 3.2. Импорт (в Ничью и Писателя) дает " ошибка " ввода-вывода; – slm 13.11.2019, 23:54

Попробуйте pyPdf , библиотеку python для работы с PDF-документами. Некоторое, но не очень, программирование было бы необходимо.

Вы также можете взглянуть на PDFtk , хотя я не проверял, поддерживает ли он изменение номера страницы, связанного с отдельными страницами. Оба доступны в виде пакетов в Ubuntu.

0
ответ дан 13.11.2019, 23:55
  • 1
    Гм, PDFtk doesn' t, кажется, в состоянии сделать это. pyPdf имеет много методов для извлечения метаданных, но doesn' t, кажется, в состоянии записать их обратно в документ. – Alexander Stohr 13.11.2019, 23:55

Существует еще одно приложение, которое называется PDFEdit - оно размещено в Source Forge. Страница проекта Source Forge - Однако это не помогает, потому что вам не нужны требуемые функции

Text Editing in PDFEdit

0
ответ дан 13.11.2019, 23:55
  • 1
    @Syzygy - действительно, просто проверенный: pdfedit может показать Catalog/PageLabels Dict, если документ имеет его, но если он выбран, он говорит: " Этот словарь не имеет никаких непосредственно доступных для редактирования свойств "... За Ваше здоровье! – fadedbee 13.11.2019, 23:56
  • 2
    Я don' t на самом деле думают, что Редактирование PDF может изменить номера страниц. Я попробовал и haven' t следовавший, в любом случае. – rmuller 13.11.2019, 23:56

Существует инструмент под названием PDF Mod, который является бесплатным инструментом для изменения порядка страниц PDF.

Он может быть установлен из Ubuntu Software Center в Ubuntu 10.10 и выше.

Для установки в Ubuntu 9.10 или 10.04:

Для установки Добавьте ppa ppa:pdfmod-team/ppa к источникам программного обеспечения ( Вот как это сделать ) и установите pdfmod из центра программного обеспечения [ 116]

Адаптировано из: http://www.webupd8.org/2011/03/edit-pdf-documents-in-linux-with-pdf.html

Хорошо Удачи: D

0
ответ дан 13.11.2019, 23:56
  • 1
    А-ч, но мой вопрос wasn' t выяснение о том, как перестроить страницы. Это должно было изменить метаданные для страниц: повторно маркируйте номера страниц (вставьте римские цифры как первые несколько страниц, возможно, пропустите некоторых; PDFs поддерживают первого, конечно). – bbaassssiiee 13.11.2019, 23:56

Только что нашел указатель, который можно использовать для этого ghostscript, здесь: pdftk - Добавить и отредактировать закладки в pdf - Unix и Linux - Stack Exchange # 18600 ; он ссылается на ссылки:

Тем не менее, вышеизложенное относится к закладкам, а не к логической нумерации страниц. Получается из pdfmarkReference.pdf , необходимой «командой» является «/Label» (или «/PAGELABEL») - и далее она ссылается на PDFReference.pdf глава 8.3 .1 «Ярлыки страниц». К сожалению, эта глава не обязательно объясняет, как pdfmarks можно использовать с метками страниц, но этот пост:

В pdfmark / PAGELABEL нет ключа / Page, поэтому можно установить метку только для« текущей »страницы (и как следствие, только для одной страницы за раз). Поскольку вы называете его в самом начале, он должен установить метку для 1-й страницы и только для нее.

Несколько / PAGELABEL для одной и той же страницы: ссылка на pdfmark говорит о том, что последняя вступает в силу, поэтому результат вашей 1-й командной строки в порядке. Обратите внимание, что ключ / Page игнорируется.

Как установить метки страниц из PostScript? Я могу думать о 2 методах:

(A) 100% документированный способ:

Выпускать / PAGELABEL как часть каждой страницы.

(B) Менее документированный способ: ...

gswin32c -sDEVICE=pdfwrite -sOutputFile=50pages.pdf -dNOPAUSE

GS>[/_objdef {pl} /type /dict /OBJ pdfmark
GS>[{pl} <</Nums [0 <</P (Page ) /S /r /St 10>> 2 <<>>]>> /PUT pdfmark
GS>[{Catalog} <</PageLabels {pl}>> /PUT pdfmark
GS>50 { showpage } repeat
GS>quit

... и далее в этой теме:

Как сделать эту работу; Поскольку исходный файл является файлом PDF, вы можете запускать каждую страницу из файла в отдельности. Таким образом, вы можете установить pagmark PAGELABEL для страницы 1, запустить страницу 1 из исходного файла, установить PAGELABEL для страницы 2, запустить страницу 2 из исходного файла и т. Д.

Поскольку метка (как SaGS) применяется к текущей странице, это должно правильно установить метки для каждой страницы в выходном файле PDF. (предостережение: я на самом деле не пробовал это)

РЕДАКТИРОВАТЬ: просто чтобы показать это - если вы сохранили это как файл pdfmarks:

[ /Label (-1) /PAGELABEL pdfmark
showpage
[ /Label (0) /PAGELABEL pdfmark
showpage
[ /Label (1) /PAGELABEL pdfmark
showpage

.. и вы звоните:

gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=outfile.pdf infile.pdf pdfmarks

... тогда вы получите три пустые страницы, добавленные в конце infile.pdf, помеченные -1, 0 и 1 :)

& nbsp;

Ну, может быть, иногда это помогает получить более простой gs скрипт для перенумерации страниц:)
Cheers!

& nbsp;

EDIT2: Got это, я думаю, - используйте ту же команду gs, что и выше - и ниже содержание скрипта pdfmarks, который перенумерует infile.pdf, поэтому он начинается с -1, 0, 1 ... Это в основном измененный пример из справочника PDF (см. комментарии для более подробной информации):

% Type name (Optional) The type of PDF object that this dictionary describes; if present, must be PageLabel for a page label dictionary.
% S name (Optional) The numbering style to be used for the numeric portion of each page label:
%       D Decimal arabic numerals
%       R Uppercase roman numerals
%       r Lowercase roman numerals
%       A Uppercase letters (A to Z for the first 26 pages, AA to ZZ for the next 26, and so on)
%       a Lowercase letters (a to z for the first 26 pages, aa to zz for the next 26, and so on)
% P text string (Optional) The label prefix for page labels in this range.
% St integer (Optional) The value of the numeric portion for the first page label in the range. Subsequent pages will be numbered sequentially from this value, which must be greater than or equal to 1. Default value: 1.

% renumber first 25 pages - push each by 10, and add prefix:
% [/_objdef {pl} /type /dict /OBJ pdfmark
% [{pl} <</Nums [0 <</P (Page ) /S /D /St 10>> 25 <<>>]>> /PUT pdfmark
% [{Catalog} <</PageLabels {pl}>> /PUT pdfmark

[/_objdef {pl} /type /dict /OBJ pdfmark
[{pl} <</Nums [ 0 << /P (-1) >>         % just label -1 (no style) for pg 0;
                1 << /P (0) >>          % just label  0 (no style) for pg 1;
                2 << /S /D /St 1 >>     % decimal style, start from 1, for pg2 and on.
                ]>> /PUT pdfmark
[{Catalog} <</PageLabels {pl}>> /PUT pdfmark
0
ответ дан 13.11.2019, 23:56
  • 1
    Здорово! Спасибо, Вы don' t шутят вокруг:) – bbaassssiiee 13.11.2019, 23:57

jPDF Tweak - это графическая утилита с открытым исходным кодом, которая предлагает нумерацию страниц (правильный термин «маркировка страницы») и многие другие новички в расширенных функциях редактирования PDF. Он работает в Ubuntu и других операционных системах.

На странице Документация приведены пошаговые инструкции.

0
ответ дан 13.11.2019, 23:57
  • 1
    Спасибо, это, что действительно помогло мне, сохранив формы и так далее. Тонкая настройка jPDF является действительно мощной вещью, хотя с не очень удобный интерфейс. – Daniel 13.11.2019, 23:57
  • 2
    Если бы исходный вопрос не упоминал пакетные задания, я сказал бы, что этот ответ действительно имеет право быть принятым. – cowbert 13.11.2019, 23:58

Вы можете сделать это с помощью текстового редактора.

Как говорится в ответе, откройте файл PDF с помощью текстового редактора, найдите запись /Catalog, а затем добавьте запись с именем /PageLabels следующим образом:

/PageLabels << /Nums [
0 << /P (cover) >> % labels 1st page with the string "cover"
1 << /S /r >> % numbers pages 2-6 in small roman numerals
6 << /S /D >> % numbers pages 7-x in decimal arabic numerals
]
>>

Обратите внимание, что индексы страниц (физические номера страниц) начинаются с 0.

Конечно, вы можете сделать это автоматически, используя скриптовые языки.

Стандарты PDF - Ярлыки страниц имеют подробные спецификации.

0
ответ дан 13.11.2019, 23:57
  • 1
    +1 Этот ответ намного более прост и лучше, чем принятый, и ссылка на спецификацию является большой справкой. – Tommy O'Dell 13.11.2019, 23:58

Теги

Похожие вопросы