मैं दो समान पीडीएफ फाइलों के बीच अंतर दिखाने के लिए एक अच्छे कार्यक्रम की तलाश में हूं। विशेष रूप से, मैं कुछ ऐसी चीज़ों की तलाश कर रहा हूं, जो फ़ाइलों के केवल एक एएससीआई संस्करण ("pdftotext") के साथ भिन्न नहीं होती हैं। यह pdfdiff.py करता है।
मैं दो समान पीडीएफ फाइलों के बीच अंतर दिखाने के लिए एक अच्छे कार्यक्रम की तलाश में हूं। विशेष रूप से, मैं कुछ ऐसी चीज़ों की तलाश कर रहा हूं, जो फ़ाइलों के केवल एक एएससीआई संस्करण ("pdftotext") के साथ भिन्न नहीं होती हैं। यह pdfdiff.py करता है।
जवाबों:
आप इसके लिए DiffPDF का उपयोग कर सकते हैं । विवरण से:
DiffPDF का उपयोग दो पीडीएफ फाइलों की तुलना करने के लिए किया जाता है। डिफ़ॉल्ट रूप से तुलना पृष्ठों के प्रत्येक जोड़े पर पाठ की होती है, लेकिन पृष्ठों की उपस्थिति की तुलना करने का भी समर्थन किया जाता है (उदाहरण के लिए, यदि एक आरेख बदला जाता है या एक पैरा सुधार किया जाता है)। यह भी संभव है कि सी> विशेष पृष्ठों या पृष्ठ श्रेणियों को छोड़ दें। उदाहरण के लिए, यदि पीडीएफ फाइल के दो संस्करण हैं, एक पृष्ठ 1-12 के साथ और दूसरा 1-13 पृष्ठों के साथ, क्योंकि अतिरिक्त पृष्ठ पेज 4 में जोड़ा गया है, तो उनकी तुलना दो पृष्ठ श्रेणियों, 1 से करके की जा सकती है। पहले के लिए 12 और 1-3 के लिए, दूसरे के लिए 5-13। यह जोड़े (1, 1), (2, 2), (3, 3), (4, 5), (5, 6), और इतने पर, (12, 13) में पृष्ठों की तुलना करें।
sudo apt-get install diffpdf
।
मैं सिर्फ एक हैक को पता लगाता हूं कि डिफपेडएफ बनाने के लिए (@qbi द्वारा सुझाया गया कार्यक्रम) मामूली बदलावों से अधिक उपयोग करने योग्य है। मैं जो कुछ भी करता हूं वह पीडीएफ़एम का उपयोग करके सभी पृष्ठों के पीडीएफ़ को एक लंबे स्क्रॉल में समेटना है और फिर स्क्रॉल की तुलना करना है। यह तब भी काम करता है जब बड़े वर्गों को हटा दिया जाता है या डाला जाता है!
यहाँ एक बैश स्क्रिप्ट है जो काम करती है:
#!/bin/bash
#
# Compare two PDF files.
# Dependencies:
# - pdfinfo (xpdf)
# - pdfjam (texlive-extra-utils)
# - diffpdf
#
MAX_HEIGHT=15840 #The maximum height of a page (in points), limited by pdfjam.
TMPFILE1=$(mktemp /tmp/XXXXXX.pdf)
TMPFILE2=$(mktemp /tmp/XXXXXX.pdf)
usage="usage: scrolldiff -h FILE1.pdf FILE2.pdf
-h print this message
v0.0"
while getopts "h" OPTIONS ; do
case ${OPTIONS} in
h|-help) echo "${usage}"; exit;;
esac
done
shift $(($OPTIND - 1))
if [ -z "$1" ] || [ -z "$2" ] || [ ! -f "$1" ] || [ ! -f "$2" ]
then
echo "ERROR: input files do not exist."
echo
echo "$usage"
exit
fi
#Get the number of pages:
pages1=$( pdfinfo "$1" | grep 'Pages' - | awk '{print $2}' )
pages2=$( pdfinfo "$2" | grep 'Pages' - | awk '{print $2}' )
numpages=$pages2
if [[ $pages1 > $pages2 ]]
then
numpages=$pages1
fi
#Get the paper size:
width1=$( pdfinfo "$1" | grep 'Page size' | awk '{print $3}' )
height1=$( pdfinfo "$1" | grep 'Page size' | awk '{print $5}' )
width2=$( pdfinfo "$2" | grep 'Page size' | awk '{print $3}' )
height2=$( pdfinfo "$2" | grep 'Page size' | awk '{print $5}' )
if [ $(bc <<< "$width1 < $width2") -eq 1 ]
then
width1=$width2
fi
if [ $(bc <<< "$height1 < $height2") -eq 1 ]
then
height1=$height2
fi
height=$( echo "scale=2; $height1 * $numpages" | bc )
if [ $(bc <<< "$MAX_HEIGHT < $height") -eq 1 ]
then
height=$MAX_HEIGHT
fi
papersize="${width1}pt,${height}pt"
#Make the scrolls:
pdfj="pdfjam --nup 1x$numpages --papersize {${papersize}} --outfile"
$pdfj "$TMPFILE1" "$1"
$pdfj "$TMPFILE2" "$2"
diffpdf "$TMPFILE1" "$TMPFILE2"
rm -f $TMPFILE1 $TMPFILE2
हालांकि यह सीधे मुद्दे को हल नहीं करता है, यहाँ कमांडलाइन से कुछ निर्भरता के साथ यह करने का एक अच्छा तरीका है:
diff <(pdftotext -layout old.pdf /dev/stdout) <(pdftotext -layout new.pdf /dev/stdout)
https://linux.die.net/man/1/pdftotext
यह बुनियादी पीडीएफ तुलना के लिए वास्तव में अच्छी तरह से काम करता है। यदि आपके पास pdftotext का नया संस्करण है, तो आप -bbox
इसके बजाय कोशिश कर सकते हैं -layout
।
जहाँ तक अलग-अलग प्रोग्राम चलते हैं, मुझे डिफ्यूज़ का उपयोग करना पसंद है, इसलिए कमांड कभी भी थोड़ा बदल जाता है:
diffuse <(pdftotext -layout old.pdf /dev/stdout) <(pdftotext -layout new.pdf /dev/stdout)
http://diffuse.sourceforge.net/
उम्मीद है की वो मदद करदे।
यदि आपके पास 2-3 विशाल पीडीएफ (या epub या अन्य प्रारूप हैं, तो नीचे पढ़ें) फ़ाइलों की तुलना करने के लिए, तो शक्ति को संयोजित करना संभव है:
कैलिबर (अपने स्रोत को पाठ में बदलने के लिए)
मेल्ड (पाठ फ़ाइलों के बीच अंतर के लिए नेत्रहीन खोज)
समानांतर (गति बढ़ाने के लिए अपने सभी सिस्टम कोर का उपयोग करने के लिए)
नीचे दी गई स्क्रिप्ट को निम्नलिखित फ़ाइल स्वरूपों में से किसी भी इनपुट के रूप में स्वीकार करें: MOBI, LIT, PRC, EPUB, ODT, HTML, CBR, CBZ, RTF, TXT, PDF और LRS।
यदि स्थापित नहीं है, तो मेल्ड, कैलिबर और समानांतर स्थापित करें:
#install packages
sudo apt-get -y install meld calibre parallel
आपके कंप्यूटर में कहीं से भी कोड निष्पादित करने में सक्षम होने के लिए, "diffepub" (निर्देशिका में कोई एक्सटेंशन नहीं) / usr / लोकल / बिन "नामक फ़ाइल में निम्न कोड को सहेजें।
usage="
*** usage:
diffepub - compare text in two files. Valid format for input files are:
MOBI, LIT, PRC, EPUB, ODT, HTML, CBR, CBZ, RTF, TXT, PDF and LRS.
diffepub -h | FILE1 FILE2
-h print this message
Example:
diffepub my_file1.pdf my_file2.pdf
diffepub my_file1.epub my_file2.epub
v0.2 (added parallel and 3 files processing)
"
#parse command line options
while getopts "h" OPTIONS ; do
case ${OPTIONS} in
h|-help) echo "${usage}"; exit;;
esac
done
shift $(($OPTIND - 1))
#check if first 2 command line arguments are files
if [ -z "$1" ] || [ -z "$2" ] || [ ! -f "$1" ] || [ ! -f "$2" ]
then
echo "ERROR: input files do not exist."
echo
echo "$usage"
exit
fi
#create temporary files (first & last 10 characters of
# input files w/o extension)
file1=`basename "$1" | sed -r -e '
s/\..*$// #strip file extension
s/(^.{1,10}).*(.{10})/\1__\2/ #take first-last 10 chars
s/$/_XXX.txt/ #add tmp file extension
'`
TMPFILE1=$(mktemp --tmpdir "$file1")
file2=`basename "$2" | sed -r -e '
s/\..*$// #strip file extension
s/(^.{1,10}).*(.{10})/\1__\2/ #take first-last 10 chars
s/$/_XXX.txt/ #add tmp file extension
'`
TMPFILE2=$(mktemp --tmpdir "$file2")
if [ "$#" -gt 2 ]
then
file3=`basename "$3" | sed -r -e '
s/\..*$// #strip file extension
s/(^.{1,10}).*(.{10})/\1__\2/ #take first-last 10 chars
s/$/_XXX.txt/ #add tmp file extension
'`
TMPFILE3=$(mktemp --tmpdir "$file3")
fi
#convert to txt and compare using meld
doit(){ #to solve __space__ between filenames and parallel
ebook-convert $1
}
export -f doit
if [ "$#" -gt 2 ]
then
(parallel doit ::: "$1 $TMPFILE1" \
"$2 $TMPFILE2" \
"$3 $TMPFILE3" ) &&
(meld "$TMPFILE1" "$TMPFILE2" "$TMPFILE3")
else
(parallel doit ::: "$1 $TMPFILE1" \
"$2 $TMPFILE2" ) &&
(meld "$TMPFILE1" "$TMPFILE2")
fi
सुनिश्चित करें कि स्वामी आपका उपयोगकर्ता है और उसके पास निष्पादन की अनुमति है:
sudo chown $USER:$USER /usr/local/bin/diffepub
sudo chmod 700 /usr/local/bin/diffepub
इसे जांचने के लिए, बस टाइप करें:
diffepub FILE1 FILE2
मैं इसे +1600 पृष्ठों की पीडीएफ के 2 संशोधनों की तुलना करने के लिए परीक्षण करता हूं और यह सही काम करता है। क्योंकि कैलिबर को पोर्टेबिलिटी के लिए अजगर का उपयोग करके लिखा गया है, इसलिए दोनों फाइलों को टेक्स्ट में बदलने में 10 मिनट का समय लगा। धीमा, लेकिन विश्वसनीय।