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

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

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

24
задан 9 April 2011 в 03:05

9 ответов

Здесь решение на основе 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
ответ дан 9 April 2011 в 03:05

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

Как говорится в ответе, откройте файл 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
ответ дан 9 April 2011 в 03:05

Существует инструмент под названием 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
ответ дан 9 April 2011 в 03:05

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

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

0
ответ дан 9 April 2011 в 03:05

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

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

0
ответ дан 9 April 2011 в 03:05

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

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

[ 110]
0
ответ дан 9 April 2011 в 03:05

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

Text Editing in PDFEdit

0
ответ дан 9 April 2011 в 03:05

Только что нашел указатель, который можно использовать для этого 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
ответ дан 9 April 2011 в 03:05

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

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

0
ответ дан 9 April 2011 в 03:05

Другие вопросы по тегам:

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