Scale SVG path and convert using mPdf
P粉287726308
2023-08-16 17:57:54
<p>Hello, I'm having trouble with SVG. </p>
<p>First, I put the SVG into HTML, with input type radio, the user can scale this SVG (by adding a width style attribute with a percentage value). But when I send it to mpdf (SVGs in JSON) it doesn't work. </p>
<p>Then I try to calculate the size on the pdf, but I can't fit the viewbox/size of this SVG. </p>
<p>So the SVG I get is as follows: </p>
<pre class="brush:html;toolbar:false;"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3. org/1999/xlink" id="svg-number" width="686.280029296875px" height="540.8900146484375px" viewBox="62.619998931884766 245 686.280029296875 540.8900146484375" style="width: 28%; height: auto;">< path fill="#ffffff" id="path-svg-number" d="M277.95 252.69L277.95 785.89L171.02 785.89L171.02 347.17L62.62 347.17L62.62 271.73L277.95 252.69ZM748. 90 703.86L748.90 785.89L384.89 785.89L384.89 715.94L557.37 531.01Q594.73 488.16 610.47 458.68Q626.22 429.20 626.22 403.93L626. 22 403.93Q626.22 370.24 608.09 348.82Q589.97 327.39 556.64 327.39L556.64 327.39Q519 .65 327.39 500.43 352.48Q481.20 377.56 481.20 419.31L481.20 419.31L377.20 419.31L376.46 417.11Q374.63 344.97 423.89 294.98Q 473.14 245.00 556.64 245.00L556.64 245.00Q639.04 245.00 686.10 287.84Q733.15 330.69 733.15 402.10L733.15 402.10Q733.15 450.44 706.60 491.27Q680.05 532.10 618.90 598.39L618.90 598.39L524.05 702.03L524.78 703.86L748. 90 703.86Z"></path></svg>
</pre>
<p>I want to render it on pdf but with different dimensions. </p>
<pre class="brush:js;toolbar:false;">function getPrintSize(container) {
let renderSize = getElementSize(container);
let scale = getScale(); //Return an integer value, such as 33
return {
width: (renderSize.width * 100) / scale, //For example (159 * 100) / 24.127 = 659.013
height: (renderSize.height * 100) / scale //For example (125 * 100) / 24.127 = 518.092
}
}
</pre>
<p>Then the new SVG should be 659.013px x 518.092px, but I can't set the new correct dimensions (mPdf doesn't support style="width: ...". In theory it partially supports this tag, but in practice it doesn't support). </p>
<p>In mPdf, I try to render it like this: </p>
<pre class="brush:php;toolbar:false;">...
$template .= '<td align="center" style="width: 1890px; height: 913px; vertical-align: middle">'.$data->number.'</td>';
...
</pre>
<p>Does anyone have any ideas how to scale this SVG by path? </p>
In my experience, pdf generators like mPdf or DOmPDF tend to have difficulty handling relative, percentage-based values.
As long as your scaling calculations work as expected, you can directly change the svg's width and height properties:
To obtain a computable value, you can use one of the following two methods:
or
The first method returns a number by default and converts the percentage value to an absolute value (based on svg user units).
The latter will strip off all units and return a purely numeric value.