Próbuję automatycznie wygenerować plik SVG przeznaczony do wydrukowania na określonym formacie (A4). Chciałbym użyć w niej ścieżki, która zezwala tylko na "jednostki użytkownika", a nie "jednostki bezwzględne".SVG i DPI, jednostki bezwzględne i jednostki użytkownika: Inkscape vs. Firefox vs. ImageMagick
Wydaje mi się, że to niemożliwe, aby „opublikować” plik SVG, który ma jednostkach bezwzględnych (np Document Size) i ścieżkę wszędzie, bo nie mogę zmusić go do prawidłowej pracy całej widzów.
Czy istnieje sposób na uzyskanie spójności w renderowaniu, na przykład określenie "domyślnego DPI"?
Lub inaczej: czy mogę uzyskać poniższy przykład, aby wyświetlać ten sam obraz we wszystkich przeglądarkach, nie rezygnując w ogóle z jednostek absolutnych?
Powiązany: Czy istnieje sposób na wymuszenie którejkolwiek z poniższych aplikacji, aby renderować obraz w taki sam sposób, jak jeden z pozostałych? (Np Próbowałem opcję „Convert” -density
, ale nie mogłem dostać wyjście pasujące do wyjścia Inkscape'a lub Firefox.)
Przykład:
Został utworzony jeden plik SVG, z trzech czarnych kwadratów (rect) z czerwonym ukośnym (Path):
- lewej: kwadrat i przekątnej w jednostkach użytkownika
- Bliski: kwadrat i przekątna w calach (wydawało mi się najbardziej logicznym wyborem, ale jest niedozwolone)
- prawej: kwadrat w mm, przekątna w jednostkach użytkownika
co czyni różnie w różnych widzów:
- Inkscape: 90 DPI, wszystkie kwadraty tej samej wielkości, czerwone ukośne meczów
- Firefox: 96 DPI ?, ostatnie kwadraty duży (lub ukośnie do krótkich)
- Konwersja: 72 DPI ostatnie kwadraty mała (lub skośnie do długości)
Code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
width="200mm"
height="100mm"
>
<g transform="translate(50,50)">
<rect
width="100."
height="100."
x="10"
y="10" />
<path style="stroke: #ff0000" d="M 10 10 L 110 110" />
</g>
<g transform="translate(200,50)">
<rect
width="1.111in"
height="1.111in"
x="0.1111in"
y="0.1111in" />
<path style="stroke: #ff0000" d="M 0.1111in 0.1111in L 1.111in 1.111in" />
</g>
<g transform="translate(350,50)">
<rect
width="1.111in"
height="1.111in"
x="0.1111in"
y="0.1111in" />
<path style="stroke: #ff0000" d="M 10 10 L 110 110" />
</g>
</svg>
Inkscape (mój default 'widz'):
Firefox (zauważ, że czerwona linia nie osiągnie dolny prawy róg. Zrobiłem zrzut ekranu i przycięte rodzaj arbitralnie):
ImageMagick (konwersja, żadnych opcji oprócz nazw plików podane):
Znalazłem http://stackoverflow.com/questions/1132269/can-i-use-mixed-units-with-path-element przydatne do wyjaśnienia problemu. – BlackShift
Inkscape [0.92] (http://wiki.inkscape.org/wiki/index.php/Release_notes/0.92#Important_changes): Domyślna rozdzielczość została zmieniona z 90dpi na 96dpi, aby pasowała do standardu CSS. – qwert2003