Question

D'abord, je ne sais pas beaucoup sur XSL.

J'utilise une application appelée DITA pour générer pdfs. L'une des choses dont il a besoin est une réécriture d'un fichier xsl; d'ajouter un style personnalisé.

Je suis en train d'ajouter un graphique externe en utilisant un chemin relatif. Il ne fonctionne pas, à moins que je fournir le chemin complet.

ne fonctionne pas:

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

fonctionne le:

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

Je regardais sur le web, il dit "file: image.png". Et d'autres site dit utiliser "url (image.png)", mais ni travaillé

Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Ceci est une question ancienne, mais quelque chose qui est souvent mal compris lorsque l'on travaille avec DITA-OT.
La chose importante à savoir est que le chemin externe-graphique est par rapport à la artwork.dir DITA-OT.

Je peux penser à deux façons de le faire ajouter le logo.

La façon facile

Copie logo.png dans le diretory de arwork

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

Changer votre chemin graphique xsl à

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

La façon plus difficile

Il est possible de changer le répertoire d'œuvres d'art à partir de laquelle DITA prend des photos est ainsi que le répertoire de sortie qui sera utilisé par FOP pour rendre le PDF.

ouvrir le fichier build.xml

DITA-OT/demo/fo/build.xml

racine de l'œuvre

Définir le répertoire racine où DITA devrait copier l'œuvre à La valeur par défaut est

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

Ce qui va définir la racine à l'endroit où votre sera sauvegardé PDF final.

Création destination

Définissez le chemin où les fichiers doivent être stockés par rapport à l'œuvre répertoire racine

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

Par défaut, il va créer les dossiers /Configuration/OpenTopic puis copiez tout y compris les sous-répertoires.
Assurez-vous de changer la destination deux fois. Les deux endroits que vous devez éditer ne sont que quelques lignes d'intervalle.

Source de l'œuvre

Définir où l'œuvre originale est enregistrée afin que DITA-OT peut copier les fichiers vers la destination.
Les premiers points de la ligne à l'œuvre d'art par défaut qui viennent avec DITA-OT et ne doit pas être modifié.

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

Le second est destiné à la personnalisation étant donc celui qui doit être utilisé pour la personnalisation.

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

Le chemin est par rapport à DITA-OT / demo / fo / personnalisation.

Autres conseils

J'ai eu un problème similaire et découvert dans un autre forum ce problème est la forme d'affecter le chemin « baseDir », car le chemin baseDir doit avoir le préfixe « file: ».

Voici une méthode en C # pour créer un PDF avec des images:

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

Cordialement! Gabriel.

Je dirais que vous avez un conflit entre l'endroit où vous pensez que vous êtes et où le moteur de traitement pense qu'il est. Les chemins absolus fonctionnent toujours. Essayez de vérifier l'emplacement « en cours » et vous verrez ce qui se passe.

Le chemin est relatif à l'emplacement du document XML, pas l'emplacement de la feuille de style.

Vous devez définir baseDir avant de référencer une ressource externe. ce poste peut vous aider à ce sujet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top