2012-02-10 25 views
5

Tôi đang cố gắng làm cho các điểm đánh dấu được thống nhất cho một loạt các hình ảnh SVG. Vấn đề của tôi là tôi không thể làm cho các tham chiếu bên ngoài trong các định nghĩa đánh dấu hoạt động. Nó có thể được kết nối với câu hỏi How to reference external svg file in svg correctly? nhưng liên kết vẫn bị thiếu.Các điểm đánh dấu được xác định bên ngoài không xuất hiện trong SVG

tôi đã thực hiện một ví dụ nhỏ để chứng minh vấn đề của tôi:

b.svg (được tham chiếu):

<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 (cố gắng để tham khảo 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> 

Như bạn có thể thấy, tôi đã tham chiếu điểm đánh dấu cho dòng đầu tiên thông qua một id nội bộ (thực ra là hai từ điểm đánh dấu có tham chiếu). Điều này hoạt động tốt.

Tôi đã sử dụng định nghĩa điểm đánh dấu nội bộ với đường dẫn ngoài cho dòng thứ hai. Nó không hoạt động. (Dòng được viết lại, điểm đánh dấu là không.)

Tôi đã sử dụng điểm đánh dấu bên ngoài trong dòng thứ ba. Nó cũng không hoạt động.

Sự cố có thể là nội dung bên ngoài không có trong DOM lưu trữ - ít nhất là không khi tham chiếu trong kiểu được giải quyết.

OK, nhưng tôi có thể làm gì với nó? Làm cách nào tôi có thể tham khảo các phần tử bên ngoài cho các điểm đánh dấu trong SVG?

+0

Bạn đang cố gắng thực hiện điều này trên Safari hoặc Chrome vì tôi không nghĩ chúng hỗ trợ tài liệu tham khảo bên ngoài. Điều này sẽ làm việc trong Firefox và Opera mặc dù. –

+0

Phải, xin lỗi vì thiếu chi tiết này. Mục tiêu cuối cùng của tôi là tạo ra một PDF chính xác từ DocBook :) Nhưng tôi đã thử với IE và Firefox cũng không có may mắn. –

+0

Aaand bạn nói đúng, mã chính xác mà tôi đăng sẽ hoạt động tốt với Opera! Tôi chưa thử điều đó trước đây. Tôi vẫn thiếu kết luận mặc dù. Mã svg của tôi có đúng không, nó chỉ nằm sau hỗ trợ từ các trình kết xuất hiện tại? –

Trả lời

0

Tôi nghĩ rằng tôi có thể trả lời câu hỏi ban đầu của mình dựa trên các thử nghiệm của tôi và trên nhận xét của Robert.

Mã tôi đã viết nên hoạt động trong SVG và làm hoạt động với Opera và Firefox. Thêm vào đó nó hoạt động khi tạo một tệp PDF với Apache FOP, đó là điểm mấu chốt đối với tôi.

Vấn đề duy nhất là tham chiếu bên ngoài không hoạt động trong IE, Chrome và Safari. Tôi không chắc khi nào các tham chiếu bên ngoài từ các định nghĩa kiểu được triển khai trong Firefox: nó không hoạt động trong 7.0 nhưng nó hoạt động trong 11.

Các vấn đề liên quan