Domanda

prima di, io non ne so molto di XSL.

Sto usando un applicazione chiamata DITA per generare file PDF. Una delle cose di cui necessita è una sovrascrittura di un file XSL; per aggiungere uno stile personalizzato.

Sto cercando di aggiungere un grafico esterno utilizzando un percorso relativo. Non funziona, a meno che io fornisco il percorso completo.

Non funziona:

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

funziona:

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

Ho cercato sul web, ha detto di usare "file: immagine.png". E altri siti hanno detto di usare "url (image.png)", ma nessuno dei due ha lavorato

Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Questa è una vecchia questione, ma qualcosa che è spesso frainteso quando si lavora con DITA-OT.
La cosa importante da sapere è che il percorso esterno-grafico è relativo alla artwork.dir DITA-OT.

Mi vengono in mente due modi per fare aggiungere il logo.

Il modo più semplice

Copia logo.png nella diretory arwork

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

Cambia la xsl percorso grafico a

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

Il modo più duro

E 'possibile cambiare la directory di opere d'arte da cui prende il DITA immagini così come la directory di output, che sarà utilizzato da FOP per il rendering del PDF.

aprire il file build.xml

DITA-OT/demo/fo/build.xml

root Opera

Definire la directory principale in cui DITA dovrebbe copiare l'opera tra le L'impostazione predefinita è

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

che consentirà di definire la radice a cui verrà salvato il PDF finale.

destinazione Opera

Definire il percorso in cui i file devono essere memorizzati relativo alla directory radice opere d'arte

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

Per impostazione predefinita creerà la /Configuration/OpenTopic cartelle e quindi copiare tutto lì dentro tra cui sub directory.
Assicurarsi di modificare la destinazione due volte. I due luoghi da modificare sono solo poche righe a parte.

fonte Opera

definire dove l'opera originale viene salvato in modo che DITA-OT possibile copiare i file nella destinazione.
I primi punti di linea per l'opera d'arte di default che vengono con DITA-OT e non deve essere modificato.

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

Il secondo è destinato per personalizzare quindi essere quello che deve essere utilizzato per la personalizzazione.

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

Il percorso è relativo a DITA-OT / demo / fo / personalizzazione.

Altri suggerimenti

ho avuto un problema simile e ha scoperto in un altro forum che il problema è la forma di assegnare il percorso "basedir", perché il percorso basedir deve avere il "file:" prefisso.

Ecco un metodo in C # per creare un PDF con le immagini:

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

Saluti! Gabriel.

Direi che hai un conflitto tra cui pensi di essere e dove il motore di elaborazione pensa che sia. percorsi assoluti funzionano sempre. Tenta di verificare posizione 'corrente' e vedrete che cosa sta succedendo.

Il percorso è relativo alla posizione del documento XML, non la posizione del foglio di stile.

È necessario impostare baseDir prima fa riferimento a qualsiasi risorsa esterna. questo post può aiutare in questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top