Pregunta

en primer lugar, no sé mucho acerca de XSL.

Estoy utilizando una aplicación llamada DITA para generar archivos PDF. Una de las cosas que requiere es una sobrescritura de un archivo XSL; añadir un estilo personalizado.

Estoy tratando de agregar un gráfico externo usando una ruta relativa. No funciona, a menos que proporcionar la ruta completa.

No funciona:

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

¿El trabajo:

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

busqué en la web, se dice que el uso "file: image.png". Y otros sitios web que asegura haber utilizado "url (image.png)", pero tampoco funcionó

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Esta es una cuestión de edad, sino algo que a menudo se entiende mal cuando se trabaja con DITA OT.
Lo importante a saber es que el camino externo-gráfico es relativa a la artwork.dir DITA OT.

Se me ocurren dos maneras de hacerlo añadir el logotipo.

La manera fácil

Copiar logo.png en el diretory arwork

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

Cambiar su camino gráfica XSL a

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

La manera más difícil

Es posible cambiar el directorio de obra de la que toma su DITA imágenes, así como el directorio de salida, que será utilizado por la FOP para hacer que el PDF.

abrir el archivo build.xml

DITA-OT/demo/fo/build.xml

root ilustraciones

Definir el directorio raíz donde DITA debe copiar a la obra El valor por defecto es

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

¿Qué va a establecer la raíz a la que se guardará el archivo PDF final.

destino ilustraciones

Definir la ruta donde los archivos deben ser almacenados en relación con el directorio raíz obra

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

Por defecto se creará el /Configuration/OpenTopic carpetas y copiar todo en incluyendo allí los subdirectorios.
Asegúrese de cambiar el destino de dos veces. Los dos lugares que tienes que editar son sólo unas pocas líneas de separación.

fuente ilustraciones

Definir, donde la obra original se guarda de manera que DITA OT puede copiar los archivos al destino.
Los primeros puntos de la línea a la obra por defecto que vienen con DITA OT y no debe ser cambiado.

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

El segundo uno está destinado para la personalización de este modo ser el que se debe utilizar para la personalización.

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

La ruta es relativa a DITA OT / demo / fo / personalización.

Otros consejos

tuve un problema similar y descubierto en otro foro que un problema es la forma de asignar la ruta "BASEDIR", porque el camino BASEDIR debe tener el "file:" prefijo.

A continuación, un método en C # para crear un PDF con imágenes:

   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;
   }

Saludos! Gabriel.

Yo diría que tienes un conflicto entre el lugar donde se cree que está y donde el motor de procesamiento piensa que es. Las rutas absolutas siempre funcionan. Intenta comprobar la ubicación 'actual' y verá lo que está pasando.

La ruta es relativa a la ubicación del documento XML, no la ubicación de la hoja de estilo.

Es necesario establecer baseDir antes de hacer referencia a cualquier recurso externo. este post le puede ayudar en esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top