एक पीडीएफ के पृष्ठों को नवीनीकृत करें


25

मैं कस्टम पेज नंबरों को अलग-अलग पेज पर असाइन करने के लिए स्कैन किए गए पीडीएफ के मेटाडेटा को संपादित करना चाहता हूं । उदाहरण के लिए, अब जो पृष्ठ 1-3 हैं, वे मुझे i, ii और iii कह सकते हैं और 4-10 पृष्ठ क्या हैं, मैं 1-7 पर कॉल करना चाहता हूं। मैं पृष्ठों के वास्तविक क्रम को बदलना नहीं चाहता।

क्या ए) फ्री टूल्स का उपयोग करने का एक तरीका है; और बी) "बैच में" ऐसा करने का एक तरीका है (इसलिए, प्रत्येक पृष्ठ को मैन्युअल रूप से पुन: उपयोग किए बिना)।


1
क्या आप LaTeX पर आधारित समाधान से खुश होंगे? पीडीएफ को अन्यथा खाली दस्तावेज़ में शामिल करना और अपनी पसंद के अनुसार पीडीएफ पेज नंबर बनाना संभव होगा।
मार्टिन स्चेरर

मैं वास्तव में एक LaTeX समाधान के साथ खुश रहूंगा। क्या आप नीचे कुछ विवरण पोस्ट कर सकते हैं?
MarkovCh1

जवाबों:


22

यहाँ LaTeX पर आधारित एक समाधान है। यह pdfpagesस्कैन किए गए पीडीएफ (यहां कहा जाता है scan.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। हालांकि कोई विशेष एनोटेशन incl। हाइपरलिंक गायब हो जाएंगे। यह स्कैन की गई PDF के साथ कोई समस्या नहीं होनी चाहिए।

यदि आपको अधिक बार इसकी आवश्यकता होती है, तो आप एक स्क्रिप्ट लिख सकते हैं जो रोमन संख्या वाले पृष्ठों की संख्या और फ़ाइल नाम को तर्कों के रूप में स्वीकार करता है और उपरोक्त कोड के साथ एक अस्थायी बनाता है जहां नाम और संख्याएं चर होती हैं, जिसे तब संकलित किया जाता है।


इतने गहन उत्तर के लिए धन्यवाद! यह एक बेहतरीन उपाय है। केवल अन्य समाधानों के बारे में मुझे पता था। या तो .NET या कुछ समान रूप से भयानक शामिल था, या एडोब एक्रोबेट में संवादों के माध्यम से वैडिंग (जो मैं वैसे भी बर्दाश्त नहीं कर सकता)। यह भी पटकथा है!
MarkovCh1

अच्छा समाधान! मैं प्रत्येक अनुभाग / अध्याय की शुरुआत में हाइपरलिंक के साथ बाएं पैनल पर बुकमार्क / रूपरेखा की बैच पीढ़ी के एक ही सवाल के बारे में सोच रहा था। क्या लैटेक्स का उपयोग करना संभव है? यहाँ मेरा सवाल askubuntu.com/questions/27312/bookmark-pdf-and-djvu-files है । धन्यवाद!
टिम


यह एक शानदार जवाब है, मैंने इसका इस्तेमाल किया और यह पूरी तरह से काम करता है।
एंड्रिया लज्जाज़ारो

1
@ टीआईजीआर: हां, ऐसा इसलिए है क्योंकि मूल पीडीएफ के पेज एक नए पीडीएफ में जोड़े जाते हैं और इस प्रक्रिया में हाइपरलिंक और इसी तरह की चीजों को छोड़ दिया जाता है (सुरक्षा के लिए जैसा कि मुझे याद है)। क्योंकि ओपी स्कैन किए गए पीडीएफ के बारे में था, यह कोई समस्या नहीं थी।
मार्टिन स्चेरर

10

आप पाठ संपादक के साथ ऐसा कर सकते हैं।

जैसा कि उत्तर कहता है, एक पाठ संपादक, खोज /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

आफर्स की, आप स्क्रिप्टिंग भाषाओं का उपयोग करके स्वचालित रूप से ऐसा कर सकते हैं।

पीडीएफ मानक - पृष्ठ लेबल में विस्तृत विनिर्देश हैं।


+1 यह उत्तर स्वीकार किए गए की तुलना में बहुत सरल और बेहतर है, और कल्पना की कड़ी एक बड़ी मदद है।
जजा

6

jPDF Tweak एक ओपन सोर्स ग्राफिकल यूटिलिटी है जो पेज नंबरिंग (सही शब्द "पेज लेबलिंग" है) और कई अन्य शुरुआती उन्नत पीडीएफ एडिटिंग फीचर्स प्रदान करता है। यह उबंटू और अन्य ऑपरेटिंग सिस्टम पर चलता है।

प्रलेखन पेज कदम-दर-कदम निर्देश प्रदान करता है।


धन्यवाद, इसने वास्तव में मेरी मदद की, रूपों और सभी को संरक्षित करना। जेपीडीएफ ट्वीक वास्तव में बहुत शक्तिशाली चीज है, हालांकि बहुत सुविधाजनक इंटरफ़ेस नहीं है।
तिवारी

यदि मूल प्रश्न में बैच नौकरियों का उल्लेख नहीं किया गया है, तो मैं कहूंगा कि यह उत्तर वास्तव में स्वीकृत होने के योग्य है।
ब्रायन जेड

4

पीडीएफ मॉड नामक एक उपकरण है जो पीडीएफ के पन्नों को पुनर्व्यवस्थित करने के लिए एक नि: शुल्क उपकरण है।

इसे उबंटू सॉफ्टवेयर सेंटर से उबंटू में 10.10 और उससे अधिक में इंस्टॉल किया जा सकता है।

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

गुड लक: डी


4
आह, लेकिन मेरा सवाल पृष्ठों को फिर से व्यवस्थित करने के बारे में नहीं पूछ रहा था। इसे पृष्ठों के लिए मेटाडेटा बदलना था: पृष्ठ संख्याओं को पुनः लोड करें (पहले कुछ पृष्ठों के रूप में रोमन अंकों को सम्मिलित करें, शायद कुछ को छोड़ दें; पीडीएफ निश्चित रूप से पूर्व का समर्थन करते हैं)।
मार्कोव्ह 1

3

बस एक संकेतक मिला जिसे इसके लिए उपयोग करना संभव हो सकता है ghostscript, यहां: pdftk - पीडीएफ में बुकमार्क जोड़ें और संपादित करें - यूनिक्स और लिनक्स - स्टैक एक्सचेंज # 18600 ; यह लिंक को संदर्भित करता है:

हालांकि, बुकमार्क के साथ उपरोक्त सौदा - तार्किक पृष्ठांकन के साथ नहीं। यह pdfmarkReference.pdf से निकलता है , आवश्यक "कमांड" ' /Label' (या ' /PAGELABEL') है - और यह आगे PDFReference.pdf अध्याय 8.3.1 "पेज लेबल" को संदर्भित करता है । दुर्भाग्य से, उस अध्याय में यह स्पष्ट रूप से नहीं बताया गया है कि पेज लेबल के साथ pdfmark का उपयोग कैसे किया जा सकता है - लेकिन यह पोस्ट करता है:

/ PAGELABEL pdfmark के पास कोई / पृष्ठ कुंजी नहीं है, इसलिए कोई केवल 'वर्तमान' पृष्ठ के लिए लेबल सेट कर सकता है (और, एक परिणाम के रूप में, एक समय में केवल एक पृष्ठ के लिए)। चूंकि आप इसे बहुत शुरुआत में कहते हैं, इसलिए यह 1 पेज के लिए और केवल इसके लिए एक लेबल सेट करने की उम्मीद है।

एक ही पृष्ठ के लिए एकाधिक / PAGELABELs: pdfmark संदर्भ कहता है कि अंतिम प्रभावी होता है, इसलिए आपके 1 कमांडलाइन का परिणाम ठीक है। नोट / पृष्ठ कुंजी को अनदेखा किया गया है।

पोस्टस्क्रिप्ट से पेज लेबल कैसे सेट करें? मैं 2 तरीकों के बारे में सोच सकता हूं:

(ए) 100% प्रलेखित तरीका:

प्रत्येक पृष्ठ के भाग के रूप में एक / पेजेल जारी करें।

(बी) कम प्रलेखित तरीका: ...

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

... और उस धागे में आगे:

जैसा कि यह काम करना; चूंकि मूल फ़ाइल एक पीडीएफ फाइल है, इसलिए आप फ़ाइल से प्रत्येक पृष्ठ को व्यक्तिगत रूप से चला सकते हैं। तो आप पेज 1 के लिए पेजेल पेजमार्क सेट कर सकते हैं, मूल फाइल से पेज 1 चला सकते हैं, पेज 2 के लिए पेजेल सेट कर सकते हैं, पेज 2 को मूल फाइल से चला सकते हैं।

क्योंकि लेबल (जैसा कि SaGS) ने कहा है कि वर्तमान पृष्ठ पर लागू किया गया है, यह आउटपुट पीडीएफ फाइल में प्रत्येक पृष्ठ के लिए लेबल को सही ढंग से सेट करना चाहिए। (चेतावनी: मैंने वास्तव में यह कोशिश नहीं की है)

संपादित करें: बस इसे दिखाने के लिए - यदि आपने इसे 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 से शुरू होती है ... यह मूल रूप से एक संशोधित उदाहरण है। पीडीएफ संदर्भ (अधिक के लिए टिप्पणियां देखें):

% 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 एक्सटेंशन और पेजिंग मैक्रो के साथ ट्रिक कर सकता है।

एक सही समाधान नहीं है, लेकिन यह मेरे लिए काम करता है (पीडीएफ मॉड का उपयोग करने के अलावा - जो मैं दृढ़ता से सुझाव दूंगा)।


OpenOffice.org 3.2 के लिए pdf-import एक्सटेंशन का भंडाफोड़ हुआ है। आयात करना (ड्रा और लेखक में) "I / O त्रुटि देता है।"
MarkovCh1 16

0

PyPdf , PDF दस्तावेज़ों में हेरफेर करने के लिए एक अजगर पुस्तकालय का प्रयास करें । कुछ, लेकिन बहुत ज्यादा नहीं, प्रोग्रामिंग आवश्यक होगी।

आप PDFtk पर भी नज़र डाल सकते हैं , हालाँकि मैंने जाँच नहीं की है कि क्या यह अलग-अलग पेज से जुड़े पेज नंबर को बदलने का समर्थन करता है। दोनों उबंटू में पैकेज के रूप में उपलब्ध हैं।


1
हम्म, PDFtk ऐसा करने में सक्षम नहीं लगता है। pyPdf में मेटाडेटा निकालने के लिए कई तरीके हैं, लेकिन लगता है कि वे दस्तावेज़ में वापस लिखने में सक्षम नहीं हैं।
MarkovCh1

0

PDFEdit नाम का एक और ऐप है - इसका स्रोत फोर्ज पर होस्ट किया गया है। स्रोत फोर्ज प्रोजेक्ट पेज - हालांकि यह मदद नहीं करता है क्योंकि यह आपके लिए आवश्यक कार्यक्षमता नहीं है

पीडीएफ एडिट में टेक्स्ट एडिटिंग


1
मुझे नहीं लगता कि पीडीएफ एडिट पेज नंबर बदल सकता है। मैंने कोशिश की और किसी भी मामले में सफल नहीं हुआ।
मार्कोव

2
@Sygygy - वास्तव में, अभी-अभी जाँच की गई: यदि कोई दस्तावेज़ है, तो वह डिक्ट pdfeditदिखा सकता Catalog/PageLabelsहै, लेकिन यदि वह चयनित है, तो यह कहता है: " इस शब्दकोश में कोई भी सीधे संपादन योग्य गुण नहीं हैं " ... चीयर्स!
सदाउ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.