PDF의 메타 데이터에서 내부 페이지 번호를 변경하는 방법은 무엇입니까?


37

Acrobat 이외의 방법 (pdf로 인쇄 한 후 여러 PDF를 병합)을 통해 작성한 pdf 문서가 있지만 페이지 번호를 수동으로 변경하고 싶습니다 (예 : 처음 몇 페이지는 제목 페이지, 페이지는 되어 표시 "페이지 1")는 PDF의 7 시트 정말입니다. 이 작업을 수행하는 가장 간단하고 이상적인 방법은 무엇입니까?

분명히하기 위해, 나는 페이지 자체의 숫자를 변경하려고하지 않지만 pdf가 저장하는 "메타 데이터"의 페이지 번호 (페이지 자체는 이미 올바르게 번호가 지정되어 있습니다. "페이지 1로 이동"를 원합니다) 1 이라고 표시된 페이지 로 이동 하십시오 ( 시트 7).

가치가있는 것은 Windows에 있지만 Mac에도 액세스 할 수 있습니다.


귀하의 설명 + 요구 사항을 완전히 이해했는지 잘 모르겠습니다. 수정하려는 샘플 PDF에 대한 링크를 제공 할 수 있습니까?
커트 파이 플

실제로 txt 파일을 열지 않고 큰 pdf 파일에서 명령 행 도구가 있습니까?
jj_p

예를 들어 pdftk?
jj_p

답변:


39

실제로 원하는 것을 페이지 레이블 이라고 하며 PDF 소스 코드에 직접 쉽게 추가 할 수 있습니다. 파일 확장명을에서 (으) pdf로 바꾸고 txt텍스트 편집기에서 파일을여십시오 (파일 크기에 따라 느려질 수 있음). 페이지 레이블에 대한 정보 는 다음과 같은 문서 카탈로그 라는 노드에 저장됩니다 .

3 0 obj
<< /Type /Catalog
   /Pages 1 0 R
>>
endobj

더 혼란스러운 내용이 포함될 수 있지만 이것이 기본 구조입니다. 하나의 카탈로그 만 있으므로 큰 파일에서을 포함하는 노드를 검색 할 수 있습니다 /Catalog. 이제 /PageLabels항목 을 삽입하여 원하는대로 변경할 수 있습니다 .

3 0 obj
<< /Type /Catalog
   /Pages 1 0 R
   /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
                        ]
               >>
>>
endobj

페이지 색인 이라는 숫자로 시작하는 3 줄이 있습니다 . 1 0페이지 에는 색인 , 2 페이지에는 색인 1등이 있습니다. 그들은 항상 범위를 설명하므로, 행 1 <<...>>은 색인 1에서 5 6 <<...>>까지의 모든 페이지에 적용 되고, 행 은 6에서 마지막 페이지까지의 모든 페이지에 적용됩니다. 의 라벨 0 <<...>>은 항상 정의해야합니다.

페이지 레이블 및 PDF 소스 코드에 대한 자세한 정보는 PDF 표준 또는 PDF 표준 에 대한 위키 에서 찾을 수 있습니다 .


4
기이! 이것은 웹에서 내가 직접적이고 유용한 정보를 찾은 유일한 곳입니다. 우리 모두 에게 Acrobat Reader가있는 것은 아닙니다 .
Noldorin

3
/St 8또는 /St 2을 사용하면 표시된 레이블의 시작점을 설정합니다. 그러나 예를 들어> = 1이어야 함, 8 (2) 대신에 임의의 숫자를 선택 1 << /S /r /St 12 >>에서 의지 번호 페이지 (실제로) 2-6 (표시) 등의 XII-XVII - '12'때문에 해당한다 'XII'.
n611x007

1
답을 주셔서 감사하지만 내 경험에 따르면이 방법은 때로는 작동하지만 때로는 작동하지 않습니다. 또한 둘 이상의 카탈로그를 찾았습니다. 어떻게 설명합니까?
jj_p

1
훌륭한 정보. 다음은 다른 유용한 출처에 대한 링크 입니다. W3C에서 PDF 문서의 일관된 페이지 번호 지정 .
Adam Mackler

2
이처럼 작동합니까? 일부 PDF 파일의 원시 컨텐츠를 보면 이전 컨텐츠의 길이가 변경되면 카탈로그를 업데이트 한 후 파일의 위치를 ​​가리키는 일부 색인 번호처럼 보였습니다.
또는 Mapper

6

내가 제대로 이해하면, 여기는 어떻게 해야 일 :

gs \
  -o modified-pagelabels-50pages.pdf \
  -sDEVICE=pdfwrite \
  -c "[ /Page 1 /Label (i)     /PAGELABEL pdfmark" \
  -c "[ /Page 2 /Label (ii)    /PAGELABEL pdfmark" \
  -c "[ /Page 3 /Label (III)   /PAGELABEL pdfmark" \
  -c "[ /Page 4 /Label (four)  /PAGELABEL pdfmark" \
  -c "[ /Page 5 /Label (v)     /PAGELABEL pdfmark" \
  -c "[ /Page 6 /Label (|||||) /PAGELABEL pdfmark" \
  -f 50pages.pdf

그러나, 나는 이 안정적으로 또는 완전히 (전 이년에 대해) 나는이 시도 마지막 시간을 작동하지 않았다, 기억.

업데이트 : 내 기억이 나에게 실패하지 않았습니다. 나는 다시 시도하고 이것에 관한 Ghostscript ( 버그 691889 ) 에 대한 버그 보고서를 제출했다 . 세부 사항을 보려면 버그 보고서 링크를 따르십시오.


5

참고 1 : 허용 된 답변은 여전히 ​​옳지 만 약간의 차이가 있습니다. 많은 PDF 파일을 텍스트로 직접 편집 할 수 없다는 단점이 있습니다. 이러한 편집 작업을 수행하더라도 이러한 편집 작업으로 인해 PDF가 손상되어 읽을 수없는 경우가 있습니다. Unix와 Microsoft Windows 모두에서 작동하는 한 가지 솔루션은 qpdf 이며 PDF 파일을 여전히 유효한 PDF 파일 인 텍스트 편집 가능한 "QDF"로 변환 할 수 있습니다. qpdf패키지는 fix-qdfQDF 파일을 편집 한 후 손상을 수정 한 후 오프셋을 다시 계산 하는 패키지와 함께 제공됩니다 .

참고 2 : 텍스트 편집기가 불편하십니까? 먼저 jpdftweak 과 같은 GUI 편집기를 사용해보십시오 . 때때로 GUI pdf 편집기가 작동하는 경우가 있습니다. 그러나 종종 실패하는 것처럼 실패하면 이보다 강력한 대안을 시도 할 수 있습니다. 어느 쪽이든, 우아하지 않다는 이유로 내 대답에 투표하지 마십시오.


Qpdf를 사용하여 PDF 페이지 번호를 편집하는 방법

개요:

  1. qpdf -qdf foo.pdf foo.qdf
  2. foo.qdf 편집

     0 << >>           % No label on first pages
     6 << /S /D >>     % Start numbering from 7th page.
    
  3. fix-qdf foo.qdf >bar.qdf
  4. 테스트 바 .qdf
  5. qpdf bar.qdf bar.pdf

자세한 단계

1 단계.

문서를 쉽게 편집 가능한 QDF 형식으로 변환하십시오. 다음과 같이 명령 행에서 qpdf를 실행하십시오.

qpdf -qdf foo.pdf foo.qdf

참고 : qpdf를 아직 설치하지 않은 경우 https://github.com/qpdf/qpdf/release 에서 Microsoft Windows 실행 파일을 다운로드 할 수 있습니다. Ubuntu 및 Debian GNU / Linux와 같은 Unix 시스템은을 입력하여 설치할 수 있습니다apt install qpdf .

2 단계.

notepad ++, emacs 또는 gedit와 같은 텍스트 편집기를 사용하여 QDF 문서를 편집하십시오. 단어를 검색하고 단어 /Catalog안에있는 << 각괄호 >>를 적어 둡니다. 인근, 현재를 찾을 수 있습니다 /PageLabels( 있는 경우 ).

번호가 다른 각 섹션을에 추가합니다 /PageLabels. 형식은 start-page<< style>>입니다. 공백은 중요하지 않으며 문서의 첫 페이지는 0입니다. 달리 지정하지 않으면 새 섹션은 항상 1부터 번호 매기기 페이지를 시작합니다.

다음은 주석이 추가 된 PageLabels의 모습에 대한 전체 예입니다.

/Type /Catalog
/PageLabels <<
  /Nums [
    0           % From the first page of the document,
      <<
        /S /r   % ...use the lowercase roman numeral style.
      >>
    6           % From seventh page onward,
      <<
        /S /D   % ...use ordinary digits (arabic numerals)
      >>
  ]
>>

파일에 PageLabels가 없으면 뒤에 추가하십시오 /Type /Catalog. 예를 들어,

1 0 obj
<<
  …
  /Type /Catalog
>>
endobj

으로,

1 0 obj
<<
  … 
  /Type /Catalog
  /PageLabels
      << /Nums [
    0 << >>                 % No label for cover
    1 << /S /r >>           % i, ii for index
    3 << /S /D /St 15 >>    % 15, 16, 17, ... for article
    31 << /S /D /P (A-) >>  % A-1, A-2, A-3... for appendix
       ]
  >>
>>
endobj

선택 사항 : 다른 번호에서 시작 /St

를 사용하여 달리 지시하지 않는 한 각 섹션의 번호는 1부터 다시 시작됩니다 /St. 위의 예에서 네 번째 페이지가 15에서 시작하는 방법에 주목하십시오.

선택 사항 : 다른 스타일 사용 /S

/S연산자는, 당신은 번호 매기기 스타일을 선택할 수 있도록하는 인자를

  • / D 숫자 (1, 2, 3 ...)
  • / R 대문자 로마자 (I, II, III ...)
  • / r 소문자 로마자 (i, ii, iii ...)
  • / A 대문자 알파벳순 (A, B, C, ...., X, Y, Z, AA, AB, AC, ...)
  • / a 소문자 알파벳순 (a, b, c, ...., x, y, z, aa, ab, ac, ...)

/S연산자를 생략하면 해당 페이지 섹션에 번호가 없습니다. 예를 들면 다음과 같습니다.

0 << >>         % No label for cover

선택 사항 : 각 페이지에 접두사 추가 /P

다음에 괄호 안에 단어를 지정하여 페이지 번호 앞에 텍스트 문자열을 표시 할 수 있습니다 /P.

  31
  <<
    /S /D
    /P (A-)     % label appendix pages A-1, A-2, A-3
  >>

스타일 ( /S) 없이 접두사를 지정하면 숫자가없는 단어 만있는 페이지가 표시됩니다. 예를 들어 표지에 단순히 "표지"레이블을 지정하려는 경우 유용 할 수 있습니다.

     0 << /P (Cover) >>        % No number, just "Cover"

3 단계.

실행 fix-qdf편집 유효한 PDF를 만들 bar.qdf에 출력을 넣어.

fix-qdf foo.qdf > bar.qdf

단계 4.

PDF보기 프로그램에서 bar.qdf를 열고 번호가 올바른지 확인하십시오.

5 단계.

다음과 같이 QDF 파일을 일반 PDF로 다시 변환하십시오.

qpdf bar.qdf bar.pdf

타 다. 끝났습니다. 이제 bar.pdf에 페이지 번호가 올바르게 표시된 문서가 있습니다.


4

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

귀하의 경우 다음과 같이 전화하십시오 :

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

이것은 내가 필요한대로 정확하게 일을했습니다. 감사!
telotortium

3

jPdf Tweak 는 PDF 파일에서 페이지 레이블을 편집 할 수있는 오픈 소스 그래픽 유틸리티입니다. 문서 페이지는 단계별 지침을 제공합니다.


나는 이것을 사용하여 텍스트를 접두어로 사용하여 사용자 정의 페이지 레이블을 "빈"형식으로 추가했습니다. 잘 작동했습니다!
맷 Sephton


외부 링크에 의존하는 대신 단계별 지침을 여기에 추가하십시오. 감사!
hackerb9

1

오래된 것을 제거하기 위해 아마도 가장 쉬운 크로스 플랫폼 방법은 오래된 것을 잘라내는 것입니다. 예를 들어 BRISS를 사용 하면 가능합니다.

무료 도구를 사용하여 새로운 도구를 추가하는 것이 더 까다 롭습니다. 개인적으로 나는 이 StackExchange 답변 에서처럼 pdflatex로 그것을 할 것입니다 .

그러나 jPdfTweak을 사용 하여 수행 할 수 있다고 생각합니다 .


1

Dane H.가 제공 한 방법은 Acrobat Reader (또는 현재 Adobe Reader 의 현재 버전 )에서 작동합니다. 참고할 사항 : 상단에있는 필드는 8 자만 허용하므로 레이블이 사용 된 경우 '주제 색인'과 같은 항목을 입력 할 수 없습니다. 그러나 메뉴 항목보기> 페이지 탐색> 이동 ... 또는 이와 동등한 키를 사용할 수 있습니다.

또 다른 팁 : pdf 사양은 항상 페이지 번호를 연속적으로 할당하므로 페이지 을 스캔하여 생성 된 문서의 경우 두 세트의 숫자가 단계에서 벗어납니다 (각 페이지마다 개별적으로 번호를 매기 지 않는 한). 그러나 적은 노력으로 문서를 설정하여 '페이지 n으로 이동하여 2n 및 2n + 1 페이지로 이동'규칙이 적용되도록 할 수 있습니다.


1

Danes 답변이 최고이며, 형식이 약간 변경되었으므로 도움이 될 수 있습니다.

%PDF-1.6

29241 0 obj

<</Metadata 1685 0 R/Outlines 29461 0 R/PageLabels<</Nums[0<</S/D>>3<</S/D/St 6>>4<</S/D/St 10>>5<</S/D/St 12>>15<</S/D/St 70>>16<</S/D/St 72>>17<</S/D/St 80>>18<</S/D/St 82>>19<</S/D/St 90>>23<</S/D/St 96>>25<</S/D/St 99>>29<</S/D/St 110>>31<</S/D/St 130>>32<</S/D/St 133>>35<</S/D/St 137>>36<</S/D/St 140>>37<</S/D/St 145>>39<</S/D/St 150>>40<</S/D/St 152>>42<</S/D/St 155>>43<</S/D/St 160>>46<</S/D/St 165>>47<</S/D/St 167>>48<</S/D/St 170>>49<</S/D/St 180>>50<</S/D/St 190>>52<</S/D/St 300>>53<</S/D/St 305>>54<</S/D/St 319>>56<</S/D/St 380>>57<</S/D/St 390>>58<</S/D/St 500>>67<</S/D/St 515>>68<</S/D/St 525>>70<</S/D/St 550>>71<</S/D/St 553>>72<</S/D/St 560>>73<</S/D/St 600>>76<</S/D/St 620>>78<</S/D/St 650>>82<</S/D/St 670>>85<</S/D/St 700>>95<</S/D/St 714>>117<</S/D/St 900>>162<</S/D/St 1000>>178<</S/D/St 1200>>209<</S/D/St 1500>>263<</S/D/St 1555>>270<</S/D/St 1563>>389<</S/D/St 1681>>522<</S/D/St 1813>>]>> /PageMode/UseOutlines/Pages 29177 0 R/Type/Catalog>>

endobj

1

'/ outlines'영역에 이미 '/ titles'가 설정되어 있으면 파일을 직접 편집하면 (pdftk에 의해 압축되지 않은) 작동하지 않습니다. 위 게시물에 설명 된 직접 편집 기술은 Youtube에서 시연됩니다 : https://www.youtube.com/watch?v=zoH1Z_hSpak

그러나 여기에 사용 된 'doc_data.txt'파일을 편집하여 pdftk의 '업데이트'기능이보다 직관적 일 수 있고 (// PDF 파일의 '/ outlines'영역에 '/ titles'가 이미있는 경우 더 안정적 임) https : / /www.pdflabs.com/blog/export-and-import-pdf-bookmarks/


1
안녕하세요 @ 밥, 링크 전용 답변의 품질이 낮습니다. 대상 사이트가 이동하거나 사라지면 쓸모가 없습니다. 답변을 수정하고 솔루션의 관련 부분을 여기에 인용하십시오.
C0deDaedalus

0

BeCyPDFMetaEdit http://www.becyhome.de/becypdfmetaedit/description_eng.htm

이 프리웨어 도구의 "페이지"탭에서 내부 페이지 번호 체계를 추가 / 제거 / 변경할 수 있습니다.

그리고 PDF xchange 뷰어에는 페이지 번호 체계가 표시되지 않으며 foxitreader는 올바른 결과를 얻습니다. Acrobat 리더를 테스트하지 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.