PDF 페이지 번호 다시 매기기


25

스캔 한 PDF 의 메타 데이터 를 편집하여 다른 페이지에 사용자 정의 페이지 번호를 할당하려고합니다. 예를 들어, 현재 1 ~ 3 페이지는 i, ii, iii, 4 ~ 10 페이지는 1 ~ 7로 전화하고 싶습니다. 나는 할 수 없습니다 페이지의 실제 순서를 변경하고 싶습니다.

A) 무료 도구를 사용하여이 작업을 수행 할 수있는 방법이 있습니까? B)이 "일괄 처리"방법 (각 페이지를 수동으로 번호를 다시 매길 필요 없음)


1
LaTeX 기반 솔루션에 만족하십니까? 비어있는 문서에 PDF를 포함시키고 원하는대로 PDF 페이지 번호를 만들 수 있습니다.
Martin Scharrer

LaTeX 솔루션에 만족할 것입니다. 아래에 세부 사항을 게시 할 수 있습니까?
MarkovCh1

답변:


22

LaTeX 기반 솔루션입니다. pdfpages패키지를 사용하여 스캔 한 PDF (여기서 scan.pdf) 를 포함시킵니다 . 옵션이 활성화 된 hyperref패키지를 사용하여 원하는 PDF 페이지 레이블을 설정할 수 있습니다 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에는 아무런 문제가 없습니다.

더 자주 필요한 경우 로마 숫자 페이지 수와 파일 이름을 인수로 허용하고 이름과 숫자가 변수 인 위의 코드를 사용하여 임시 파일을 작성하는 스크립트를 작성할 수 있습니다.


그러한 철저한 답변에 감사드립니다! 이것은 훌륭한 솔루션입니다. 내가 아는 유일한 솔루션은 .NET 또는 끔찍한 것 또는 Adobe Acrobat의 대화 상자를 포함하고 있습니다 (어쨌든 감당할 수 없음). 이것은 심지어 스크립트 가능합니다!
MarkovCh1

좋은 해결책! 왼쪽 패널에서 각 섹션 / 장의 시작 부분에 하이퍼 링크가있는 책갈피 / 개요의 일괄 생성에 대한 동일한 질문이 궁금합니다. LaTex도 사용할 수 있습니까? 내 질문은 askubuntu.com/questions/27312/bookmark-pdf-and-djvu-files 입니다. 감사!
Tim

2
@Tim : PDF를 결합 할 때 LaTeX를 사용하여 PDF 책갈피를 작성할 수 있습니다. 하나의 큰 pdf로 병합하는 pdf 파일 세트에 대해 LaTeX를 사용하여 목차 (제목, 하위 섹션 등)를 작성하는 방법에 대한 내 답변을 참조하십시오 . TeX.SX에서.
Martin Scharrer

이것은 환상적인 답변이며, 그것을 사용했으며 완벽하게 작동합니다.
Andrea Lazzarotto

1
@TiGR : 그렇습니다. 원본 PDF의 페이지가 새 PDF에 추가되고이 과정에서 하이퍼 링크와 유사한 것들이 삭제되기 때문입니다. OP는 PDF 스캔에 관한 것이기 때문에 문제가되지 않았습니다.
Martin Scharrer

10

텍스트 편집기를 사용하여이를 수행 할 수 있습니다.

답변에서 알 수 있듯이 텍스트 편집기로 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.

cource 중에서도 스크립팅 언어를 사용하여이 작업을 자동으로 수행 할 수 있습니다.

PDF 표준-페이지 레이블 에 자세한 사양이 있습니다.


+1이 답변은 허용 된 것보다 훨씬 간단하고 좋습니다. 사양에 대한 링크는 큰 도움이됩니다.
jja

6

jPDF Tweak 는 페이지 번호 매기기 (올바른 용어는 "페이지 레이블링") 및 기타 초보자부터 고급 PDF 편집 기능을 제공하는 오픈 소스 그래픽 유틸리티입니다. 우분투 및 기타 운영 체제에서 실행됩니다.

문서 페이지는 단계별 지침을 제공합니다.


고마워요. 이것이 양식과 모든 것을 보존하면서 정말 도움이되었습니다. jPDF Tweak은 매우 편리한 인터페이스는 아니지만 실제로 강력한 기능입니다.
TiGR

원래 질문에 배치 작업이 언급되어 있지 않으면이 답변이 실제로 받아 들일만한 가치가 있다고 말할 것입니다.
Brian Z

4

PDF 페이지를 재정렬하는 무료 도구 인 PDF Mod라는 도구가 있습니다.

Ubuntu 10.10 이상의 Ubuntu Software Center에서 설치할 수 있습니다.

Ubuntu 9.10 또는 10.04에 설치하려면

ppa:pdfmod-team/ppa소프트웨어 소스에 ppa 를 추가하고 ( 방법은 다음과 같습니다 ) 소프트웨어 센터에서 pdfmod를 설치하십시오.

적응 : http://www.webupd8.org/2011/03/edit-pdf-documents-in-linux-with-pdf.html

행운을 빕니다 : D


4
아, 그러나 내 질문은 페이지를 다시 정렬하는 방법에 대해 묻지 않았습니다. 페이지 번호의 레이블을 다시 지정합니다 (로마 숫자를 처음 몇 페이지로 삽입하거나 몇 개 건너 뛰거나 PDF는 확실히 전자를 지원합니다).
MarkovCh1

3

그냥 사용하는 것이 가능할 수 있다는 포인터를 발견 ghostscript여기,이를 위해 : - 추가 및 편집 북마크 PDF로 - 유닉스와 리눅스 - pdftk을 스택 교환 # 18600 ; 그것은 링크를 말합니다 :

그러나 위의 북마크는 논리적 페이지 매김이 아닌 북마크를 처리합니다. 그것은에서 밝혀 pdfmarkReference.pdf , 필요한 "명령" '이다 /Label'(또는 ' /PAGELABEL') - 그리고 더를 의미 PDFReference.pdf의 장 8.3.1 "페이지 레이블". 불행히도,이 장에서는 pdfmark를 페이지 레이블과 함께 사용하는 방법을 설명하지 않아도되지만이 게시물은 다음을 수행합니다.

/ PAGELABEL pdfmark에는 / Page 키가 없으므로 '현재'페이지에만 레이블을 설정할 수 있습니다 (결과적으로 한 번에 한 페이지에 대해서만). 맨 처음에 전화하기 때문에 첫 번째 페이지의 레이블 만 설정해야합니다.

동일한 페이지에 대한 여러 / PAGELABEL : pdfmark 참조에 마지막 페이지가 적용되었다고 표시되어 첫 번째 명령 줄의 결과는 정상입니다. / Page 키는 무시됩니다.

PostScript에서 페이지 레이블을 설정하는 방법은 무엇입니까? 두 가지 방법을 생각할 수 있습니다.

(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 파일이므로 파일에서 각 페이지를 개별적으로 실행할 수 있습니다. 따라서 1 페이지의 PAGELABEL pdfmark를 설정하고 원본 파일에서 1 페이지를 실행하고 2 페이지의 PAGELABEL을 설정하고 원본 파일에서 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 레이블이 붙은 세 개의 빈 페이지가 추가됩니다. :)

 

글쎄, 이것은 아마도 gs페이지 번호를 다시 매기 는 간단한 스크립트 를 얻는 데 도움이 될 것입니다 :)
건배!

 

EDIT2 : 알았습니다. 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

큰! 감사합니다, 당신은 농담하지 않습니다 :)
MarkovCh1

2

https://github.com/lovasoa/pagelabels-py : 일을 할 수있는 작은 파이썬 스크립트가 있습니다

귀하의 경우 전화 :

./addpagelabels.py --delete file.pdf
./addpagelabels.py --startpage 1 --type 'roman lowercase' file.pdf
./addpagelabels.py --startpage 4 --type arabic file.pdf

1
이것은 훌륭한 솔루션입니다!
mikemtnbikes

1

Openoffice / Libreoffice는 pdf-import 확장자와 페이지 매김 매크로를 사용하여 트릭을 수행 할 수 있습니다.

완벽한 해결책은 아니지만 그것은 나를 위해 작동합니다 (PDF Mod를 사용하는 것 외에-강력하게 제안합니다).


pdf-import 확장 프로그램이 OpenOffice.org 3.2에서 작동하지 않는 것 같습니다. 가져 오기 (Draw and Writer로)에 "I / O 오류"가 발생합니다.
MarkovCh1

0

PDF 문서를 조작하는 python 라이브러리 pyPdf를 사용해보십시오 . 많지는 않지만 프로그래밍이 필요합니다.

PDFtk 도 볼 수 있지만 개별 페이지와 관련된 페이지 번호 변경을 지원하는지 확인하지는 않았습니다. 둘 다 우분투에서 패키지로 제공됩니다.


1
흠, PDFtk는 그것을 할 수없는 것 같습니다. pyPdf에는 메타 데이터 추출 방법이 많이 있지만 문서에 다시 쓸 수없는 것 같습니다.
MarkovCh1

0

PDFEdit이라는 또 다른 앱이 있습니다-소스 포지에서 호스팅됩니다. Source Forge 프로젝트 페이지 -그러나 필요한 기능이 아니기 때문에 도움이되지 않습니다.

PDFEdit에서 텍스트 편집


1
실제로 PDF 편집이 페이지 번호를 변경할 수 있다고 생각하지 않습니다. 어쨌든 나는 노력했지만 성공하지 못했습니다.
MarkovCh1

2
@Syzygy-실제로, 방금 확인 : 문서에 문서가 있으면 Dict pdfedit를 표시 할 수 Catalog/PageLabels있지만 선택하면 다음과 같이 표시됩니다. " 이 사전에는 직접 편집 가능한 특성이 없습니다. "... Cheers!
sdaau
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.