Добавить отступы к нескольким изображениям

Я отсканировал пару страниц и немного отредактировал их, чтобы они выглядели аккуратно. Но поскольку я хотел их перепечатать, я заметил, что обрезал границы этих изображений, чтобы принтер не распечатывал все содержимое.

Я работаю в Linux, и у меня есть принтер Brother с драйверами для Linux, но параметр масштабирования почему-то не работает. Поэтому я решил масштабировать PDF (в который я преобразовал эти сканы), но драйвер принтера масштабирует их обратно, чтобы они соответствовали странице. (Если я отключу параметр масштабирования, он станет мусором)

Поэтому я подумал, что мог бы сделать несколько сценариев, чтобы изменить размер этих изображений с помощью пары строк и добавить некоторые отступы для принтера. Но я понятия не имею, как это сделать.

Вот моя первая попытка:

(define (resize-image filename-in filename-out )
  (let* ((image    (car (gimp-file-load RUN-NONINTERACTIVE filename-in "")))
         (drawable (car (gimp-image-active-drawable image)))
        )
     (gimp-image-resize image 2728 3819 124 173) 
     (gimp-file-save   RUN-NONINTERACTIVE image drawable filename-out "")
  )
)

Это не работает. Изображение просто остается неизменным.

Моя страница A4 с разрешением 2480x3472, поэтому я решил добавить 10% к ширине, чтобы она стала 2728x3819, и установить смещение на 5%, чтобы содержимое располагалось по центру (со значениями смещения 124 и 173).

Как мне это сделать правильно? Является ли GIMP хорошим методом? Существуют ли инструменты Linux, которые могли бы сделать это лучше?

Вы уверены, что проблема связана с драйвером печати или с диалоговым окном печати в GIMP? Вам действительно нужно использовать GIMP для печати документа? Вы пытались вставить изображение в документ текстового процессора, например, в LibreOffice?
Я преобразовал изображение в PDF и распечатал PDF с помощью pdfviewer...

Ответы (1)

Сначала я спросил об этом на StackOverflow , и кто-то там мне помог .
Позвольте мне поделиться с вами:

Это сработало для меня:

(define (resize-image filename-in filename-out )
  (let* ((image    (car (gimp-file-load RUN-NONINTERACTIVE filename-in "")))
         (drawable (car (gimp-image-active-drawable image)))
        )
    (gimp-image-resize image 2728 3819 124 173) 

    (let* ((layer (car (gimp-layer-new image 2728 3819 0 "Base" 100 0)))
          )
      (gimp-image-insert-layer image layer 0 1)
      (gimp-drawable-fill layer 2)
      (let* ((newlayer (car (gimp-image-flatten image)))
            )
        (gimp-file-save   RUN-NONINTERACTIVE image newlayer filename-out "")
      )
    )
  )
)
Чтобы объяснить, почему код работает: gimp-file-saveсохраняет слой (в исходном коде этот слой остается неизменным при изменении размера canavs с помощью gimp-image-resize). Таким образом, приведенный выше код изменяет размер холста, добавляет слой внизу, заполняет его белым цветом и объединяет с ним исходный слой. Итак, теперь у нас есть слой с новым размером и исходным содержимым.
Мартин, возможно, тогда ты мог бы принять свой собственный ответ? Если ты еще там?
Да жаль. Нельзя сразу принять собственный ответ, поэтому я забыл о вопросе...