Я пытался найти способ создать простую страницу PDF из терминала, который содержит только одну строку, например, "Вводную часть".
Некоторый фон: Я использую pdfunite для присоединения к музыкальным чартам вместе в единственный PDF. Вот пример:
pdfunite Welcome.pdf Rooftops.pdf Announcements.pdf ChildrensPrayer.pdf ComeAliveDryBones.pdf Benediction.pdf Dismissal.pdf ~/Desktop/2016-03-12.pdf
То, что я пытаюсь найти, является способом создать пользовательские листы в заключительном PDF все в одной единственной команде, подобной этому:
pdfunite Welcome.pdf (enscript "Have a seat" - | ps2pdf - output.pdf) Rooftops.pdf Announcements.pdf ComeAliveDryBones.pdf Benediction.pdf Dismissal.pdf ~/Desktop/2016-03-12.pdf
В сущности создание PDF, который содержит текст, "Имеет место" на лету и вставку его в корректное пятно заключительного документа.
Действительно ли это возможно?
pdfunite
пусть ошибка в случае, если дескриптор файла, содержащий стандартный вывод выполнения команды в замене команды, пуст к тому времени, когда это читается.
Таким образом, Вы - более обеспеченное использование альтернативы pdfunite
; так как Вы имеете ghostscript
установленный Вы могли использовать gs
:
gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=~/Desktop/2016-03-12.pdf Welcome.pdf <(enscript <<<"echo foo" -p -) Rooftops.pdf Announcements.pdf ComeAliveDryBones.pdf Benediction.pdf Dismissal.pdf
Если я понял правильно, что Вы были достаточно близки:
pdfunite Welcome.pdf <(enscript <<<"Have a seat" -p - | ps2pdf - -) Rooftops.pdf Announcements.pdf ComeAliveDryBones.pdf Benediction.pdf Dismissal.pdf ~/Desktop/2016-03-12.pdf
<<<"Have a seat"
маркер в enscript
команда перенаправит enscript
стандартный вход к строке и -p -
маркер сделает enscript
управляйте печатью к стандартному выводу;
Используя <()
вместо ()
сделает целое <()
маркер быть замененным дескриптором файла, содержащим стандартный вывод выполнения команды внутри <()
(Иначе обработайте замену), с помощью -
вместо output.pdf
сделает ps2pdf
распечатайте PDF к стандартному выводу вместо в файл.
Но проблема с этим подходом - это pdfunite
пусть ошибка в случае, если дескриптор файла, содержащий стандартный вывод выполнения команды в замене команды, пуст к тому времени, когда это читается.
Таким образом, Вы - более обеспеченное использование альтернативы pdfunite
; так как Вы имеете ghostscript
установленный Вы могли использовать gs
:
gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=~/Desktop/2016-03-12.pdf Welcome.pdf <(enscript <<<"echo foo" -p -) Rooftops.pdf Announcements.pdf ComeAliveDryBones.pdf Benediction.pdf Dismissal.pdf
% enscript <<<"foo" -p - | ps2pdf - foo.pdf
[ 1 page * 1 copy ] left in -
% gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=foobar.pdf foo.pdf <(enscript <<<"bar" -p -)
[ 1 page * 1 copy ] left in -
GPL Ghostscript 9.16 (2015-03-30)
Copyright (C) 2015 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
Loading NimbusMon-Bol font from /usr/share/ghostscript/9.16/Resource/Font/NimbusMon-Bol... 4726404 3142423 2470576 1091522 3 done.
Loading NimbusMon-Reg font from /usr/share/ghostscript/9.16/Resource/Font/NimbusMon-Reg... 4759732 3269347 2490768 1100127 3 done.
%
gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=foobar.pdf foo.pdf <(enscript <<<"bar" -p -)
правильно цепочки foo.pdf
и документ, содержащий слово "панель", сгенерированная с помощью сценария PostScript, сгенерированного enscript <<<"bar" -p -
.
Я пытаюсь создать маленький файл PDF с размером страницы, просто соответствующим тексту, т.е. небольшому PDF размера маркировки. Я думаю, что цель соответствует этому вопросу, как указано. В одной строке это может быть сделано следующим образом:
echo "foobar" | enscript --no-header -p out.ps && ps2pdf out.ps && pdfcrop out.pdf out.pdf
Это приводит к небольшому файлу, который похож на это:
я чувствую плохо не принятие ответа, предложенного @kos, но я не мог заставить это работать, и я предпочел продолжать простоту pdfunite. @kos помог мне понять enscript (СПАСИБО!)
, Мое конечное решение состояло в том, чтобы записать сценарий удара для создания временных файлов PDF, затем представить их в виде строки вместе использующий pdfunite.
команда дается следующим образом:
./charts.bash -o=output-filename.pdf ./AlmostThere.pdf ./Breathe.pdf -c="The Gospel According to Matthew" ./Doxology.pdf -c="Closing Prayer"
Вот сценарий удара (я - новичок, пойдите легкие)
#!/bin/bash
CHARTS=()
DELETEAFTER=()
for i in "$@"
do
case $i in
-o=*|--output=*)
OUTPUT="${i#*=}"
;;
-c=*|--create=*)
NEWFILENAME="${i#*=}"
NEWFILENAME=${HOME}/Desktop/${NEWFILENAME//[[:space:]]/}.pdf
enscript <<<"${i#*=}" -p - --no-header --font=Courier25 --margins=20:20:200:0 | ps2pdf - $NEWFILENAME
CHARTS+=("$NEWFILENAME")
;;
*)
# unknown option
CHARTS+=("${i#*=}")
DELETEAFTER+=("$NEWFILENAME");
;;
esac
done
pdfuniteString=$(printf " %s" "${CHARTS[@]}")
pdfuniteString=${pdfuniteString:1}
wait
pdfunite $pdfuniteString ${HOME}/Desktop/${OUTPUT}
wait
for i in "${DELETEAFTER[@]}"
do
if [ -n "$i" ]; then
rm "$i"
fi
done
echo Complete