Я запускаю сценарий bash, который создает PDF-файл в конце биллинга. Раньше я делал это с LaTeX, но пользователи просят решение, более похожее на MS Office. Поэтому я думаю об использовании документа LibreOffice и использовании LibreOffice в командной строке для создания PDF. Это работает. Но я понятия не имею, как ввести значения, которые мне нужно изменить (например, адрес и платежную информацию), в этот документ, прежде чем я смогу создать PDF-файл.
Предположим, что документ example.odt
содержит этот текст:
Dear $fist_name,
you own us $amount USD.
Regards
xyz
Поскольку example.odt
не очень легко редактировать из сценария Bash, я ищу другой способ ввести значения для $first_name
и $amount
.
Как лучше всего это сделать?
Вы можете начать с понимания того, что файл ODT — это просто файл ZIP. Следовательно, вы можете распаковать его с помощью такой команды, как unzip -x mydoc.odt
. Содержимое находится в XML-файле с именем content.xml.
С тем, как форматируются файлы odt, нет никакой гарантии, что текст останется вместе, если вы разархивируете его и отредактируете content.xml вручную. Иногда это работает, но как-то хлипко.
Файл LibreOffice представляет собой zip-архив, который можно распаковать с помощью
unzip old.odt -d example
cd example
Содержимое файла находится в файле content.xml
. Его можно изменить с помощью sed
или любого другого инструмента. После этого файл .odt
необходимо создать снова:
zip -r ../new.odt .
После этого PDF можно создать с помощью этой команды (путь из OS X):
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless
--convert-to pdf:writer_pdf_Export --outdir ~/Desktop/ ~/Desktop/new.odt
Пожалуйста, взгляните на Как создать минимальный, полный и проверяемый пример. Вы упомянули предыдущее решение LaTeX, которое может быть ценным дополнением к вашему сообщению.