2012-02-10 13 views
5

Estoy tratando de unir los marcadores para un conjunto de imágenes SVG. Mi problema es que no puedo hacer referencias externas en definiciones de marcadores. Puede estar conectado a la pregunta How to reference external svg file in svg correctly? pero aún falta un enlace.Los marcadores definidos externamente no aparecen en SVG

hice un pequeño ejemplo para demostrar mi problema:

b.svg (que se hace referencia):

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> 
    <defs> 
     <circle id="b" r="6" stroke="black" fill="green" /> 
     <marker id="b_end" 
      orient="auto" 
      style="overflow:visible"> 
      <use xlink:href="#b" /> 
     </marker> 
    </defs> 
</svg> 

a.svg (tratando de hacer referencia a b.svg):

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> 
    <defs> 
     <circle id="a" r="6" stroke="black" fill="yellow" /> 
     <marker id="a_end" 
      orient="auto" 
      style="overflow:visible"> 
      <use xlink:href="#a" /> 
     </marker> 
     <marker id="b_end" 
      orient="auto" 
      style="overflow:visible"> 
      <use xlink:href="b.svg#b" /> 
     </marker> 
    </defs> 
    <path d="m 10,10 20,20" style="marker-end:url(#a_end)" stroke="black" /> 
    <path d="m 40,10 20,20" style="marker-end:url(#b_end)" stroke="black" /> 
    <path d="m 70,10 20,20" style="marker-end:url(b.svg#b_end)" stroke="black" /> 
</svg> 

Como puede ver, hice referencia al marcador de la primera línea a través de una identificación interna (en realidad dos ya que el marcador también tiene una referencia). Esto funciona bien

Utilicé una definición de marcador interno con una ruta externa para la segunda línea. No funciona (La línea está diplayed, el marcador no lo está).

Usé un marcador externo en la tercera línea. Tampoco funciona.

El problema puede ser que el contenido externo no está en el DOM de alojamiento, al menos no cuando se resuelve la referencia en el estilo.

Bien, pero ¿qué puedo hacer al respecto? ¿Cómo puedo hacer referencia a elementos externos para marcadores en SVG?

+0

¿Está tratando de hacer esto en Safari o Chrome porque no creo que apoyen referencias externas todavía. Sin embargo, esto debería funcionar en Firefox y Opera. –

+0

Bien, perdón por perder este detalle. Mi objetivo final es generar un PDF correcto desde DocBook :) Pero probé esto con IE y Firefox también sin suerte. –

+0

¡Y tienes razón, el código exacto que publiqué funciona bien con Opera! No lo he intentado antes. Aun así, carezco de la conclusión. ¿Es correcto mi código svg, simplemente se queda atrás en soporte de renderizadores actuales? –

Respuesta

0

Creo que puedo responder a mi pregunta original basándome en mis experimentos y en el comentario dejado por Robert.

El código que he escrito debe trabajo en SVG y se hace trabajo con Opera y Firefox. Además, funciona al generar un PDF con Apache FOP, que fue el punto clave para mí.

El único problema es que las referencias externas no funcionan en IE, Chrome y Safari. No estoy seguro de cuándo se implementaron las referencias externas de las definiciones de estilo en Firefox: no funciona en 7.0, pero funciona en 11.

Cuestiones relacionadas