nixp.ru v3.0

17 октября 2017,
вторник,
03:15:20 MSK

DevOps с компанией «Флант»
Аватар пользователя Дмитрий Шурупов
Дмитрий Шурупов написал 5 августа 2005 года в 17:55 (790 просмотров) Ведет себя как фрик; открыл 669 тем в форуме, оставил 5687 комментариев на сайте.

Появилась необходимость генерировать и прилеплять к pdf-файлам т.н. watermarks.

Единственное решение, которое нашел для этого (требования см. ниже), — pdftk [http://www.pdfhacks.com/pdftk/]. Для того, чтобы собрать (релиз последний — pdftk 1.12), пришлось обновить gcc до:

$ gcc --version

gcc (GCC) 3.4.4

После этого на Debian (woody + sid + самосборка многих компонентов) собралось все без проблем (с Makefile.Debian; только поправил VERSUFF=, убрав «-3.3», т.к. с gcc 3.3.x у меня не собиралось). Однако при запуске pdftk ругается:

# pdftk a.pdf background wm.pdf output b.pdf

Segmentation fault

Аналогичное происходит и с другими операциями. Ничего полезного в strace найти не могу:

...
open("/lib/libnss_files.so.2", O_RDONLY) = 4
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220\35"..., 512) = 512
fstat64(4, {st_mode=S_IFREG|0644, st_size=34436, ...}) = 0
old_mmap(NULL, 33720, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0xb7378000
old_mmap(0xb7380000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x8000) = 0xb7380000
close(4)                                = 0
munmap(0xb73a7000, 60051)               = 0
open("/etc/passwd", O_RDONLY)           = 4
fcntl64(4, F_GETFD)                     = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
_llseek(4, 0, [0], SEEK_CUR)            = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=1088, ...}) = 0
mmap2(NULL, 1088, PROT_READ, MAP_SHARED, 4, 0) = 0xb73b5000
_llseek(4, 1088, [1088], SEEK_SET)      = 0
munmap(0xb73b5000, 1088)                = 0
close(4)                                = 0
getcwd("/var/mywww/sashop/pdf/pdftk-1.12/pdftk", 250) = 39
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
old_mmap(0x61000, 69632, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x61000
old_mmap(0x72000, 65536, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x72000
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++

Пробовал запускать собранную pdftk из .deb — то же самое. Как вариант, думал, что не хватает какой-то библиотеки, однако в соответствии с http://www.accesspdf.com/article.php/20041129180128366 все необходимое установлено.

Собственно, интересует, не пробовал ли кто работать с pdftk и с каким успехом это прошло, а также альтернативы для нанесения водяных знаков на pdf. Обязательные требования: бесплатность, функционирование под FreeBSD (+ очень желательно под Linux), возможность выполнения операции нанесения watermarks из консоли.