पीडीएफ के मेटा डेटा में आंतरिक पेज नंबर कैसे बदलें?


37

मेरे पास एक पीडीएफ दस्तावेज़ है जो मैंने गैर-एक्रोबैट माध्यम (पीडीएफ में मुद्रण, फिर पीडीएफ़ के एक समूह को विलय करने) के माध्यम से बनाया है, लेकिन मैं मैन्युअल रूप से पृष्ठ संख्या बदलना चाहता हूं (यानी पहले कई पृष्ठ केवल शीर्षक पृष्ठ हैं, पृष्ठ जो कहा जाता है "पृष्ठ 1" वास्तव में पीडीएफ की 7 वीं शीट है)। ऐसा करने का सबसे सरल (और आदर्श रूप से, मुक्त) तरीका क्या है?

स्पष्ट होने के लिए, मैं स्वयं पृष्ठों पर संख्याओं को बदलने की कोशिश नहीं कर रहा हूं, लेकिन "मेटाडेटा" में पृष्ठ संख्याएं जो कि पीडीएफ़ स्टोर (स्वयं पृष्ठ पहले से ही सही ढंग से क्रमांकित हैं; मुझे बस "पेज 1 पर जाना" चाहिए) पृष्ठ 1 पर लेबल किया गया , जो शीट 7 हो सकता है)।

इसके लायक क्या है, मैं विंडोज पर हूं, हालांकि मेरे पास मैक तक भी पहुंच है।


मुझे यकीन नहीं है कि अगर मैं आपके विवरण + आवश्यकता को पूरी तरह से समझता हूं। क्या आप एक नमूना पीडीएफ के लिए एक लिंक प्रदान कर सकते हैं जिसे आप संशोधित करना चाहते हैं?
कर्ट फ़िफ़ेल

वहाँ एक कमांड लाइन उपकरण ऐसा करने के लिए है, उदाहरण के लिए वास्तव में txt फ़ाइल खोलने के बिना एक बड़ी पीडीएफ फाइल पर?
jj_p

जैसे pdftk?
jj_p

जवाबों:


39

आप जो चाहते हैं वह वास्तव में पेज लेबल कहलाता है और आसानी से पीडीएफ के सोर्स कोड में सीधे जोड़ा जा सकता है। से फाइल एक्सटेंशन का नाम बदलें 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 <<...>>हमेशा के लिए एक लेबल को परिभाषित किया जाना चाहिए।

आप पृष्ठ लेबल और पीडीएफ स्रोत कोड के बारे में अधिक जानकारी पीडीएफ मानक में या पीडीएफ मानकों पर विकि में पा सकते हैं ।


4
अद्भुत! यह वेब पर एकमात्र ऐसी जगह है जहाँ मुझे ऐसी प्रत्यक्ष और उपयोगी जानकारी मिली है। हम सभी के पास एक्रोबेट रीडर नहीं है ।
नोल्डोरिन

3
उदाहरण के साथ /St 8या /St 2, आपने प्रदर्शित लेबल के लिए एक आरंभ बिंदु निर्धारित किया है; लेकिन 8 (या 2) के स्थान पर कोई भी संख्या चुनें, जो होनी चाहिए = = 1. उदाहरण के लिए, 1 << /S /r /St 12 >>(वास्तव में) 2-6 के रूप में (प्रदर्शित) xii-xvii से संख्या पृष्ठ होंगे - क्योंकि '12' 'xii' से मेल खाती है।
n611x007

1
उत्तर के लिए धन्यवाद, लेकिन मेरे अनुभव में यह तरीका कभी-कभी काम करता है और कभी-कभी नहीं; भी, मैं एक से अधिक कैटलॉग खोजने के लिए हुआ: आप इसे कैसे समझाते हैं?
jj_p

1
बेहतरीन जानकारी। यहां एक अन्य उपयोगी स्रोत का लिंक दिया गया है: W3C से पीडीएफ दस्तावेजों के लिए संगत पेज नंबर निर्दिष्ट करना
एडम मैकलर ने

2
क्या आपको यकीन है कि यह इस तरह से काम करता है? कुछ पीडीएफ फाइलों की कच्ची सामग्री को देखने से ऐसा लग रहा था कि कुछ अनुक्रमणिका संख्याएँ जो सूची के बाद फ़ाइल में स्थिति को इंगित करती हैं, यदि पूर्ववर्ती सामग्री की लंबाई बदलती है तो इसे अद्यतन करना होगा ..
या मैपर

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

हालांकि, मैं लग याद करने के लिए, कि यह मज़बूती से या पूरी तरह से (पहले 2 साल के बारे में) पिछली बार मैं इस कोशिश की काम किया है।

अद्यतन: मेरी स्मृति मुझे असफल नहीं हो रही थी। मैंने अब फिर से कोशिश की और इस बारे में घोस्टस्क्रिप्ट ( बग 691889 ) के लिए एक बग रिपोर्ट दायर की । विवरण देखने के लिए बग रिपोर्ट के लिंक का पालन करें।


5

नोट 1: स्वीकृत उत्तर अभी भी ज्यादातर सही है, लेकिन कुछ अंतराल है। यह कमी है कि कई पीडीएफ फाइलें सीधे पाठ के रूप में संपादन योग्य नहीं हैं। यहां तक ​​कि जब वे होते हैं, तो ऐसे संपादन कभी-कभी पीडीएफ को अपठनीय बना सकते हैं। एक समाधान, जो यूनिक्स और माइक्रोसॉफ्ट विंडोज दोनों के लिए काम करेगा, क्यूपीडीएफ है जो पीडीएफ फाइलों को "क्यूडीएफ", एक पाठ-संपादन योग्य रूप में अनुवाद कर सकता है जो अभी भी एक वैध पीडीएफ फाइल है। qpdfपैकेज के साथ आता है fix-qdfकि एक QDF फ़ाइल के बाद पुनर्गणना ऑफसेट किसी भी नुकसान को दूर करने के संपादित किया गया है।

नोट 2: पाठ संपादकों के साथ असहज? पहले GUI संपादक जैसे jpdftweak का उपयोग करने का प्रयास करें । कभी-कभी GUI pdf एडिटर काम करते हैं, जिस स्थिति में, आप कर रहे हैं। हालांकि, जब वे असफल होते हैं, जैसा कि अक्सर मेरे लिए होता है, तो आप इस अधिक मजबूत विकल्प की कोशिश कर सकते हैं। किसी भी तरह से, कृपया कम से कम सुरुचिपूर्ण होने के लिए मेरा जवाब मत देना।


Qpdf का उपयोग करके पीडीएफ पेज नंबर कैसे संपादित करें

सारांश:

  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 नहीं है, तो Microsoft Windows निष्पादक को https://github.com/qpdf/qpdf/releases यूनिक्स सिस्टम से डाउनलोड किया जा सकता है, जैसे कि उबंटू और डेबियन जीएनयू / लिनक्स टाइप करके इसे स्थापित कर सकते हैंapt install qpdf

चरण 2।

QDF दस्तावेज़ को संपादित करें जैसे कि notepad ++, emacs, या gedit जैसे टेक्स्ट एडिटर का उपयोग करना। शब्द के लिए खोजें /Catalogऔर नोट करें << कोण कोष्ठक >> यह अंदर है। पास में, आपको वर्तमान /PageLabels( यदि कोई हो ) मिल जाएगा।

हम प्रत्येक सेक्शन को जोड़ रहे हैं, जिसे अलग-अलग संख्या में होना चाहिए /PageLabels। प्रारूप start-page<< style>> है। ध्यान दें कि व्हाइट-स्पेस मायने नहीं रखता है और दस्तावेज़ का पहला पृष्ठ है 0। जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, तब तक एक नया अनुभाग हमेशा नंबर 1 से पेजिंग शुरू करता है।

उदाहरण

यहाँ पेजलैबल्स की तरह क्या हो सकता है की एक पूर्ण उदाहरण है, टिप्पणियों के साथ जोड़ा:

/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ऑपरेटर, एक तर्क आप क्रमांकन शैली लेने देता है कि लेता है

  • / डी अंक (1, 2, 3 ...)
  • / आर अपरकेस रोमन (I, II, III ...)
  • / आर लोअरकेस रोमन (i, ii, iii ...)
  • / एक अपरकेस वर्णमाला (ए, बी, सी, ...., एक्स, वाई, जेड, एए, एबी, एसी, ...)
  • / एक निचला अक्षर (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।

अपने पीडीएफ देखने के कार्यक्रम में bar.qdf खोलें और जांचें कि यह सही ढंग से गिना गया है।

चरण 5।

QDF फाइल को एक सामान्य पीडीएफ में बदलें, जैसे:

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

यह काम ठीक वैसा ही हुआ जैसा मुझे चाहिए था। धन्यवाद!
टेलोटोर्टियम

3

jPdf Tweak एक ओपन सोर्स ग्राफिकल यूटिलिटी है जो आपको पीडीएफ फाइलों में पेज लेबल एडिट करने की सुविधा देता है। प्रलेखन पेज कदम-दर-कदम निर्देश प्रदान करता है।


मैंने उपसर्ग के रूप में पाठ के साथ "खाली" प्रारूप के रूप में अपने कस्टम पेज लेबल को जोड़ने के लिए इसका उपयोग किया। अच्छा काम किए!
21

यह पाठ बातों का संपादन करके हाथ से एक तरह से बेहतर जवाब है
endolith

कृपया बाहरी लिंक पर निर्भर रहने के बजाय यहां चरण-दर-चरण निर्देश जोड़ें। धन्यवाद!
हैकरबी

1

पुराने को हटाने के लिए, शायद सबसे आसान क्रॉस-प्लेटफ़ॉर्म तरीका है पुराने लोगों को फसल देना। उदाहरण के लिए, आप BRISS के साथ यह कर सकते हैं

मुफ्त टूल का उपयोग करके नए लोगों को जोड़ना अधिक मुश्किल है। व्यक्तिगत रूप से मैं शायद इसे pdflatex के साथ करूंगा , जैसा कि इस StackExchange उत्तर में है , हालांकि यह एक शामिल समाधान हो सकता है जब तक कि आपके पास pdflatex के लिए अन्य उपयोग न हों।

मुझे लगता है कि यह किया जा सकता है, हालांकि jPdfTweak के बजाय।


1

डेन एच। द्वारा दी गई विधि एक्रोबैट रीडर (या, सटीक होना, एडोब रीडर का वर्तमान संस्करण ) के साथ काम करती है। नोट करने के लिए एक मामूली बिंदु: शीर्ष पर स्थित क्षेत्र केवल 8 वर्णों को स्वीकार करेगा ताकि आप उसमें 'विषय सूचकांक' जैसी कोई चीज दर्ज न कर सकें यदि ऐसा कोई लेबल इस्तेमाल किया गया हो। लेकिन आप इसके बजाय मेनू आइटम दृश्य> पृष्ठ नेविगेशन> पर जाएं ... या प्रमुख समकक्ष का उपयोग कर सकते हैं।

एक और टिप: पीडीएफ विनिर्देश हमेशा पृष्ठ संख्याओं को निरंतर रूप से असाइन करता है, इसलिए पृष्ठों के जोड़े को स्कैन करके निर्मित एक दस्तावेज़ के मामले में, संख्याओं के दो सेट चरण से बाहर हो जाते हैं (जब तक कि आप प्रत्येक पृष्ठ को व्यक्तिगत रूप से संख्या नहीं देते)। लेकिन आप थोड़े प्रयास के साथ अपना दस्तावेज़ सेट कर सकते हैं, इसलिए कन्वेंशन 'पेज एन पर जाएँ आपको पेज 2 एन और 2 एन + 1' पर लागू होता है।


1

डेंस का उत्तर सबसे अच्छा है, प्रारूप अब थोड़ा बदल गया है, यह उपयोगी हो सकता है:

%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

मुझे फ़ाइल का सीधा संपादन मिला (जैसे कि pdftk द्वारा असम्पीडित) काम नहीं करने के लिए यदि पहले से ही '/' शीर्षक 'क्षेत्र' में सेट हैं। उपरोक्त पोस्ट में वर्णित प्रत्यक्ष-संपादन तकनीक को Youtube पर दिखाया गया है: https://www.youtube.com/watch?v=zoH1Z_hSpak

लेकिन pdftk की 'अपडेट' सुविधा अधिक सहज (और अधिक विश्वसनीय हो सकती है जब '/' शीर्षक 'पहले से ही पीडीएफ फाइल के' / आउटलाइन 'क्षेत्र में मौजूद हो)' doc_data.txt 'फ़ाइल का उपयोग करके संपादन के माध्यम से यहाँ: https: / / /www.pdflabs.com/blog/export-and-import-pdf-bookmarks/


1
हाय @ याकूब, लिंक-केवल उत्तर निम्न गुणवत्ता वाले हैं। यदि लक्ष्य साइट चलती है या गायब हो जाती है तो वे बेकार हो जाएंगे। कृपया अपना उत्तर संपादित करें और समाधान के संबंधित भाग को यहां उद्धृत करें।
C0deDaedalus

0

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

आप इस फ्रीवेयर टूल के "पेज" टैब में आंतरिक पेज नंबर योजना को जोड़ / हटा / बदल सकते हैं।

और सावधानी बरतें, पीडीएफ xchange दर्शक पृष्ठ संख्या योजना नहीं दिखाता है, और foxitreader का एक सही परिणाम होता है। मैंने एक्रोबेट रीडर का परीक्षण नहीं किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.