Я не знаю, есть ли для этого чисто командная строка, но PyPDF2 может помочь! Я только что адаптировал Gist, который я нашел , чтобы он соответствовал вашим потребностям, если вы не знакомы с программированием на Python.
Следующий код также доступен в виде Github Gist .
Не забудьте сделать sudo dnf install python3-PyPDF2
и изменить имена файлов.
#!/bin/python3
from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.pdf import PageObject
# Theses files are just for testing, no point in merging these
reader = PdfFileReader(open("Nextcloud Manual.pdf",'rb'))
# this defines the output page format (relevant if not the same)
sup_reader = PdfFileReader(open("Cplusplus.pdf",'rb'))
writer = PdfFileWriter()
for pageNo in range(min(reader.getNumPages(), sup_reader.getNumPages())):
print("Merging page:", pageNo)
invoice_page = reader.getPage(pageNo)
sup_page = sup_reader.getPage(pageNo)
translated_page = PageObject.createBlankPage(None, sup_page.mediaBox.getWidth(), sup_page.mediaBox.getHeight())
translated_page.mergeScaledTranslatedPage(sup_page, 1, 0, 0)
translated_page.mergePage(invoice_page)
writer.addPage(translated_page)
with open('out.pdf', 'wb') as f:
writer.write(f)
Редактировать :Обратите внимание, что это автоматически игнорирует превышение количества страниц в PDF-файле, содержащем больше страниц. Я мог бы предложить лучшее решение для этого, если это необходимо.
Цитирую !!
Когда вы выполняете ls -l
, да, он генерирует новые строки (, когда вы сообщаете ). Однако, когда вы выполняете echo `ls -l`,
, новые строки не видны. Попытайся.
Причина в том, что конструкция `...`
является расширением команды, а на большинство расширений (есть и другие )влияет разделение оболочки (, если они не заключены в кавычки ). Разделение оболочки удаляет любой из символов в переменной IFS
, которая по умолчанию содержит <space><tab><newline>
. Все символы новой строки из ls -l
удаляются, и в этот момент строка разделяется. Позже echo
может соединять каждую разделенную часть, разделяя их одним пробелом.
Так что, да, и старое, и правильное и предпочтительное в любое время новое:
echo `ls -l`
echo $(ls -l)
Файлы в текущем каталоге будут перечислены одной строкой без новой строки, если по умолчанию используется IFS.
Перенаправление этой строки в файл приведет к записи одной строки в этот файл, как и следовало ожидать.
echo $(ls -l) > file
Чтобы сохранить символы новой строки, процитируйте расширение:
echo "$(ls -l)"
Или, пожалуйста, избегайте использования устаревшего`...`
:
echo "`ls -l`"
А чтобы получить вывод в файл, просто перенаправьте его в файл:
echo "$(ls -l)" > file