私はPythonを使用してSVG画像からPDF画像を生成しようとしています。私はCairoSVGとsvglibの両方を試しました。問題は、どちらの場合でも、生成されたPDFに埋め込みCSSスタイルが適用されていないことです。埋め込みCSSを使用したSVGをPythonでPDFに変換
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="200" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<style type="text/css"><![CDATA[
rect {
fill: #1f77b4;
stroke: black;
stroke-width: 1;
shape-rendering: crispEdges;
}
]]></style>
</defs>
<rect x="50" y="50" width="100" height="100"></rect>
</svg>
CairoSVGを使用して、このSVGのPDFのレンダリング、PDFの画像が黒い長方形としてレンダリングされます。
は、ここで黒の境界線と青い四角形を描画する必要があり、単純なSVGファイルです。 svglibを使用すると、矩形に適用されるストロークやスタイルがないので、表示されません。誰でも、CSSスタイルを持つSVG をPythonのPDF画像に変換する方法を知っていますか?
私はこれまでのところ、私が思いついた最高のSVGをレンダリングするphantomjsを使用して、やや複雑なセットアップで、D3の視覚化のためのサムネイルを作成する必要があります。 phantomjsは実際のWebkitブラウザであるため、SVGはブラウザのバージョンとまったく同じようにレンダリングされます(phantompyモジュールがありますが、私の環境ではsegfaultingしており、理由を調べる時間がありません)。 –
CairoSVGのドキュメントでは、CairoSVGはlxmlを使用してSVGファイルを解析し、tinycssとcssselectを使用してタグのstyle属性に含まれていないCSSを適用することができます。これらのパッケージが利用できない場合、CSSはスタイル属性でのみサポートされます。 tinycssパッケージとcssselectパッケージをインストールすると、問題が解決する可能性があります。こちらの依存関係のセクションを参照してください:http://cairosvg.org/user_documentation/ – MonkeyWrench
@MonkeyWrench:それはあなたがそれを答えて賞金を集めることができるように気を付ければ、これまでのところ最高のヒントです。 –