gymmed/svg-parser

包含CSS文档样式,将样式应用到SVG文件上,而无需编辑原始的SVG文档。

v0.1 2024-09-15 17:50 UTC

This package is auto-updated.

Last update: 2024-09-15 20:57:14 UTC


README

Svg Parser PHP


Applying styles to svg.

将CSS文档样式应用到SVG文件上,而不会修改原始SVG文件。它还可以解析CSS变量,并将它们的值直接插入到CSS选择器样式中,因此它不仅适用于浏览器渲染。

安装

您可以通过composer安装此包

composer require gymmed/svg-parser-php

使用场景

Dompdf 或 laravel封装 laravel-dompdf 不支持直接导入SVG或需要包含外部SVG文件。此库提供了一种方法,可以将CSS文档附加到SVG文件上,而无需直接修改SVG。

如果您遇到相同的问题,我强烈建议使用 imagickrasterize-svg 将SVG转换为PNG并在PDF中包含它。这样,您减少了由 Dompdf 错误渲染样式的机会,并且不需要两个不同的CSS文档或两个SVG文件。

用法

use GymMed\SvgParser;

//provide full path
$svgPath = realpath(__DIR__ . "./assets/example.svg");
$cssPath = realpath(__DIR__ . "./assets/css/index.css");

$svgWithCSS = SvgParser::formatSvgFromPath($svgPath, [$cssPath]);

或使用SVG内容

use GymMed\SvgParser;

//provide full path
$svgPath = realpath(__DIR__ . "./assets/example.svg");
$cssPath = realpath(__DIR__ . "./assets/css/index.css");
$svg = file_get_contents($svgPath);

$svgWithCSS = SvgParser::formatSvg($svg, [$cssPath]);

如果您想编写简单的CSS并在SVG内部应用它

use GymMed\SvgParser;

//provide full path
$svgPath = realpath(__DIR__ . "./assets/example.svg");
$svg = file_get_contents($svgPath);

$svgWithCSS = SvgParser::getParsedCSSToSvg($svg, ".circle { background-color: red; border-radius: 50% }");

如果您只想提供完整路径而不是SVG本身

use GymMed\SvgParser;

//provide full path
$svgPath = realpath(__DIR__ . "./assets/example.svg");

$svgWithCSS = SvgParser::getParsedCSSToSvgFromPath($svgPath, ".circle { background-color: red; border-radius: 50% }");