Разработка технической документации и технические писатели Технические писатели и разработка технической документации технические писатели в Телеграм 

 obmen_soobsheniyami.png Чат для технических писателей 
 Зарегистрируйтесь
Страницы: 1
RSS
Автозапуск PDF сразу после его генерации
 
Привет всем.

Создал кастомный ANT-файл и shell-скрипт для его удобного запуска.
Теперь хочу добавить в этот ANT-файл кусочек кода, который бы позволил открыть готовый PDF сразу после отработки всего сценария:
Код
<exec executable="evince"> 
   <arg line="${output.dir}/taskbook.pdf" />
</exec>
Код срабатывает, но почему-то не после, а в процессе генерации PDF, поэтому Evince (просмотрщик PDF на моем Linux) выдает сообщение об ошибке, мол, файл не найден.
Видимо, я еще не совсем понимаю логику работы ANT. В .sh файле команды обрабатываются построчно — в ANT, видимо, нет, куда бы я этот код не вставлял. Я, конечно, могу вставить команду на открытие файла в shell-скрипт, но в таком случае мне бы пришлось каждый раз менять имя файла PDF при его изменении.
Кстати, это еще один вопрос, который меня интересует. Где в ANT задается имя для выходного PDF? Судя по тому, что у меня есть сейчас, он берется из названия .ditamap и не может быть изменен, в моем случае:
Код
<property name="args.input" location="${dita.dir}/samples/taskbook.ditamap"/>

DITA-OT 1.8
ANT на основе /samples/ant_sample/sample_pdf.xml
 
Цитата
Kit пишет:
Код срабатывает, но почему-то не после, а в процессе генерации PDF, поэтому Evince (просмотрщик PDF на моем Linux) выдает сообщение об ошибке, мол, файл не найден
Надо в отдельный таргет выводить вызов PDF
 
Цитата
Kit пишет:
В .sh файле команды обрабатываются построчно — в ANT, видимо, нет, куда бы я этот код не вставлял.
Только в заданной последовательности.  


Последовательность по разному задается.

Можно так.


Код
<target name="init-stages" depends="check_variables,coping-source-files">
      <antcall target="get-row"/>
   <antcall target="temp2dita"/>
   <antcall target="fix-variables-in-dita-files"/>
   <antcall target="dita2publicformat"/>
   <antcall target="delete-temp-folders"/>
   <antcall target="send-mail"/>
</target>


или так

Код
<target name="generateDPF">  

Код
<target name="openPDF" depends="generateDPF">
Изменено: ADVANCED - 11.03.2014 13:04:55
 
Цитата
Kit пишет:
Кстати, это еще один вопрос, который меня интересует. Где в ANT задается имя для выходного PDF? Судя по тому, что у меня есть сейчас, он берется из названия .ditamap и не может быть изменен, в моем случае:
Код
 <property name="args.input" location="${dita.dir}/samples/taskbook.ditamap"/> 
Можно переименовывать как угодно. Вот рабочий пример:

Код
<target name="build-n-public-techzad" depends="finder-propertyes-per-month">
    
<ant antfile="${builder.dir}\ditaot\conductor.xml" target="init">
        <property name="args.input" value="${reporting.month}_tempfiles\techzad.ditamap"/>
        <property name="output.dir" value="${out.dir}\${company-name}\techzad"/>
           <property name="pdf.customization.dir" value="${builder.dir}\cfg\techzad"/>
</ant> 
 
<move file="${out.dir}\${company-name}\techzad\${reporting.month}_tempfiles\techzad.pdf" tofile="${ftp.Z_disc}\${company-name}\ТЗ\Техническое задание № ${TZ-Number} на ${Only-Month-ImP}.pdf"/>
     
<delete quiet="true" dir="${out.dir}\${company-name}\techzad\"/> 
<echo> Удалена временная папка ${company-name} techzad</echo>

</target>
 
Цитата
ADVANCED пишет:
Цитата
Kit пишет:
Код срабатывает, но почему-то не после, а в процессе генерации PDF, поэтому Evince (просмотрщик PDF на моем Linux) выдает сообщение об ошибке, мол, файл не найден
Надо в отдельный таргет выводить вызов PDF
Хотя нет. Грамотней все таки открывать средствами шела или баша после того как файл сформирован, переименован.  Могут встречаться проблемы с открытием, т.к. физически файа еще нет, он в процессе записи на диск, а команда на его открытие уже обработана. В этом случае можно сделать задержку на пару секунд перед тем как  открывать файл. Если файл отправлялся по сети на серверный диск, это будет уже не пару секунд, а больше в зависимости от быстродействия сети.
 
Крупно отображается текст в виде кода. Моежт поменьше сделать?  ;)
 
Да, похоже, все-таки через shell. Потому что все равно система пытается открыть еще не создавшийся файл, независимо от приоритетов target.
Но почему у меня в выходной папке остается категория Configuration c cfg/common/artwork?
При изменении
Код
<delete dir="${output.dir}"/>
на
Код
<delete dir="${output.dir}/Configuration"/>
почему-то ничего не происходит   :|  
Эпизодически остаются неудаленными файлы dita.list и dita.xml.properties, логику этого я не уследил…
 
Цитата
Kit пишет:
Эпизодически остаются неудаленными файлы dita.list и dita.xml.properties, логику этого я не уследил…
Я тоже пытался проследить логику и не понял :)  Проще удалять всю папку.
Перед началом генерации создаю папку, результат выкладываю в другу папку с именем каким мне надо, а не именем ditamap. А потом удаляю созданную папку.
 
Тупанул я, вот в чем проблема была. Меня ввела в заблуждение команда на очищение папки. Внимательней изучив документацию по ANT и файл билда, оказалось, что эта команда удаляет содержимое папки ПЕРЕД тем, как туда загнать результат генерации PDF.

В итоге я модернизировал свой билд и получил все, что надо:

Код
<?xml version="1.0" encoding="UTF-8" ?>
<!-- This file is part of the DITA Open Toolkit project hosted on 
     Sourceforge.net. See the accompanying license.txt file for 
     applicable licenses.-->
<!-- (c) Copyright IBM Corp. 2004, 2006 All Rights Reserved. -->
<project name="userguide" default="open.pdf" basedir=".">
  
  <property name="dita.dir" location="${basedir}/.."/>
  <property name="output.dir" location="${dita.dir}/out"/>
  <property name="retain.topic.fo" value="yes"/>
  <property name="dita.temp.dir" location="${output.dir}/temp"/>
  <property name="clean.temp" value="yes"/>

  <target name="open.pdf" depends="samples.pdf, check.pdf, delete.temp" if="pdf.present">
    <move file="${output.dir}/taskbook.pdf" tofile="${output.dir}/User guide.pdf"/>
    <exec executable="evince"> 
      <arg line="'${output.dir}/User guide.pdf'" />
   </exec>
  </target>
  
  <target name="delete.temp" description="remove temp processing files">
    <delete>
      <fileset dir="${output.dir}" includes="*.list,*.properties"/>
    </delete>
    <delete dir="${output.dir}/Configuration"/>
  </target>
  
  <target name="samples.pdf" description="build the samples as PDF" depends="clean.samples.pdf">
    <ant antfile="${dita.dir}/build.xml">
      <property name="args.input" location="${dita.dir}/samples/taskbook.ditamap"/>
      <property name="transtype" value="custpdf"/>
    </ant>
  </target>
  
  <target name="clean.samples.pdf" description="remove the sample PDF output">
    <delete dir="${output.dir}"/>
  </target>
  
  <target name="check.pdf">
    <available file="${output.dir}/taskbook.pdf" property="pdf.present"/>
  </target>
  
</project>
Чтобы ANT не пытался открыть еще не успевший родиться файл, добавил target check.pdf.

Вопрос зачем нужна папка Configuration и файлы dita.list, dita.xml.properties остается открытым :)
Страницы: 1
Читают тему