Добавить относительный путь для внешней графики в документе XSL? - PullRequest
2 голосов
/ 17 февраля 2010

во-первых, я не знаю много о XSL.

Я использую приложение под названием DITA для создания PDF-файлов. Одна из вещей, которую он требует, - это перезапись файла xsl; добавить собственный стиль.

Я пытаюсь добавить внешнюю графику, используя относительный путь. Это не сработает, если я не укажу полный путь.

Не работает:

<fo:block text-align="center" width="100%">
  <fo:external-graphic src="../../images/logo.png"/>
</fo:block>

Работает ли:

<fo:block text-align="center" width="100%">
  <fo:external-graphic src="/absolute/path/to/images/logo.png"/>
</fo:block>

Я посмотрел в Интернете, он сказал, чтобы использовать "file: image.png", а другой сайт сказал, чтобы использовать "url (image.png)", но ни один не работал.

Что я делаю не так?

Ответы [ 5 ]

3 голосов
/ 04 мая 2011

Это старый вопрос, но его часто неправильно понимают при работе с DITA-OT.
Важно знать, что внешний графический путь относится к DITA-OT artwork.dir.

Я могу придумать два способа добавить логотип.

Простой способ

Скопируйте logo.png в директорию arwork

DITA-OT/demo/fo/cfg/common/artwork/logo.png

Измените ваш xsl графический путь на

<fo:block text-align="center" width="100%">
  <fo:external-graphic src="Configuration/OpenTopic/cfg/common/artwork/logo.png"/>
</fo:block>

Сложнее

Можно изменить каталог иллюстраций, из которого DITA делает свои снимки, а также каталог вывода, который будет использоваться FOP для рендеринга PDF.

открыть файл build.xml

DITA-OT/demo/fo/build.xml

Artwork root

Определите корневой каталог, куда DITA должна скопировать иллюстрацию По умолчанию

<property name="artwork.dir" value="${dita.map.output.dir}"/>

Который установит корневой каталог, в который будет сохранен ваш окончательный PDF.

Художественное направление

Определите путь, по которому файлы должны храниться относительно корневого каталога обложки

<copy todir="${coreArtworkDestinationDir}/Configuration/OpenTopic"

По умолчанию он создает папки /Configuration/OpenTopic, а затем копирует туда все, включая подкаталоги.
Не забудьте сменить пункт назначения дважды. Два места, которые вы должны редактировать, находятся на расстоянии нескольких строк.

Художественный источник

Определите место сохранения оригинальной иллюстрации, чтобы DITA-OT могла копировать файлы в место назначения.
Первая строка указывает на иллюстрацию по умолчанию, которая поставляется с DITA-OT и не должна быть изменена.

<fileset dir="${basedir}" includes="cfg/common/artwork/**/*.*"/>

Второй предназначен для настройки, поэтому должен использоваться для настройки.

<fileset dir="${customization.dir}" includes="common/artwork/**/*.*"/>

Путь относительно DITA-OT / demo / fo / Customization.

1 голос
/ 05 января 2012

У меня была похожая проблема, и на другом форуме я обнаружил, что проблема заключается в форме назначения пути "baseDir", поскольку путь baseDir должен иметь префикс "file:".

Вот метод в C # для создания PDF с изображениями:

   private string CreatePDF(string fileToCreate, string templateFile)
   {
       org.apache.fop.configuration.Configuration.put("baseDir", "file:" + AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["ImagesPath"] + @"\");

       //Load the style sheet.
       XslCompiledTransform xslt = new XslCompiledTransform();
       xslt.Load(templateFile);

       //Execute the transform and output the results to a file.
       xslt.Transform(fileToCreate, "temp.fo");

       FileInputStream streamFO = new FileInputStream("temp.fo");
       InputSource src = new InputSource(streamFO);

       string pdfFilesPath = ConfigurationManager.AppSettings["PDFFilesPath"];
       if (!Directory.Exists(pdfFilesPath))
       {
           Directory.CreateDirectory(pdfFilesPath);
       }

       pdfFilesPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["PDFFilesPath"];

       string fileName = fileToCreate.Substring(fileToCreate.LastIndexOf(@"\") + 1, fileToCreate.LastIndexOf(".") - 1 - fileToCreate.LastIndexOf(@"\")) + ".PDF";
       FileOutputStream streamOut = new FileOutputStream(pdfFilesPath + @"\" + fileName);
       Driver driver = new Driver(src, streamOut);

       driver.setRenderer(1);
       driver.run();
       streamOut.close();

       return fileName;
   }

Привет! Габриэль.

0 голосов
/ 24 мая 2011

Вам необходимо установить baseDir перед ссылкой на любой внешний ресурс. Этот пост может помочь вам в этом.

0 голосов
/ 06 мая 2010

Путь относительно местоположения документа XML, а не расположения таблицы стилей.

0 голосов
/ 08 марта 2010

Я бы сказал, что у вас есть конфликт между тем, где вы думаете, и тем, что считает обработчик. Абсолютные пути всегда работают. Попробуйте проверить «текущее» местоположение, и вы увидите, что происходит.

...