Frage

zuerst, ich weiß nicht viel über XSL.

Ich verwende eine App DITA genannt pdfs zu erzeugen. Eines der Dinge, die es erfordert, ist ein Überschreiben einer XSL-Datei; Custom-Styling hinzuzufügen.

Ich versuche, eine externe Grafik mit einem relativen Pfad hinzuzufügen. Es funktioniert nicht, wenn ich nicht den vollständigen Pfad liefern.

funktioniert nicht:

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

funktioniert:

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

ich im Internet sehe, sagte, es zu benutzen "file: image.png". Und andere Website sagte verwenden "url (image.png)", aber weder gearbeitet

Was mache ich falsch?

War es hilfreich?

Lösung

Dies ist eine alte Frage, aber etwas, das oft falsch verstanden wird, wenn sie mit DITA-OT arbeiten.
Die wichtige Sache zu wissen ist, dass der externe Grafik Pfad zum DITA-OT artwork.dir relativ ist.

kann ich zwei Möglichkeiten denken, um das Logo zu tun hinzuzufügen.

Die einfache Art und Weise

Kopieren logo.png in die arwork Diretory

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

Ändern Sie Ihre xsl Grafik Pfad

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

Je härter Weg

Es ist möglich, das Kunstwerk Verzeichnis zu ändern, von dem DITA ihm der Bilder sowie das Ausgabeverzeichnis nimmt die von FOP verwendet wird, um das PDF zu machen.

Öffnen Sie die Datei build.xml

DITA-OT/demo/fo/build.xml

Grafik root

Definieren Sie das Wurzelverzeichnis, in den DITA die Grafik kopieren soll Die Standardeinstellung ist

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

, die die Wurzel, wo Sie Ihre endgültige PDF wird gespeichert gesetzt werden.

Grafik Ziel

Definieren Sie den Pfad, in dem die Dateien in das Kunstwerk Stammverzeichnis relativ gespeichert werden sollen

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

Standardmäßig wird es schafft die Ordner /Configuration/OpenTopic und kopieren Sie dann alles in dort mit Unterverzeichnissen.
Stellen Sie sicher, zweimal das Ziel zu ändern. Die beiden Orte, die Sie bearbeiten haben, sind nur ein paar Zeilen auseinander.

Grafik Quelle

definieren, wo die Originalvorlage gespeichert wird, so dass DITA-OT die Dateien auf das Ziel kopieren.
Die erste Zeile zeigt auf das Standardkunstwerk, das mit DITA-OT kommen und soll nicht geändert werden.

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

Die zweite sollte somit zum Anpassen der eine sein, die individuell verwendet werden soll.

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

Der Pfad ist relativ zu DITA-OT / demo / fo / Customization.

Andere Tipps

Ich hatte ein ähnliches Problem und in einem anderen Forum entdeckt, dass Problem ist die Form des „baseDir“ Pfad zuweisen, da der baseDir Pfad das Präfix haben muss „file:“.

Hier ist eine Methode in C # ein PDF mit Bildern zu erstellen:

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

Viele Grüße! Gabriel.

Ich würde sagen, Sie einen Konflikt zwischen haben, wo Sie denken, Sie sind und wo die Verarbeitungsmaschine denkt es ist. Absolute Pfade immer funktionieren. Versuchen Sie, ‚aktuelle‘ Position zu überprüfen und Sie werden sehen, was los ist.

Der Pfad ist relativ zum Speicherort des XML-Dokuments, nicht die Lage des Stylesheets.

Sie müssen Set baseDir, bevor sie eine externe Ressource verweist. diese Post können Sie auf diese Hilfe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top