দুটি পিডিএফ ফাইলের পার্থক্য?


39

অনুরূপ দুটি পিডিএফ ফাইলের মধ্যে পার্থক্য দেখানোর জন্য আমি একটি ভাল প্রোগ্রামের সন্ধান করছি। বিশেষত, আমি এমন কিছু সন্ধান করছি যা ফাইলগুলির একটি এসকিআই সংস্করণে ("পিডিফুটটেক্সট" সহ) কেবল আলাদা হয় না। এই কি pdfdiff.py আছে।


এটি কি ওপেন সোর্স এবং ফ্রি হতে হবে?
রিনজুইন্ড

@ রিনজুইন্ড: অবশ্যই এটি পছন্দনীয়।
krumpelstiltskin

inetsoftware.de/other-products/pdf-content-comparer/… ২.২ এখানে বলা হয়েছে এটি লিনাক্সের (runPDFC.sh) এর অধীনে ব্যবহার করা যেতে পারে তবে ফাইলটি সংরক্ষণাগারে নেই (কেবলমাত্র একটি ব্যাট ...) তবে এটি জাভা তাই হতে পারে এর নামকরণ (?)
রিনজউইন্ড

@ রিনজুইন্ড: জাভা সম্পর্কে কেন জানি না তা চালাচ্ছে না তা জানার জন্য আমি পর্যাপ্ত পরিমাণে জানি না। আমি করি: java -cp। -জার পিডিএফসি.জার তবে একটি জাভা.লং.নো ক্লাসডেফফাউন্ড ইরার পান :(
ক্রম্পেলসিলটিস্কিন

@ রিনজুইন্ড: আমি এটি উইন্ডোতে চালিয়েছি; প্রোগ্রামটি ভয়ানক। এটি পিএনজি তৈরি করে যা অবৈধ।
krumpelstiltskin

উত্তর:


28

আপনি এটির জন্য ডিফপিডিএফ ব্যবহার করতে পারেন । বর্ণনা থেকে:

ডিএফপিডিএফ দুটি পিডিএফ ফাইলের তুলনা করতে ব্যবহৃত হয়। ডিফল্টরূপে প্রতিটি জোড়া পৃষ্ঠার পাঠ্যের তুলনা হয় তবে পৃষ্ঠাগুলির উপস্থিতি তুলনা করাও সমর্থিত (উদাহরণস্বরূপ, যদি একটি চিত্র পরিবর্তন হয় বা অনুচ্ছেদে পুনরায় ফর্ম্যাট করা হয়)। নির্দিষ্ট পৃষ্ঠাগুলি বা পৃষ্ঠার রেঞ্জের তুলনা করাও সম্ভব। উদাহরণস্বরূপ, যদি একটি পিডিএফ ফাইলের দুটি সংস্করণ থাকে তবে একটি পৃষ্ঠা 1-12 পৃষ্ঠাতে এবং অন্যটি পৃষ্ঠার 1-13 পৃষ্ঠাতে 4 পৃষ্ঠা হিসাবে অতিরিক্ত পৃষ্ঠা যুক্ত হওয়ার কারণে তাদের দুটি পৃষ্ঠার সীমা নির্দিষ্ট করে তুলনা করা যেতে পারে, 1 প্রথমটির জন্য -12 এবং দ্বিতীয়টির জন্য 1-3-, 5-13 -13 এটি ডিফফডিডিএফগুলিকে জোড়া (1, 1), (2, 2), (3, 3), (4, 5), (5, 6) এবং আরও (12, 13) এর সাথে পৃষ্ঠাগুলির তুলনা করবে।


2
এটি আমি দেখেছি সেরা। কেবলমাত্র আমি দেখতে পাচ্ছি যে এটি পিডিএফএস পৃষ্ঠার জন্য পৃষ্ঠার তুলনা করে। সুতরাং আপনি যদি 1 অনুগ্রহ করে পৃষ্ঠাটি 1 যুক্ত করুন, তার পরে প্রতিটি পৃষ্ঠার ভিক্ষা এবং শেষ মেলে না। :(
krumpelstiltskin

3
আমি মনে করি লিঙ্কটি এখন আর সঠিক নয়। নতুন সংস্করণ ৩. * কেবল উইন্ডোজের জন্যই উপলব্ধ বলে মনে হচ্ছে। পুরানো সংস্করণ ২। * sudo apt-get install diffpdfযদিও এর মাধ্যমে ইনস্টল করা যেতে পারে ।
পিক

22

আমি ডিফফডিডিএফ (@ কেবিবি দ্বারা প্রস্তাবিত প্রোগ্রাম) ছোটখাটো পরিবর্তনের চেয়ে বেশি ব্যবহারের উপযোগী করার জন্য একটি হ্যাক বের করেছি। আমি যা করি তা হল সমস্ত পৃষ্ঠাগুলি পিডিএফসকে পিডিএফজাম ব্যবহার করে একটি দীর্ঘ স্ক্রোলে যুক্ত করে এবং তারপর স্ক্রোলগুলি তুলনা করে। বড় বিভাগগুলি সরানো বা sertedোকানো হলেও এটি কাজ করে!

এখানে একটি বাশ স্ক্রিপ্ট যা কাজটি করে:

#!/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

2
আমি আপনার স্ক্রিপ্টটি সাদা স্থান-সামঞ্জস্যপূর্ণ এবং অনন্য টেম্পাইলগুলি যুক্ত করেছি। আমি আশা করি আপনি কিছু মনে করবেন না।
গ্লুটানীমেট

2
স্ক্রিপ্টটি ওয়ার্কিং ডিরেক্টরিতে একটি খালি পাঠ্য ফাইল তৈরি করবে এমন একটি ছোট বাগও স্থির করে। (">" এবং সম্পর্কিত
অপারেশনগুলি

2
একটি শেষ মন্তব্য: এই স্ক্রিপ্টটি কেবল ডিআইএন এ 4 আকারের নথিগুলির জন্য সূক্ষ্মভাবে কাজ করবে। এটি ছোট দস্তাবেজগুলির সাথে কাজ করার জন্য আপনাকে PAGEHEIGHT মানটি সামঞ্জস্য করতে হবে। আমি নিশ্চিত যে এটি স্বয়ংক্রিয় করার একটি উপায় আছে তবে এটিএম কীভাবে তা জানেন না।
গ্লুটোনিমেট

2
@ গ্লুটানীমেট উন্নতি করার জন্য ধন্যবাদ। আমি স্বেচ্ছাচারী এবং বিবিধ আকারের পিডিএফগুলির তুলনা করার জন্য সমর্থন যুক্ত করেছি (যতক্ষণ না প্রতিটি পিডিএফের পৃষ্ঠাগুলি সমান আকারের হয়, তা)।
ক্রম্পেলসটিল্টস্কিন

সুবিধার্থে একটি সংক্ষিপ্তসারে সংরক্ষণ করুন gist.github.com/timabell/9616807b2fe3fa60f234
টিম

8

যদিও এটি সরাসরি সমস্যার সমাধান করে না, কয়েকটি নির্ভরতার সাথে কমান্ডলাইন থেকে এটি করার একটি দুর্দান্ত উপায়:

diff <(pdftotext -layout old.pdf /dev/stdout) <(pdftotext -layout new.pdf /dev/stdout)

https://linux.die.net/man/1/pdftotext

এটি বেসিক পিডিএফ তুলনার জন্য সত্যই ভাল কাজ করে। আপনার কাছে পিডিফোটোটেক্সটের একটি নতুন সংস্করণ থাকলে আপনি এর -bboxপরিবর্তে চেষ্টা করতে পারেন -layout

যতক্ষণ না আলাদা প্রোগ্রামগুলি যায়, আমি ছড়িয়ে পড়া পছন্দ করি, সুতরাং কমান্ডটি এতটা সামান্য পরিবর্তিত হয়:

diffuse <(pdftotext -layout old.pdf /dev/stdout) <(pdftotext -layout new.pdf /dev/stdout)

http://diffuse.sourceforge.net/

আশা করি এইটি কাজ করবে.


3

তুলনা করার জন্য আপনার কাছে যদি 2-3 বিশাল পিডিএফ (বা এপাব বা অন্যান্য ফর্ম্যাট, নীচে পড়ুন) ফাইল থাকে তবে এর পাওয়ারটি একত্রিত করা সম্ভব:

  1. ক্যালিবার (আপনার উত্সকে পাঠ্যে রূপান্তর করতে)

  2. মেল্ড (টেক্সট ফাইলের মধ্যে পার্থক্যটি সন্ধান করতে)

  3. সমান্তরাল (আপনার সমস্ত সিস্টেমের গতির গতির ব্যবহার করতে)

স্ক্রিপ্টের নীচে নিম্নলিখিত ফাইল ফর্ম্যাটগুলির যে কোনওটিকে ইনপুট হিসাবে গ্রহণ করুন: MOBI, LIT, PRC, EPUB, ODT, এইচটিএমএল, সিবিআর, সিবিজেড, আরটিএফ, টিএক্সটি, পিডিএফ এবং এলআরএস।

যদি ইনস্টল না করা থাকে তবে মেল্ড, ক্যালিবার এবং সমান্তরাল ইনস্টল করুন:

#install packages
sudo apt-get -y install meld calibre parallel

আপনার কম্পিউটারের যে কোনও জায়গা থেকে কোডটি কার্যকর করতে সক্ষম হতে "ডিরেক্টরি / 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 মিনিট সময় লেগেছে। ধীর, তবে নির্ভরযোগ্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.