Skala laluan SVG dan tukar menggunakan mPdf
P粉287726308
2023-08-16 17:57:54
<p>Helo, saya menghadapi masalah dengan SVG. </p>
<p>Mula-mula, saya meletakkan SVG ke dalam HTML, dengan radio jenis input, pengguna boleh menskalakan SVG ini (dengan menambahkan atribut gaya lebar dengan nilai peratusan). Tetapi apabila saya menghantarnya ke mpdf (SVG dalam JSON) ia tidak berfungsi. </p>
<p>Kemudian saya cuba mengira saiz pada pdf, tetapi saya tidak dapat memuatkan kotak pandangan/saiz SVG ini. </p>
<p>Jadi SVG yang saya dapat adalah seperti berikut: </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 610866.4089.28 5 " style="width: 28% height: auto;">< isi laluan="#ffffff" id="laluan-svg-nombor" d="M277.95 252.69L277.95 785.89L171.02 785.89L171.02 347.17L62.62 271.73L277.95 748.90 785.89L384.89 785.89L384.89 715.94L557.37 531.01Q594.73 488.16 610.47 458.68Q626.22 429.20 6.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 429.597 423.598 .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.78. gt;</path></svg>
</pra>
<p>Saya mahu memaparkannya pada pdf tetapi dengan dimensi yang berbeza. </p>
<pre class="brush:js;toolbar:false;">fungsi getPrintSize(bekas) {
biarkan renderSize = getElementSize(bekas);
let scale = getScale(); //Kembalikan nilai integer, seperti 33
kembali {
lebar: (renderSize.width * 100) / skala, //Sebagai contoh (159 * 100) / 24.127 = 659.013
ketinggian: (renderSize.height * 100) / skala //Contohnya (125 * 100) / 24.127 = 518.092
}
}
</pra>
<p>Kemudian SVG baharu hendaklah 659.013px x 518.092px, tetapi saya tidak boleh menetapkan dimensi baharu yang betul (mPdf tidak menyokong style="width: ...". Secara teorinya ia menyokong sebahagian teg ini, tetapi dalam praktiknya ia tidak menyokong). </p>
<p>Dalam mPdf, saya cuba memaparkannya seperti ini: </p>
<pre class="brush:php;toolbar:false;">...
$template .= '<td align="center" style="width: 1890px; height: 913px; vertical-align: middle">'.$data->number.'</td>';
...
</pra>
<p>Adakah sesiapa mempunyai sebarang idea bagaimana untuk menskalakan SVG ini mengikut laluan? </p>
Menurut pengalaman saya, penjana pdf seperti mPdf atau DOmPDF cenderung menghadapi kesukaran mengendalikan nilai berasaskan peratusan relatif.
Selagi pengiraan penskalaan anda berfungsi seperti yang diharapkan, anda boleh terus menukar sifat lebar dan ketinggian svg:
Untuk mendapatkan nilai yang boleh dikira, anda boleh menggunakan salah satu daripada dua kaedah berikut:
atau
Kaedah pertama mengembalikan nombor secara lalai dan menukar nilai peratusan kepada nilai mutlak (berdasarkan unit pengguna svg).
Yang terakhir akan menanggalkan semua unit dan mengembalikan nilai angka tulen.