fix: lỗi font Bold của xuất pdf
This commit is contained in:
1 parent
4b551ccc31
commit
957ba6c72c
7 files changed
+91
-466
No files matched your search
@@ -2,7 +2,7 @@ import React, { useState, useEffect, useMemo, useRef } from 'react';
|
||||
import { io } from 'socket.io-client';
|
||||
import { jsPDF } from 'jspdf';
|
||||
import autoTable from 'jspdf-autotable';
|
||||
import { robotoBase64 } from '../utils/pdfFont';
|
||||
import { robotoBase64, robotoBoldBase64 } from '../utils/pdfFont';
|
||||
import { ItineraryTimeline } from '../components/ItineraryTimeline';
|
||||
import { ExpenseManager } from '../components/ExpenseManager';
|
||||
import { useTourStore } from '@/store/useTourStore';
|
||||
@@ -486,12 +486,12 @@ export const TourDetailPage = ({
|
||||
const handleExportPDF = async () => {
|
||||
const doc = new jsPDF({ orientation: 'landscape', unit: 'mm', format: 'a4' });
|
||||
|
||||
// 1. Thêm font vào Virtual File System của jsPDF để hỗ trợ tiếng Việt
|
||||
doc.addFileToVFS("Roboto-Regular.ttf", robotoBase64);
|
||||
doc.addFont("Roboto-Regular.ttf", "Roboto", "normal");
|
||||
doc.addFileToVFS("Roboto-Bold.ttf", robotoBoldBase64);
|
||||
doc.addFont("Roboto-Bold.ttf", "Roboto", "bold");
|
||||
doc.setFont("Roboto");
|
||||
|
||||
// 2. Vẽ Tiêu đề & Thông tin Tour ở đầu trang
|
||||
const titleText = `LỊCH TRÌNH TOUR: ${currentTour?.title?.toUpperCase() || 'HÀNH TRÌNH TOUR'}`;
|
||||
doc.setFontSize(16);
|
||||
doc.text(titleText, 148.5, 15, { align: 'center' });
|
||||
@@ -508,9 +508,9 @@ export const TourDetailPage = ({
|
||||
doc.text(dateRangeStr, 148.5, startY, { align: 'center' });
|
||||
startY += 8;
|
||||
|
||||
// 3. Chuẩn bị dữ liệu bảng
|
||||
const tableColumn = ["STT", "Ngày giờ", "Chặng", "Địa điểm", "Ghi chú"];
|
||||
const tableRows: any[] = [];
|
||||
const legRowRanges: Record<string, { start: number; count: number }> = {};
|
||||
|
||||
const formatDateTime = (dateStr: string) => {
|
||||
if (!dateStr) return '';
|
||||
@@ -525,30 +525,43 @@ export const TourDetailPage = ({
|
||||
};
|
||||
|
||||
let stt = 1;
|
||||
let globalRowIndex = 0;
|
||||
|
||||
if (currentTour?.legs && currentTour.legs.length > 0) {
|
||||
currentTour.legs.forEach((leg: any, legIdx: number) => {
|
||||
const legName = leg.note || `Chặng ${legIdx + 1}`;
|
||||
if (leg.locations && leg.locations.length > 0) {
|
||||
leg.locations.forEach((loc: any) => {
|
||||
const currentStt = stt++;
|
||||
|
||||
const arrivalStr = loc.arrivalTime ? `Đến: ${formatDateTime(loc.arrivalTime)}` : '';
|
||||
const departureStr = loc.departureTime ? `Đi: ${formatDateTime(loc.departureTime)}` : '';
|
||||
const timeText = [arrivalStr, departureStr].filter(Boolean).join('\n');
|
||||
|
||||
const locName = loc.name;
|
||||
const addressStr = loc.address ? `\n📍 Địa chỉ: ${loc.address}` : '';
|
||||
const locationText = `${locName}${addressStr}`;
|
||||
|
||||
const noteText = loc.notes || '';
|
||||
|
||||
const legLocations = (leg.locations || []).filter((loc: any) =>
|
||||
loc && (loc.plannedStart || loc.plannedEnd || loc.name)
|
||||
);
|
||||
|
||||
if (legLocations.length > 0) {
|
||||
const startRow = globalRowIndex;
|
||||
legRowRanges[leg.id] = { start: startRow, count: legLocations.length };
|
||||
|
||||
legLocations.forEach((loc: any) => {
|
||||
const timeStr = loc.plannedStart
|
||||
? formatDateTime(loc.plannedStart)
|
||||
: loc.plannedEnd
|
||||
? formatDateTime(loc.plannedEnd)
|
||||
: '';
|
||||
|
||||
const locName = loc.name || '';
|
||||
const addressStr = loc.address || '';
|
||||
const coordStr = loc.latitude && loc.longitude
|
||||
? `\n${loc.latitude}, ${loc.longitude}`
|
||||
: '';
|
||||
const locationText = [locName, addressStr, coordStr].filter(Boolean).join('\n');
|
||||
|
||||
const noteText = loc.note || '';
|
||||
|
||||
tableRows.push([
|
||||
currentStt,
|
||||
timeText,
|
||||
stt++,
|
||||
timeStr,
|
||||
legName,
|
||||
locationText,
|
||||
noteText
|
||||
]);
|
||||
globalRowIndex++;
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -558,22 +571,67 @@ export const TourDetailPage = ({
|
||||
tableRows.push(["-", "-", "-", "Chưa có chặng hoặc địa điểm nào trong hành trình.", "-"]);
|
||||
}
|
||||
|
||||
// 4. Vẽ bảng dùng autoTable
|
||||
autoTable(doc, {
|
||||
head: [tableColumn],
|
||||
headStyles: {
|
||||
fillColor: [37, 99, 235],
|
||||
textColor: [255, 255, 255],
|
||||
fontStyle: 'bold',
|
||||
halign: 'center',
|
||||
valign: 'middle'
|
||||
},
|
||||
body: tableRows,
|
||||
startY: startY,
|
||||
theme: 'grid',
|
||||
headStyles: { fillColor: [37, 99, 235], textColor: [255, 255, 255], fontStyle: 'normal' },
|
||||
styles: { font: "Roboto", fontSize: 9, cellPadding: 3, overflow: 'linebreak' },
|
||||
columnStyles: {
|
||||
0: { cellWidth: 12, halign: 'center' }, // STT
|
||||
1: { cellWidth: 50 }, // Ngày giờ
|
||||
2: { cellWidth: 45 }, // Chặng
|
||||
3: { cellWidth: 90 }, // Địa điểm
|
||||
4: { cellWidth: 70 } // Ghi chú
|
||||
styles: {
|
||||
font: "Roboto",
|
||||
fontSize: 9,
|
||||
cellPadding: 3,
|
||||
overflow: 'linebreak',
|
||||
valign: 'top'
|
||||
},
|
||||
margin: { left: 15, right: 15 }
|
||||
columnStyles: {
|
||||
0: { cellWidth: 12, halign: 'center', valign: 'middle' },
|
||||
1: { cellWidth: 50, halign: 'center', valign: 'middle' },
|
||||
2: { cellWidth: 45, halign: 'center', valign: 'middle' },
|
||||
3: { cellWidth: 90, valign: 'top' },
|
||||
4: { cellWidth: 70, valign: 'top' }
|
||||
},
|
||||
margin: { left: 15, right: 15 },
|
||||
didParseCell: (cell: any) => {
|
||||
if (cell.section === 'body') {
|
||||
if (cell.column.index === 2) {
|
||||
let assigned = false;
|
||||
for (const leg of currentTour?.legs || []) {
|
||||
const range = legRowRanges[leg.id];
|
||||
if (range && cell.row.index >= range.start && cell.row.index < range.start + range.count) {
|
||||
if (cell.row.index === range.start) {
|
||||
cell.rowSpan = range.count;
|
||||
} else {
|
||||
cell.rowSpan = 0;
|
||||
}
|
||||
assigned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!assigned) {
|
||||
cell.rowSpan = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (cell.column.index === 3) {
|
||||
const rowData = tableRows[cell.row.index];
|
||||
if (rowData && rowData[3]) {
|
||||
const coordMatch = rowData[3].match(/([\d.]+),\s*([\d.]+)/);
|
||||
if (coordMatch) {
|
||||
const lat = coordMatch[1];
|
||||
const lng = coordMatch[2];
|
||||
cell.cell.link = `https://www.openstreetmap.org/?mlat=${lat}&mlon=${lng}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
export const robotoBase64 = "AAEAAAAOAIAAAwBgR0RFRgslCyYAAU70AAAAQEdQT1OW7t6tAAFPNAAAUZJHU1VCLJENOgABoMgAAAQsT1MvMrivKbYAAAFoAAAAYFZETVhu6nZPAAASiAAABeBjbWFwe1eWmQAAGGgAAAh+Z2x5ZnKsuk0AAClMAAD8BGhlYWT3/7sxAAAA7AAAADZoaGVhCywJXgAAASQAAAAkaG10eMBzVnEAAAHIAAAQwGxvY2Hm+KbaAAAg6AAACGJtYXhwBE8BKgAAAUgAAAAgbmFtZfDWLcMAASVQAAAEo3Bvc3RDYN+ZAAEp9AAAJP0AAQAAAAEAAOqeVyxfDzz1AAsIAAAAAADE8BEuAAAAANAzXr36jf3VCTAIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJSfqN/dgJMAABAAAAAAAAAAAAAAAAAAAEMAABAAAEMACwABYAeAAFAAEAAAAAAAAAAAAAAAAAAwABAAMEigGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAAAAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAHB5cnMAQAAA//0GAP4AAGYHmgIAIAABn08BAAAEOgWwAAAAIAACAfsAAAAAAAAB+wAAAfsAAAKPAIgE+wBGBH4AbgXcAGkE+QBlAWUAZwK8AIUCyAAmA3IAHASJAE4BkgAdAjUAJQIbAJADTAASBH4AcwR+AKoEfgBdBH4AXgR+ADUEfgCaBH0AgwR+AE0EfgBwBH4AZAHwAIYBsQApBBEASARkAJgELgCGA8cASwcvAGoFOAAcBPsAqQU1AHcFPwCpBIwAqQRsAKkFcwB6BbQAqQItALcEagA1BQQAqQROAKkG/ACpBbQAqQWAAHYFDACpBYAAbQTtAKgEvwBQBMYAMQUwAIwFFwAcBxkAPQUEADkEzgAPBMoAVgIfAJIDSAAoAh8ACQNYAEADnAAEAnkAOQRaAG0EfQCMBDAAXASDAF8EPQBdAscAPAR9AGAEaACMAfEAjQHp/78EDgCNAfEAnAcDAIsEagCMBJAAWwR9AIwEjABfArUAjAQgAF8CnQAJBGkAiAPgACEGAwArA/cAKQPJABYD9wBYArUAQAHzAK8CtQATBXEAgwHzAIsEYQBpBKYAWwW0AGkE2AAfAesAkwToAFoDWABmBkkAWwOTAJMDwQBmBG4AfwZKAFoDqgB4Av0AggRHAGEC7wBCAu8APgKCAHsEiACaA+kAQwIWAJMB+wB0ArkAegOjAHoDwABmBdwAVQY1AFAGOQBvA8kARAd6//IERABZBYEAdgS6AKYEwgCLBsEATgSwAH4EkQBHBIkAWwScAJUFmwAeAfoAmwRzAJoETwAjAioAIwWLAKIEiACRB6EAaQdEAGEB/ACgArn/5AV/AGUEkwBbBZAAjATzAIgCA/+0BDcAYgPEAKkDjQCMA2oAgQHxAI0CrQB5AioAMgPGAHsC/ABeAloAfgAA/TYAAP2GAAD8iwAA/V4AAPwnAe/9OAINALcECwBxAhcAkwRzALEFpAAfBXIAZwU+ADIEkQB4BbUAsgSRAEUFuwBNBYkAWgVSAHEEhQBkBL0AoAQCAC4EiABgBFAAYwQlAG0EiACRBI4AegKXAMMEbgAlA+wAZQTFACkEiACRBE0AZQSIAGAELABRBF0AjwWjAFcFmgBfBpcAegShAHkEQv/aBkgASgX/ACoFZAB7CJkAMQikALEGggA+BbQAsAULAKIGBAAyB0MAGwS/AFAFtACxBakALwUHAE0GLQBTBdkArwV6AJYHhwCwB8AAsAYSABEG6wCyBQUAowVkAJMHJwC3BRgAWQRsAGEEkgCdA1sAmgTUAC4GIAAVBBAAWASeAJwEUgCcBKAAKAXvAJ0EnQCcBJ4AnAPYACgFzQBkBL0AnARZAGcGeACcBp8AkQT3AB4GNgCdBFgAnQRNAGQGiACdBGQALwRo/+cETgBnBskAJwbkAJwEif/9BJ4AnAcIAJwGKwCBBFb/3AcsALgF+QCZBNIAKARGAA8HDADKBgwAvAbRAJMF4QCWCQUAtwfRAJsEJABQA9sATAVyAGcEjABbBQoAFgQDAC4FcgBnBIkAWwcBAJwGJAB+BwkAnAYsAIEFMgB1BEcAZAT9AHQAAPxnAAD8cQAA/WYAAP2kAAD6jQAA+qQEVv/cBRsAqASKAIwEZACiA5AAkQTbALEEBgCRBQkAowR+AJoGjABFBYQAPgfPAKgFtACRCDEAsAb0AJEF7gBxBNMAbQctADQFXAAfBXAAlgRrAIMFcACKBi8APwS+/90FCQCjBFoAmgWyALEEiACRBYcAXQSoAGgEqABpBLcAOgNJADsE9gBXBpQAWQbkAGQGVgA2BSsAMQRKAFMECAB5B8EARAZ1AD8H+wCpBqEAkAT2AHYEHQBlBa0AIwUgAEYFZACWBBQAAAgpAAAEFAAACCkAAAK5AAACCgAAAVwAAAR/AAACMAAAAaIAAADRAAAAAAAABUAAogY/AJADpgANAZkAYAGZADABlwAkAZoAUALUAGgC2wA8AsEAJARpAEYEjwBXArIAigPEAJQFWgCUB6oARAJmAGwCZgBZA6MAOwLvADYDYAB6BKYAWwaRAKcEfgBfBegAewPOAGgIOgCiBQEAZwUXAJgGJgBUBtcAZAbPAGMGagBZBI8AagWOAKkErwBFBJIAqATFAD8IOgBiAgz/sASCAGUEZACYBBEAPgQvAIUECAArAkwAtQKPAG4CAwBcBG4AHwAAAAAIMwBbCDUAXALvAFADC/+iA/P/XgPvAG4DpABbAf0AnwSFABMEUACKBHwAYASAAIoD5gCKA8sAigSsAGME4wCKAegAlwPPACsEVACKA7QAigYCAIoE4wCKBLsAYARcAIoEuwBZBEoAigQgAEMEJgAoBHwAdARnABQGFQAxBFQAJgQrAA0EIwBHBA8AYwQPAJgEDwBOBA8ATgQPADAEDwCABA4AcgQPAEIEDwBgBA8AVQOkAIMC7wB6Au8AQgLvAD4C7wA2Au8AWwLvAFYC7wA6Au8ATwLvAEkDlgCPArUAngNHAIEBkQBnAiUAGwH8/7YEDgBpBDoAHgN5AFcD9ABpBG8AWgTDAGQEiABgBUwAsQUkALIEEwCSBT0AsgQPAJIDnwCBA54AgQR+AE0FfgCDBYEAfgWuAH4FkwCyBeAAfgXjAH4D1QCgBIIAgwRYAA8EzwA+BGsAZQQuAEoEuQCCBQAAeAQgADsEfQCMBDIAXASTAFsEjABbBJ4AWgSNAIwEnABbBDAAXAQ9AF0EfQBgBH4AhQR+AFoFPwCpBYAAdwRaAG0DagCBAfsAAAI1ACUFXQAlBV0AJQSGAAAExgAxAp3/9AU4ABwFOAAcBTgAHAU4ABwFOAAcBTgAHAU4ABwFNQB3BIwAqQSMAKkEjACpBIwAqQIt/+ACLQCwAi3/6QIt/9YFtACpBYAAdgWAAHYFgAB2BYAAdgWAAHYFMACMBTAAjAUwAIwFMACMBM4ADwRaAG0EWgBtBFoAbQRaAG0EWgBtBFoAbQRaAG0EMABcBD0AXQQ9AF0EPQBdBD0AXQH6/8YB+gCWAfr/zwH6/7wEagCMBJAAWwSQAFsEkABbBJAAWwSQAFsEaQCIBGkAiARpAIgEaQCIA8kAFgPJABYFOAAcBFoAbQU4ABwEWgBtBTgAHARaAG0FNQB3BDAAXAU1AHcEMABcBTUAdwQwAFwFNQB3BDAAXAU/AKkFGQBfBIwAqQQ9AF0EjACpBD0AXQSMAKkEPQBdBIwAqQQ9AF0EjACpBD0AXQVzAHoEfQBgBXMAegR9AGAFcwB6BH0AYAVzAHoEfQBgBbQAqQRoAIwCLf+3Afr/nQIt/7YB+v+cAi3/7AH6/9ICLQAJAfH/+gItAKoGlwC3A9oAjQRqADUCA/+0BQQAqQQOAI0ETgChAfEAkwROAKkB8QBXBE4AqQKHAJwETgCpAs0AnAW0AKkEagCMBbQAqQRqAIwFtACpBGoAjARq/84FgAB2BJAAWwWAAHYEkABbBYAAdgSQAFsE7QCoArUAjATtAKgCtQBTBO0AqAK1AGMEvwBQBCAAXwS/AFAEIABfBL8AUAQgAF8EvwBQBCAAXwS/AFAEIABfBMYAMQKdAAkExgAxAp0ACQTGADECxQAJBTAAjARpAIgFMACMBGkAiAUwAIwEaQCIBTAAjARpAIgFMACMBGkAiAUwAIwEaQCIBxkAPQYDACsEzgAPA8kAFgTOAA8EygBWA/cAWATKAFYD9wBYBMoAVgP3AFgHev/yBsEATgWBAHYEiQBbBID/wQSA/8EEJgAoBIUAEwSFABMEhQATBIUAEwSFABMEhQATBIUAEwR8AGAD5gCKA+YAigPmAIoD5gCKAej/vgHoAI4B6P/HAej/tATjAIoEuwBgBLsAYAS7AGAEuwBgBLsAYAR8AHQEfAB0BHwAdAR8AHQEKwANBIUAEwSFABMEhQATBHwAYAR8AGAEfABgBHwAYASAAIoD5gCKA+YAigPmAIoD5gCKA+YAigSsAGMErABjBKwAYwSsAGME4wCKAej/lQHo/5QB6P/KAej/4wHoAIkDzwArBFQAigO0AIIDtACKA7QAigO0AIoE4wCKBOMAigTjAIoEuwBgBLsAYAS7AGAESgCKBEoAigRKAIoEIABDBCAAQwQgAEMEIABDBCYAKAQmACgEfAB0BHwAdAR8AHQEfAB0BHwAdAR8AHQGFQAxBCsADQQrAA0EIwBHBCMARwQjAEcIQABDBTgAHATw//AGGP/+ApEABAWUAD0FMv94BWYAMwKX/5sFOAAcBPsAqQSMAKkEygBWBbQAqQItALcFBACpBvwAqQW0AKkFgAB2BQwAqQTGADEEzgAPBQQAOQIt/9YEzgAPBIUAZARQAGMEiACRApcAwwRdAI8EcwCaBJAAWwSIAJoD4AAhA/cAKQKX/+YEXQCPBJAAWwRdAI
Line truncated
|
||||
|
||||
export const robotoBoldBase64 = "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AvoARQL6AEYC+gAzAvoARwL6AEMD0gCNAqoAkAPbAGMEO//7BK0ASQU5AIQFKwCEBEcAcQUwAIQEQABxBHUAYwSDAEAEbQBjBKz//wIBAIUDnQBqAAD8mgQHAIMEB/9FBAcAhAQHAIQDxQBjA50AagOdAGoC+wBHAvsANQL7AEUC+wBGAvsAMwL7AEcC+wBDBWoAWAWSAFgFcgCEBdYAWAXXAFgEaACPBIIAWARXAA8ErAAsBGsAaAQuADwDnQBqAdkAWgaOAEAEpwBgAhv/nwSXADcElwBhBJcANASXAFQElwBOBJcAMwSXAF8ElwBWBJcAXwSXANkCQf+tAkH/rQIxAIYCMf/8AjEAhgRtAGME0gBMBD4AOASRAG8ERgBEBJgARASWAEQEnAA8BJUAbwSaAEQEUwBIBJEAQgPUAGYFNQBWA9AABwZQ/9cEFABjBMAAQAUwADYE1gBjAf4AAAMaAG4FUf/sBVH/7ASY/8sE8wAoArT/4gViAAcFYgAHBWIABwViAAcFYgAHBWIABwViAAcFPABWBIAAggSAAIIEgACCBIAAggJV/7oCVQCVAlX/rwJV/60FpgCCBYYAVgWGAFYFhgBWBYYAVgWGAFYFRAB0BUQAdAVEAHQFRAB0BPIAAgRKAEQESgBEBEoARARKAEQESgBEBEoARARKAEQELABCBFMASARTAEgEUwBIBFMASAIx/6gCMQCGAjH/nQIx/5sEewBpBIYAQgSGAEIEhgBCBIYAQgSGAEIEegBoBHoAaAR6AGgEegBoBAQAAwQEAAMFYgAHBEoARAViAAcESgBEBWIABwRKAEQFPABWBCwAQgU8AFYELABCBTwAVgQsAEIFPABWBCwAQgUzAIIFGABCBIAAggRTAEgEgACCBFMASASAAIIEUwBIBIAAggRTAEgEgACCBFMASAVzAF4EkQBFBXMAXgSRAEUFcwBeBJEARQVzAF4EkQBFBacAggR6AGgCVf+yAjH/oAJV/9QCMf/CAlX/0gIx/8ACVQAXAh8AAwJVAJUGzQCVBDMAbQR4ACgCQf+XBRQAggRGAG8EVQCCAh8AfgRVAIICHwBbBFUAggK1AH4EVQCCAvsAfgWmAIIEewBpBaYAggR7AGkFpgCCBHsAaQR7/5IFhgBWBIYAQgWGAFYEhgBCBYYAVgSGAEIFGwCCAusAbwUbAIIC6wBQBRsAggLrABEE6wBFBB0AOATrAEUEHQA4BOsARQQdADgE6wBFBB0AOATrAEUEHQA4BPMAKAK0AAoE8wAoArQACgTzACgC3AAKBUQAdAR6AGgFRAB0BHoAaAVEAHQEegBoBUQAdAR6AGgFRAB0BHoAaAVEAHQEegBoBv8AIw
Line truncated
|
||||
Reference in new issue
Block a user