मैं गतिशील रूप से एक पीडीएफ उत्पन्न कर रहा हूं। मैं शैल स्क्रिप्ट का उपयोग कर पीडीएफ में पृष्ठों की संख्या कैसे देख सकता हूं?पीडीएफ में पृष्ठों की संख्या खोजने के लिए खोल स्क्रिप्ट कैसे लिखें?
उत्तर
किसी भी अतिरिक्त पैकेज के बिना:
foo=$(strings < pdffile.pdf | sed -n 's|.*/Count -\{0,1\}\([0-9]\{1,\}\).*|\1|p' | sort -rn | head -n 1)
का उपयोग pdfinfo:
foo=$(pdfinfo pdffile.pdf | grep Pages | awk '{print $2}')
का उपयोग pdftk:
foo=$(pdftk pdffile.pdf dump_data|grep NumberOfPages| awk '{print $2}')
+1 मैक पर आखिरी तरफ, पीडीएफटीके के साथ, सीधे – gg349
पर काम किया, मैंने पाया कि खोल केवल विधि हमेशा विश्वसनीय नहीं है। मेरे पास पीडीएफ फाइलें हैं जिनमें केवल एक पृष्ठ है जिसमें कई/संख्याएं हैं जो अलग-अलग संख्याओं में बुद्धिमान हैं।मैं एक और दो तरीकों का उपयोग करने का सुझाव देता हूं। – Crami
@ क्रमी जानकारी के लिए धन्यवाद! क्या यह संभव है कि आप इनमें से कम से कम एक पीडीएफ साझा करें? –
इमेजमैजिक लाइब्रेरी एक उपकरण प्रदान करती है जिसे पहचानने के लिए कहा जाता है जो आउटपुट की लाइनों की गिनती के संयोजन के साथ आपको प्राप्त करता है ... imagemagick ब्रू के साथ ओएसएक्स पर एक आसान इंस्टॉल है।
यहाँ एक कार्यात्मक बैश स्क्रिप्ट है कि यह एक खोल चर को कैप्चर करता है और इसे वापस स्क्रीन पर उदासीनता ...
#/bin/bash
pdfFile=$1
echo "Processing $pdfFile"
numberOfPages=$(/usr/local/bin/identify "$pdfFile" 2>/dev/null | wc -l | tr -d ' ')
#Identify gets info for each page, dump stderr to dev null
#count the lines of output
#trim the whitespace from the wc -l outout
echo "The number of pages is: $numberOfPages"
और यह चलाने का उत्पादन ... है
$ ./countPages.sh aSampleFile.pdf
Processing aSampleFile.pdf
The number of pages is: 2
$
बीटीडब्लू: आपको बैकटिक्स के बजाय '$() 'का उपयोग करना चाहिए \' \ '' [BashFAQ/082] (http://mywiki.wooledge.org/BashFAQ/082) –
कूल, अपडेटेड स्क्रिप्ट सुझाए गए अनुसार। – np0x
बस एक पुरानी स्क्रिप्ट खोद (ksh में) मैंने पाया:
#!/usr/bin/env ksh
# Usage: pdfcount.sh file.pdf
#
# Optimally, this would be a mere:
# pdfinfo file.pdf | grep Pages | sed 's/[^0-9]*//'
[[ "$#" != "1" ]] && {
printf "ERROR: No file specified\n"
exit 1
}
numpages=0
while read line; do
num=${line/*([[:print:]])+(Count)?(-)+({1,4}(\d))*([[:print:]])/\4}
((num > numpages)) && numpages=$num
done < <(strings "[email protected]" | grep "/Count")
print $numpages
pdftotext
उपयोगिता के बीच पाठ स्वरूप डालने पृष्ठ विराम के लिए एक pdf फ़ाइल धर्मान्तरित पेज (उर्फ: फार्म फ़ीड पात्रों $'\f'
):
1) pdftotext + ग्रेप:
$ pdftotext file.pdf - | grep -c $'\f'
NAME
pdftotext - Portable Document Format (PDF) to text converter.
SYNOPSIS
pdftotext [options] [PDF-file [text-file]]
DESCRIPTION
Pdftotext converts Portable Document Format (PDF) files to plain text.
Pdftotext reads the PDF file, PDF-file, and writes a text file, text-file. If text-file is
not specified, pdftotext converts file.pdf to file.txt. If text-file is ´-', the text is
sent to stdout.
, आपकी समस्या का समाधान करने के लिए उनमें से एक का चयन कई संयोजनों रहे हैं 2) pdftotext + awk (v1):
$ pdftotext file.pdf - | awk 'BEGIN{n=0} {if(index($0,"\f")){n++}} END{print n}'
3) pdftotext + awk (v2):
$ pdftotext sample.pdf - | awk 'BEGIN{ RS="\f" } END{ print NR }'
4) pdftotext + awk (v3):
$ pdftotext sample.pdf - | awk -v RS="\f" 'END{ print NR }'
आशा है कि यह मदद करता है!
केवल बिल्टिन खोल कमांड का उपयोग कर? या आप बाहरी उपकरण जैसे "अनुमति" देते हैं उदा। पीडीएफटीके या पीडीएफइन्फो? –
मैं किसी भी माध्यम से ठीक हूं लेकिन मुझे एक चर (शेल स्क्रिप्ट) में पृष्ठ संख्या की आवश्यकता है ताकि मैं इस पैरामीटर को किसी अन्य फ़ंक्शन में पास कर सकूं। – Manish
यह प्रश्न उपयोगी हो सकता है: (http://stackoverflow.com/questions/36655478/bash-routine-to-return-the-page-number-of-a-given-line-number-from-text-file) – Lacobus