Добрый день!
Это моя первая тема так что не судите строго!
Задача такая: написал скрипт который ищет все .pdf файлы в указанной папке и и сжимает их через gs, столкнулся с проблемой когда в pdf файлах некорректно отображаются шрифты, то сделал конвертирование с odg а потом в pdf через libreDraw , но столкнулся с проблемой, т.к он обрезает страницы с альбомным форматом, что печально т.к часть информации теряется.
Хотелось бы что бы вы поделились опытом,на данный момент я вижу такое решение: Перед конвертацией узнавать какие страницы имеют альбомный формат, поворачивать их а уже потом конвертировать и сжимать.
Буду очень благодарен за информацию!
#!/bin/bash
# symlinks.sh: Список символических ссылок в каталоге.
directory="$1"
OUTFILE=/tmp/linkspdf.list
FILE=/tmp/linkspdf2.list
rm $FILE
rm $OUTFILE
# По умолчанию в текущем каталоге,
#+ если не определен иной.
echo "Начало поиска файлов с неправильным форматом"
for file in "$( find "$directory" -name "*.PDF" )"
do
echo "$file"
done | sort >> "$OUTFILE"
echo "Поиск завершен, начинаем переименовывать"
sort -u "$OUTFILE" > "$FILE"
NULL=''
while read line; do
if [ "$line" == "$NULL" ];
then
echo "Файлов с неправильным форматом нет"
else
LINE=$line
NULL=${LINE/".PDF"/".pdf"};
echo "Переименовываем $line в $NULL "
mv "$line" "$NULL"
fi
done < $FILE
rm $FILE
rm $OUTFILE
echo "Начало поиска"
for file in "$( find "$directory" -name "*.pdf" )"
do
echo "$file"
done | sort >> "$OUTFILE"
echo "Поиск завершен, начало сортировки"
sort -u "$OUTFILE" > "$FILE"
echo "Конец сортировки"
NULL=''
while read line; do
if [ "$line" == "$NULL" ];
then
echo "Файлов нет"
else
echo "Начало обработки $line"
LINE=$line
NULL=${LINE/".pdf"/"small.pdf"};
rm /tmp/pdf.log
linesize=$(stat -c%s "$line");
linesize=$(( $linesize / 1024 ))
echo "Размер до сжатия $linesize KB"
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile="$NULL" "$line" 2>&1 | tee -a /tmp/pdf.log
if [ -s /tmp/pdf.log ];
then
rm "$NULL";
echo "Конвертируем в .odg"
unoconv -f odg "$line";
rm "$line";
NULL=${LINE/".pdf"/".odg"};
echo "Конвертируем в .pdf"
unoconv -f pdf "$NULL";
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile="$NULL" "$line"
mv "$NULL" "$line"
else
echo "Удаление исходника"
rm "$line";
echo "Переименовываем в старое название"
mv "$NULL" "$line"
fi
nullsize=$(stat -c%s "$line");
nullsize=$(( $nullsize /1024 ))
echo "Размер после сжатия $nullsize KB"
linesize=$(( $linesize - $nullsize));
echo "Разница сжатия $linesize КB"
fi
sumsize=$(( $sumsize + $linesize));
echo "Общее сжатие $sumsize KB";
done < $FILE
sumsize=$(( $sumsize / 1024 ))
echo "Общее сжатие $sumsize MB";
exit 0