2013-07-17 4 views

उत्तर

51

cat ऑपरेशन का उपयोग करके, और एक पृष्ठ सीमा निर्दिष्ट करना।

pdftk infile.pdf cat 1-r2 output outfile.pdf 
+1

कर सकते हैं आप एक से अधिक पेज निकालना चाहते हैं, तो आप, श्रेणी बदल सकते हैं उदाहरण के 'के लिए 1-r3' सभी लेकिन पिछले दो पृष्ठों करता है। – mlissner

5

आप पृष्ठ संख्या पता लगाने के लिए की जरूरत है, तो, pdftk बिल्ली समारोह के साथ इस का उपयोग के बाद से (AFAICT) pdftk एक एक "पिछले से ऑफसेट" निर्दिष्ट करने के लिए अनुमति नहीं है।

पॉपप्लर (http://poppler.freedesktop.org/) से 'pdfinfo' जैसे टूल को यह प्रदान किया जा सकता है।

बैश पटकथा का एक सा में इस रैपिंग आसानी से इस प्रक्रिया को स्वचालित कर सकते हैं:

page_count=`pdfinfo "$INFILE" | grep 'Pages:' | awk '{print $2}'` 
page_count=$(($page_count - 1)) 
pdftk A="$INFILE" cat A1-$page_count output "$OUTFILE" 

जाहिर जोड़ने पैरामीटर, त्रुटि जाँच, और क्या-नहीं यह भी कहा कि पटकथा में रखा जा सकता है:

#! /bin/sh 

### Path to the PDF Toolkit executable 'pdftk' 
pdftk='/usr/bin/pdftk' 
pdfinfo='/usr/bin/pdfinfo' 


#################################################################### 
script=`basename "$0"` 


### Script help 
if [ "$1" = "" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-?" ] || [ "$1" = "/?" ]; then 
    echo "$script: <input-file.PDF> [<output-file.PDF>]" 
    echo " Removes the last page from the PDF, overwriting the source" 
    echo " if no output filename is given" 
    exit 1 
fi 

### Check we have pdftk available 
if [ ! -x "$pdftk" ] || [ ! -x "$pdfinfo" ]; then 
    echo "$script: The PDF Toolkit and/or Poppler doesn't seem to be installed" 
    echo " (was looking for the [$pdftk] and [$pdfinfo] executables)" 
    exit 2 
fi 

### Check our input is OK 
INFILE="$1" 
if [ ! -r "$INFILE" ]; then 
    echo "$script: Failed to read [$INFILE]" 
    exit 2 
fi 

OUTFILE="$2" 
if [ "$OUTFILE" = "" ]; then 
    echo "$script: Will overwrite [$INFILE] if processing is ok" 
fi 

timestamp=`date +"%Y%m%d-%H%M%S"` 
tmpfile="/tmp/$script.$timestamp" 

page_count=`$pdfinfo "$INFILE" | grep 'Pages:' | awk '{print $2}'` 
page_count=$(($page_count - 1)) 

### Do the deed! 
$pdftk A="$INFILE" cat A1-$page_count output "$tmpfile" 

### Was it good for you? 
if [ $? -eq 0 ]; then 
    echo "$script: PDF Toolkit says all is good" 
    if [ "$OUTFILE" = "" ]; then 
     echo "$script: Overwriting [$INFILE]" 
     cp -f "$tmpfile" "$INFILE" 
    else 
     echo "$script: Creating [$OUTFILE]" 
     cp -f "$tmpfile" "$OUTFILE" 
    fi 
fi 


### Clean Up 
if [ -f "$tmpfile" ]; then 
    rm -f "$tmpfile" 
fi 
+0

उस awk कमांड को कमी करने के लिए संशोधित किया जा सकता है, कुछ हद तक स्क्रिप्ट को सरल बनाना: grep पेज | awk '{printf ("% d", $ 2 - 1); } 'यह $ (($ page_count - 1)) अनावश्यक बनाता है। – Kingsley

+0

वास्तव में 'pdfinfo' की कोई ज़रूरत नहीं है,' pdftk' 'dump_data' उप-कमांड वाले पृष्ठों की संख्या प्रदान करता है: यह एक पंक्ति' संख्याऑफपृष्ठ: 8' – kebs

+1

उत्पन्न करता है यह भी ध्यान रखें कि आपको पृष्ठ को जानने की आवश्यकता नहीं है अंतिम पृष्ठ को हटाने के लिए गिनें (कम से कम पीडीएफटीके संस्करण 1.45 और इससे अधिक के लिए)। आप अंतिम पृष्ठ पर दूसरे से पहले इंगित करने के लिए '1-r2' का उपयोग कर सकते हैं। 'Pdftk' दस्तावेज देखें जो निम्न कहता है: आप पेज संख्या को संदर्भ पत्र में संदर्भित करके संदर्भ संख्या में संदर्भित कर सकते हैं। उदाहरण के लिए, पृष्ठ आर 1 दस्तावेज़ का अंतिम पृष्ठ है, r2 दस्तावेज़ का अगला-टू-अंतिम पृष्ठ है, और प्रस्तुति दस्तावेज़ का पहला पृष्ठ है। आप इस उपसर्ग का उपयोग श्रेणियों में भी कर सकते हैं, उदाहरण के लिए आर 3-आर 1 पीडीएफ के अंतिम तीन पृष्ठ हैं। – Six

3

cpdf के साथ, आप एक पृष्ठ को संदर्भित कर सकते हैं कि दस्तावेज़ के अंत से कितना दूर है, एक टिल्डे, साथ ही साथ शुरुआत भी।

तो, हम

cpdf in.pdf 1-~2 -o out.pdf 
+0

ऐसा टूल बनाने के लिए धन्यवाद। जादू की तरह काम करता है। एकमात्र चीज जो मैं चाहूंगा: आउटपुट फ़ाइल निर्दिष्ट नहीं है, "in.pdf" फ़ाइल का नाम बदल दिया गया है (उदाहरण के लिए, उदाहरण के लिए, "in_1--2.pdf") – lanenok

+0

मैं भी दोहराना चाहता हूं कि एक अविश्वसनीय टुकड़ा क्या है किट की यह है! पहले या आखिरी कुछ पृष्ठों (या कुछ और) को ट्रिम करना असाधारण रूप से आसान है। यहां तक ​​कि सॉफ्टवेयर का वितरण पूर्णता है, जिसमें एक स्थिर बाइनरी (लिनक्स 32, लिनक्स 64, ओएसएक्स, और विंडोज के लिए) शामिल हैं। इसमें महान पीडीएफ दस्तावेज़ भी शामिल हैं। मुझे आश्चर्य है कि पहले कभी सॉफ्टवेयर का सामना नहीं हुआ है, शायद ऐसा इसलिए है क्योंकि यह खुला स्रोत नहीं है (केवल जो मैं समझता हूं उससे गैर-वाणिज्यिक उपयोग के लिए मुफ्त)। – Six

संबंधित मुद्दे