SVG et DPI, absolu unités et les unités utilisatrices: Inkscape vs Firefox vs ImageMagick
J'essaie de générer automatiquement un fichier SVG destiné à être imprimé sur une certaine taille (A4). Je souhaite utiliser un chemin d'accès, ce qui permet seulement d'utilisateur "unités", pas " absolu unités.
Il me semble qu'il est impossible de "publier" un fichier SVG a unités absolues (par exemple un document de la taille) et un chemin d'accès n'importe où, parce que je ne peux pas le faire fonctionner correctement à travers les téléspectateurs.
Est-il un moyen d'obtenir une certaine cohérence dans le rendu, comme la spécification d'un "défaut de DPI'?
Ou pour le dire autrement: puis-je obtenir mon exemple ci-dessous afin de rendre le même dans tous les téléspectateurs, sans abandonner les unités absolues à tous?
Connexes: Est-il un moyen de forcer l'une des applications ci-dessous pour rendre l'image de la même manière que celui des autres? (E. g. J'ai essayé le -density
option de "convertir", mais je ne pouvais pas la sortie pour correspondre à d'Inkscape ou Firefox' sortie.)
Exemple:
J'ai créé un fichier SVG, avec trois carrés noirs (rect) avec une diagonale rouge (chemin de):
- Gauche: la place et la diagonale de l'utilisateur unités
- Milieu: la place et la diagonale en pouces (me semblait le choix le plus logique, mais n'est pas autorisé)
- Droite: carré en mm, diagonale de l'utilisateur unités
Qui rend différemment dans les différents spectateurs:
- Inkscape: 90 DPI, tous les carrés de la même taille, diagonale rouge correspond
- Firefox: 96 DPI?, dernières places pour les grands (ou en diagonale pour faire court)
- Convertir: 72 DPI, dernier carrés à de petites (ou diagonale de long)
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 (par défaut 'viewer'):
Firefox (à noter que la ligne rouge n'atteint pas le coin inférieur droit. J'ai fait une capture d'écran et recadrée sorte de arbitraire):
ImageMagick (convertir, aucune option n'a d'ailleurs donné les noms de fichiers):
- J'ai trouvé stackoverflow.com/questions/1132269/... utile pour expliquer le problème.
- Inkscape 0.92: La résolution par défaut a été modifié à partir de 90dpi à 96 ppp, pour correspondre à la CSS standard.
Vous devez vous connecter pour publier un commentaire.
Toutes les dimensions dans un chemin tag sont en unités utilisateur.
Vous ne pouvez pas spécifier les unités absolues dans un chemin tag, qui est pourquoi le chemin d'accès dans le carré central n'est pas rendu.
La façon la plus simple que j'ai trouvé est de définir les unités à l'aide de viewbox:
Cette affiche correctement dans Inkscape et Firefox.
convert
commande prend un-density XX
argument (avant de spécifier le fichier d'entrée) pour régler la résolution.J'ai eu un problème similaire, à l'aide de Apache Batik pour incorporer un fichier SVG dans un fichier PDF à l'aide de iText. iText utilise 72 DPI, la norme pour les PDF, tout en Batik utilise 96.
Pour obtenir de l'image s'affichent correctement, c'est-à-échelle, dans le fichier PDF, vous avez besoin de diviser la largeur=x cm hauteur=y cm dans le SVG en-tête de 1,33 (96/72).