Saya mencoba banyak cara untuk membuat tabel agar sesuai dengan halaman (A4) seperti yang ditunjukkan pada gambar: Saya mencari banyak tetapi tidak dapat menemukan sesuatu yang berguna di web. Saya menggunakan tabel dinamis, semuanya ok kecuali lebar tabel. ini kode saya:
$content = '<table><thead><tr><th class="bg-dark text-white" align="center">#</th><th align="center" class="bg-dark text-white">Code</th><th align="left" class="bg-dark text-white">Description</th><th align="center" class="bg-dark text-white">Item Type</th></tr></thead><tbody><tr style="background-color: #f2f2f2;"><td align="center">1</td><td align="center">1001</td><td align="left">Pofak</td><td align="center">Fixed Price</td></tr><tr ><td align="center">2</td><td align="center">1002</td><td align="left">Ice</td><td align="center">Weight</td></tr><tr style="background-color: #f2f2f2;"><td align="center">3</td><td align="center">1003</td><td align="left">Minoo</td><td align="center">Fixed Price</td></tr><tr ><td align="center">4</td><td align="center">1004</td><td align="left">Bastani</td><td align="center">Fixed Price</td></tr><tr style="background-color: #f2f2f2;"><td align="center">5</td><td align="center">1005</td><td align="left">Chocolate</td><td align="center">Weight</td></tr><tr ><td align="center">6</td><td align="center">1006</td><td align="left">Brush</td><td align="center">Fixed Price</td></tr><tr style="background-color: #f2f2f2;"><td align="center">7</td><td align="center">1007</td><td align="left">Apple</td><td align="center">Weight</td></tr><tr ><td align="center">8</td><td align="center">1008</td><td align="left">Water</td><td align="center">Fixed Price</td></tr><tr style="background-color: #f2f2f2;"><td align="center">9</td><td align="center">1009</td><td align="left">Cleaner</td><td align="center">Fixed Price</td></tr><tr ><td align="center">10</td><td align="center">1001</td><td align="left">Pofak</td><td align="center">Fixed Price</td></tr><tr style="background-color: #f2f2f2;"><td align="center">11</td><td align="center">1002</td><td align="left">Ice</td><td align="center">Weight</td></tr><tr ><td align="center">12</td><td align="center">1003</td><td align="left">Minoo</td><td align="center">Fixed Price</td></tr><tr style="background-color: #f2f2f2;"><td align="center">13</td><td align="center">1004</td><td align="left">Bastani</td><td align="center">Fixed Price</td></tr><tr ><td align="center">14</td><td align="center">1005</td><td align="left">Chocolate</td><td align="center">Weight</td></tr><tr style="background-color: #f2f2f2;"><td align="center">15</td><td align="center">1006</td><td align="left">Brush</td><td align="center">Fixed Price</td></tr></tbody></table>';
$newContent = '
<style type="text/css">
table{width:100%;}
table, table td, table th{
border-collapse: collapse;
border: solid 1px #ababab;
}
.text-dark, table td{
color: #343a40;
}
.text-white{
color: #ffffff;
}
table td,
table th {
font-size: 11px;
padding: 3px;
line-height: 1.2;
font-family:arial;
}
.bg-dark {
background-color: #343a40;
}
.bg-secondary {
background-color: #6c757d;
}
.bg-white {
background-color: #ffffff;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-center {
text-align: center;
}
</style>
';
$newContent .= '<page>'.$content.'</page>';
try {
$html2pdf = new Html2Pdf('P', 'A4', 'en', true, 'UTF-8', 5);
$html2pdf->pdf->SetDisplayMode('real');
$html2pdf->writeHTML($newContent);
$PDFName = "ItemLists_".date('Y.m.d_H.i.s').".pdf";
$html2pdf->output($PDFName, 'I');
} catch (Html2PdfException $x) {
$html2pdf->clean();
$formatter = new ExceptionFormatter($x);
echo $formatter->getHtmlMessage();
}
terimakasih banyak
style="width: 100%"
menyimpan lebar yang dikonversi dengan benar dalam MM (Meskipun atribut lebar tidak!) Namun Html2PDF tampaknya tidak benar-benar menggunakannya selama rendering tabel.Jawaban:
Html2PDF tidak menggunakan sistem parser / render HTML TCPDF. Itu mengimplementasikannya sendiri, dan implementasinya tidak akan menumbuhkan kolom secara otomatis untuk mengisi 100% dari ruang.
Dengan demikian, di Html2PDF, Anda tidak hanya perlu mengatur lebar 100% di atas meja, tetapi Anda perlu mengatur lebar persentase untuk masing-masing sel. (Dan karena beberapa perilaku aneh dengan
width
atribut di Html2PDF, gunakan CSS untuk mengatur lebarnya.)Asli TCPDF
writeHTML
akan mengatur setiap kolom menjadi lebar yang sama tidak ada spesifikasi apa pun sebaliknya. (Misalnya, tabel 4-kolom memiliki semua sel di 25%) Namun, itu tidak mendukung CSS yang Anda gunakan sehingga markup akan membutuhkan sedikit penyesuaian untuk pergi ke rute itu.Untuk meniru perilaku dasar ini di Html2PDF, Anda bisa menambahkan lebar yang setara ke sel Anda secara eksplisit. Misalnya, menambahkan spesifikasi lebar ke
table td, table th
aturan gaya Anda .Berikut ini contoh dengan aturan CSS berikut untuk tabel empat kolom:
Tentu saja, ini terlihat paling baik ketika Anda menentukan lebar yang sesuai dengan konten Anda.
MEMPERBARUI
Saya akan meninggalkan beberapa diskusi tentang TCPDF di bawah karena sedikit mengarah pada penciptaan kelas yang berpotensi berguna untuk
Html2pdf
. TCPDF memiliki beberapa metode yang berguna untuk mengukur panjang string. Jika Anda mengukur ukuran string di dalam kolom, Anda dapat membuat sizer kolom otomatis Anda sendiri.Saya membuat kelas proof-of-concept di github di https://github.com/b65sol/random-classes
Pertama, kami menggunakan kelas untuk memediasi pembangunan HTML. Ini adalah kelas kolom untuk mengatur lebar yang ditambahkan dan kita tidak perlu menguraikan HTML untuk mengekstraksi konten yang kita ukur.
Maka kita harus memilih beberapa strategi untuk memilih lebar kolom kita. Misalnya, demo di bawah ini mengukur kolom dan menemukan persentase lebar minimum untuk masing-masing berdasarkan kata terpanjang. (Hindari wordbreaks) Kemudian bagikan ruang ekstra apa pun secara proporsional berdasarkan perbedaan antara kata terpanjang dan konten sel penuh terpanjang. Saya tidak akan menyebut produksi ini siap karena ini merupakan konsep bukti, tetapi saya harap Anda (atau pencari lainnya) menemukannya sebagai titik awal yang bermanfaat.
Bagian penting untuk itu di bawah ini adalah ini:
$tablebuilder->determine_column_widths_by_minimum_strategy('100%', 'aaa')
Parameter pertama memberi kita referensi ukuran yang sedang kami kerjakan (100% dari halaman karena saya membutuhkan ini untuk membuat pengukuran berguna), dan yang kedua memberikan beberapa karakter padding yang telah ditetapkan untuk ditambahkan ke pengukuran kami untuk memperhitungkan gaya teks dan tabel perbedaan padding.
Berikut ini adalah demo menjalankannya: https://b65sol.com/so/59517311_new.php
Kelas itu sendiri tersedia di sini: https://github.com/b65sol/random-classes
Kode untuk demo itu ada di sini:
AKHIR PEMBARUAN
Jika Anda memilih untuk tidak menentukan lebar secara eksplisit, Anda bisa menggunakan TCPDF
writeHTML
daripada menggunakanHtml2PDF
perpustakaan, tetapi semua yang akan dilakukan adalah menggunakan kolom berukuran sama. Saya benar-benar berpikir itu akan melakukan perhitungan ulang ukuran kolom jika Anda hanya menentukan satu atau dua, tetapi saya salah. Selanjutnya, TCPDF menderita beberapa batasan yang sama sepertiHtml2PDF
- jika Anda menentukan ukuran satu kolom, itu tidak akan secara otomatis mengubah ukuran kolom lainnya agar sesuai.Itu juga tidak ukuran kolom untuk konten seperti browser. Ini sebenarnya cukup sulit untuk dilakukan dengan baik sehingga saya tidak terkejut TCPDF tidak mencobanya. Solusi yang berpotensi rendah upaya adalah memberi tag pada kolom Anda dengan ukuran 'proporsi' dan menghitung lebar dengan cepat untuk masing-masing tergantung pada berapa banyak dari setiap kolom ukuran proporsional yang dipilih. (mis. kolom numerik adalah 'kecil', dan kolom uraian akan 'besar' sehingga memecah dua kolom kecil masing-masing 10% dan satu deskripsi 80%. Dua kolom kecil 5% dan kolom besar 45%) masing-masing. Butuh beberapa percobaan.)
sumber
table th, table td { <?=floor(100 / count($cols))?>%;}
tapi saya sedang mencari solusi yang lebih baikHtml2PDF
Anda? Semua bacaan saya tentang kode dan contoh menunjukkan ini adalah satu-satunya cara. TCPDF dapat melakukan ini dengan parsing CSS yang sedikit kurang mampu, tetapi memiliki sistem tata letak yang lebih baik. Saya dapat menyarankan markup untuk TCPDF lurus.table th, table td { <?=floor(100 / count($cols))?>%;}
Html2PDF
atauTCPDF
tampaknya melakukannya di luar kotak.determine_column_widths_evenly
yang memungkinkan Anda menentukan beberapa ukuran yang diketahui dan mendistribusikannya secara merata ke ruang yang tersisa.Bekerja dengan sisi server PDF tidak bagus untuk CSS. Sudahkah Anda mencoba menggunakan HTML saja?
Sebagai contoh:
Atau Anda dapat mencoba:
Berikut adalah CodePen yang menunjukkan ini berfungsi di browser. https://codepen.io/tinacious/pen/PowJRbb
sumber
<table width="100%">
<table style="width:100%;">
<table class="w100">
<link rel="stylesheet" href="style.css" />
tetapi masalahnya adalah, ia bekerja dengan baik pada html tetapi ketika saya ingin menyimpannya sebagai PDF, itu akan seperti gambar.gambar:
Saya pikir cara terbaik untuk jenis tabel ini menggunakan cara ini:
pada TCPDF mereka belum melakukan sesuatu yang istimewa, tabelnya tidak muat pada halaman.
sumber