Skala laluan SVG dan tukar menggunakan mPdf
P粉287726308
P粉287726308 2023-08-16 17:57:54
0
1
610
<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>
P粉287726308
P粉287726308

membalas semua(1)
P粉536909186

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:

let svg = document.getElementById('svg-number')
scaleSVG(svg, 0.05);

function scaleSVG(svg, scale=1){
  let width = svg.width.baseVal.value;
  let height = svg.height.baseVal.value;
  
  /**
  * alternative
  let width = parseFloat(svg.getAttribute('width'));
  let height = parseFloat(svg.getAttribute('height'));
  */
  
  svg.setAttribute('width', width*scale)
  svg.setAttribute('height', height*scale)
}
svg{
  border: 1px solid red;
}
<svg xmlns="http://www.w3.org/2000/svg" id="svg-number" width="686.280029296875px" height="540.8900146484375px" viewBox="62.619998931884766 245 686.280029296875 540.8900146484375" >
  <path id="path-svg-number" d="m277.9 252.7 0 533.2-106.9 0 0-438.7-108.4 0 0-75.5 215.3-19zm471 451.2 0 82-364 0 0-70 172.5-184.9q37.3-42.8 53.1-72.3 15.7-29.5 15.7-54.8l0 0q0-33.7-18.1-55.1-18.1-21.4-51.5-21.4l0 0q-37 0-56.2 25.1-19.2 25.1-19.2 66.8l0 0-104 0-.7-2.2q-1.9-72.1 47.4-122.1 49.2-50 132.7-50l0 0q82.4 0 129.5 42.8 47 42.9 47 114.3l0 0q0 48.3-26.5 89.2-26.6 40.8-87.7 107.1l0 0-94.9 103.6.8 1.9 224.1 0z" />
</svg>

Untuk mendapatkan nilai yang boleh dikira, anda boleh menggunakan salah satu daripada dua kaedah berikut:

let width = svg.width.baseVal.value;

atau

let width = parseFloat(svg.getAttribute('width'));

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan