Различаются два файла PDF?

Существует обширная документация о том, как создавать пользовательские установочные компакт-диски . Отвечает на ваш вопрос этот отрывок из этой страницы:

Вероятно, основной мотивацией для создания ваших собственных установочных компакт-дисков является изменение установленных пакетов; в частности, вы можете добавить несколько пакетов на компакт-диск.

Самый простой способ сделать это - создать структуру репозитория «extras», содержащую только ваши дополнительные .debs, и объединить их в иерархию CD-файлов перед перестройкой образа .ISO. Это руководство покажет вам, как это сделать.

blockquote>

Я бы предостерег от чрезмерной настройки, предпочитая копировать /home/tobin/.config и подобные файлы, используя простой rsync, после того, как машины загружены. Это предположение в значительной степени основано на введении на странице инструкции:

Процесс настройки или «ремастеринга» установочных компакт-дисков Ubuntu не особенно сложен, но он немного утомителен и привередлив.

blockquote>

Который я читаю как «чем умнее ты пытаешься быть, тем труднее будет понять»

.

36
задан 18.05.2020, 01:08

4 ответа

Хотя это не решает проблему напрямую, вот хороший способ сделать все это из командной строки с несколькими зависимостями:

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

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

Это действительно хорошо работает для базового сравнения PDF. Если у вас есть более новая версия pdftotext, вы можете попробовать -bbox вместо -layout.

Что касается программ сравнения, мне нравится использовать diffuse, поэтому команда меняется очень незначительно:

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

http://diffuse.sourceforge.net/

Надеюсь, это поможет.

0
ответ дан 18.05.2020, 01:09

Если у вас есть 2-3 огромных файла в формате pdf (или epub или других форматах, см. Ниже) для сравнения, тогда можно объединить мощность:

  1. калибр (для преобразовать ваш источник в текст)

  2. meld (для визуального поиска различий между текстовыми файлами)

  3. параллельно (чтобы использовать всю вашу систему ядер для ускорения)

Ниже скрипт принимает в качестве входных данных любой из следующих форматов файлов: MOBI, LIT, PRC, EPUB, ODT, HTML, CBR, CBZ, RTF, TXT, PDF и LRS.

Если не установлено, установите meld, калибр и параллель:

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

Чтобы иметь возможность выполнить код из любой точки вашего компьютера, сохраните следующий код в файле с именем «difpub» (без расширения) внутри каталога "/ usr / local / bin".

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

Я проверяю его сравнить 2 ревизии +1600 страниц PDF, и он отлично работает. Поскольку Calibre написан с использованием Python для переносимости, преобразование обоих файлов в текст заняло 10 минут. Медленно, но надежно.

0
ответ дан 18.05.2020, 01:09

Для этого вы можете использовать DiffPDF . Из описания:

DiffPDF используется для сравнения двух файлов PDF. По умолчанию сравнение выполняется для текста на каждой паре страниц, но сравнение внешнего вида страниц также поддерживается (например, если диаграмма изменена или переформатирован абзац). Также возможно сравнение отдельных страниц или диапазонов страниц. Например, если существует две версии файла PDF, одна со страницами 1-12, а другая со страницами 1-13 из-за добавления дополнительной страницы как страницы 4, их можно сравнить, указав два диапазона страниц: 1 -12 для первого и 1-3, 5-13 для второго. Это заставит DiffPDF сравнивать страницы в парах (1, 1), (2, 2), (3, 3), (4, 5), (5, 6) и т. Д. С (12, 13).

0
ответ дан 18.05.2020, 01:10
  • 1
    Это - лучший I' ve замечен. Единственная проблема, которую я вижу, - то, что это сравнивает pdfs страницу для страницы. Таким образом, если Вы включаете абзац, говорят, страница 1, beggining и конец каждой страницы после этого не соответствуют.: ( – Shahar ドーン Levi 18.05.2020, 01:10
  • 2
    Я думаю, что ссылка больше не корректна. Новая версия 3.*, кажется, доступен только для окон. Старая версия 2.* может все еще быть установлен через sudo apt-get install diffpdf, все же. – trincot 18.05.2020, 01:11

Я только что понял, как использовать DiffPDF (программу, предложенную @qbi) для более чем незначительных изменений. Что я делаю, это объединяю все страницы pdf в длинную прокрутку, используя pdfjam , а затем сравниваю прокрутки Он работает даже при удалении или вставке больших разделов!

Вот скрипт bash, который выполняет свою работу:

#!/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
0
ответ дан 18.05.2020, 01:11
  • 1
    Я сделал Ваш сценарий совместимым с пробелом и добавил уникальный tempfiles. Я надеюсь Вы don' t ум. – Fernando Carvajal 18.05.2020, 01:11
  • 2
    Один последний комментарий: Этот сценарий будет хорошо работать только для измеренных документов DIN A4. Необходимо будет скорректировать значение PAGEHEIGHT, чтобы заставить его работать с меньшими документами. I' m верный there' s способ автоматизировать это, но don' t знают как банкомат. – Dtipson 18.05.2020, 01:12
  • 3
    сохраненный к сути для удобства gist.github.com/timabell/9616807b2fe3fa60f234 – Chris Tobba 18.05.2020, 01:12
  • 4
    Спасибо за создание улучшений @Glutanimate. I' добавленная поддержка ve сравнения pdfs произвольных и отличающихся размеров (целый страницы в каждом PDF имеют универсальный размер, который является). – Fernando Carvajal 18.05.2020, 01:12
  • 5
    Также исправленный маленькая ошибка, где сценарий создал бы пустой текстовый файл в рабочем каталоге. (не забудьте всегда использовать двойные скобки с если операторы то использование " > " и связанные операнды.) – Fernando Carvajal 18.05.2020, 01:13

Теги

Похожие вопросы