2017-03-25 6 views
1

ウェブサイトでSVGファイルを生成していますが、これはIlustratorでインポートされるはずです。私は<symbol />要素を使って形状定義を保存し、 "シート"に<use />要素を付けて参照します。ユーザーはシェイプのサイズを設定することができ、実際にAdobe Illustratorにインポートするときは、シェイプのサイズがまったく同じであることが非常に重要です。ストロークを追加しない限り動作します。ストロークのあるSVGシンボルのサイズがIllustratorで間違っています

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
<svg id="SvgjsSvg1000" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" width="210mm" height="297mm" viewBox="0 0 210 297" viewbox="0 0 210 297"> 
    <defs id="SvgjsDefs1001"> 
     <symbol id="shape_id70" preserveAspectRatio="xMinYMin meet" viewBox="0 0 27.841039657592773 12.2083101272583"> 
      <path id="SvgjsPath1030" d="M26.4405 13.067C25.685728 11.72066 22.49458 8.90142 20.73442 7.678030000000001C22.99088 7.6388854 23.85819 7.6146637 28.738950000000003 7.456081C26.298620000000003 6.628644 23.737080000000002 5.904501 21.418080000000003 4.973881C23.937200000000004 4.5081560000000005 26.519460000000002 4.085806000000001 28.376120000000004 3.7947010000000008C28.376120000000004 3.7946453179000006 19.370760000000004 2.7013810000000005 8.358420000000002 4.414499000000001L9.412540000000002 1.364679000000001L6.497860000000001 3.520859000000001L4.442800000000001 0.858699000000001L4.324531000000001 4.464059000000001L0.897911000000001 5.542179000000001L4.249861000000001 6.913239000000001L4.236664300000001 10.198599000000002L6.192894300000001 7.622079000000001L9.099554300000001 8.802649L8.143547300000002 6.432539C12.463087300000002 6.813516 22.5756473 8.818239 26.440547300000002 13.067009Z" fill="none"></path> 
     </symbol> 
    </defs> 
    <use id="SvgjsUse1034" xlink:href="#shape_id70" x="0" y="0" width="50"></use> 
</svg> 

これはブラウザやIllustratorの両方で結構です。しかし、私は属性を追加するときstroke-width="0.1" stroke="#000"。 Illustratorでは、シェイプのサイズが48.951に変更されています。ブラウザではまだ50です。私はこれらの属性を<symbol /><path />、および<use />要素に同じ結果を追加しようとしました。

SVG標準には、ストロークをレンダリングする方法を制御する属性はありません。私は、SVGの将来のバージョンのストロークアライメント属性についての議論があることを知っています。しかし、ブラウザはそれをまだサポートしておらず、Adobe Illustratorもサポートしていません。

だから私の質問は:イラストレーターは<use />要素にwidth属性によって設定されたサイズと形状をレンダリングなるようにSVGを調整するための方法をどのような方法に関係なく、ストロークの設定にあります

+0

あなたがinkscapeのバグを見つけたと思うのであれば、そのバグトラッカー(https://bugs.launchpad.net/inkscape)に報告してください。 –

答えて

0

widthあなたのシンボルがviewBox属性を持たないため、<use>の値は<symbol>に影響しません。 viewBoxがなければ、<use>xyの属性だけが何もしません。

また、S.O.にいくつかの質問があります。以前は、IllustratorのSVGインポートフィルタのバグについて不平を言っていました。 <symbol>が機能している場合、それは素晴らしいことです。しかし、一般的には、SVGの構造を単純にし、より高度なSVG機能を避けることは良い考えです。

+0

すみません。ソースを簡素化しながら、私はあまりにも多くを削除しました。私は自分の質問を編集し、viewBox属性を追加しました。それはちょうど間違いだった。私は定義の形をしているとき(シンボルではなくグループで言う)、リファレンス()も使用できることを知っています。しかしその場合、私は定義のサイズを変更する必要があり、それは私が避けたいものです。 – Tacud

+0

そうだとすれば、間違いなくIllustratorのバグのように聞こえるでしょう。それを報告してみるかもしれません。 –

+0

一方、あなたが提案した代替案、つまりグループを使用する必要があるかもしれません。定義のサイズを変更する必要はありません。 ''要素で 'transform'を使うことができます。 https://jsfiddle.net/gwauq55x/ –

関連する問題