-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocx2pdf.zsh
More file actions
executable file
·119 lines (94 loc) · 4.13 KB
/
docx2pdf.zsh
File metadata and controls
executable file
·119 lines (94 loc) · 4.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/bin/zsh
# Путь к LibreOffice
LIBREOFFICE_PATH="/Applications/LibreOffice.app/Contents/MacOS/soffice"
TEMP_DIR="/private/tmp"
TEMPLATE_PATH="./avenir.ott"
# Проверка зависимостей: LibreOffice, qpdf и exiftool
check_dependencies() {
echo "Проверка LibreOffice..."
if [ ! -x "$LIBREOFFICE_PATH" ]; then
echo "Ошибка: LibreOffice не найден. Убедитесь, что оно установлено."
exit 1
fi
echo "Проверка qpdf..."
if ! command -v qpdf &>/dev/null; then
echo "qpdf не найден. Устанавливаю через Homebrew..."
brew install qpdf || {
echo "Ошибка: Не удалось установить qpdf. Установите его вручную и попробуйте снова."
exit 1
}
fi
echo "Проверка exiftool..."
if ! command -v exiftool &>/dev/null; then
echo "exiftool не найден. Устанавливаю через Homebrew..."
brew install exiftool || {
echo "Ошибка: Не удалось установить exiftool. Установите его вручную и попробуйте снова."
exit 1
}
fi
}
# Конвертация DOCX в PDF через LibreOffice
convert_docx_to_pdf() {
INPUT_FILE=$1
OUTPUT_FILE=$2
TEMP_ODT="$TEMP_DIR/$(basename "${INPUT_FILE%.docx}.odt")"
TEMP_TEMPLATE="$TEMP_DIR/$(basename "$TEMPLATE_PATH")"
echo "Копирование шаблона $TEMPLATE_PATH в $TEMP_TEMPLATE..."
cp "$TEMPLATE_PATH" "$TEMP_TEMPLATE" || {
echo "Ошибка: Не удалось скопировать шаблон в временную директорию."
exit 1
}
echo "Конвертация $INPUT_FILE в ODT..."
"$LIBREOFFICE_PATH" --headless --convert-to odt --outdir "$TEMP_DIR" "$INPUT_FILE" || {
echo "Ошибка: LibreOffice не смог конвертировать $INPUT_FILE в ODT."
exit 1
}
if [ ! -f "$TEMP_ODT" ]; then
echo "Ошибка: ODT файл $TEMP_ODT не найден."
exit 1
fi
echo "ODT успешно создан: $TEMP_ODT"
echo "Применение шаблона и конвертация в PDF..."
"$LIBREOFFICE_PATH" --headless --convert-to pdf:writer_pdf_Export --outdir "$(dirname "$OUTPUT_FILE")" "$TEMP_ODT" || {
echo "Ошибка: LibreOffice не смог конвертировать $TEMP_ODT в PDF."
exit 1
}
FINAL_PDF="$(dirname "$OUTPUT_FILE")/$(basename "${INPUT_FILE%.docx}.pdf")"
if [ -f "$FINAL_PDF" ]; then
mv "$FINAL_PDF" "$OUTPUT_FILE"
echo "PDF успешно создан: $OUTPUT_FILE"
else
echo "Ошибка: PDF файл не найден."
exit 1
fi
rm -f "$TEMP_ODT" "$TEMP_TEMPLATE"
}
# Добавление метаданных через exiftool
update_metadata_with_exiftool() {
PDF_FILE=$1
echo "Добавление метаданных через exiftool..."
exiftool -overwrite_original \
-Title="CV Document" \
-Author="Iakov Senatov" \
-Keywords="CV, PDF, Iakov Senatov" \
-Description="Generated CV Document for Iakov Senatov" \
-Subject="OS: $(uname -a); Processor: $(sysctl -n machdep.cpu.brand_string); Generated by docx2pdf.sh script; User: $USER" \
-BaseURL="https://github.com/senatov/MiMiNavigator" \
"$PDF_FILE" || {
echo "Ошибка: Не удалось обновить метаданные через exiftool."
return 1
}
echo "Метаданные успешно обновлены: $PDF_FILE"
}
# Проверка аргументов
if [ "$#" -ne 2 ]; then
echo "Использование: $0 input.docx output.pdf"
exit 1
fi
INPUT_FILE=$1
OUTPUT_FILE=$2
check_dependencies
convert_docx_to_pdf "$INPUT_FILE" "$OUTPUT_FILE"
echo "Шаг 1 завершён: PDF создан."
update_metadata_with_exiftool "$OUTPUT_FILE"
echo "Шаг 2 завершён: PDF с метаданными готов. Файл: $OUTPUT_FILE"