前端项目初始化提交

This commit is contained in:
2026-06-03 13:16:30 +08:00
commit 0910ba9cbe
163 changed files with 110032 additions and 0 deletions

96
generate-pdf.js Normal file
View File

@@ -0,0 +1,96 @@
import { PDFDocument, rgb, StandardFonts } from 'pdf-lib';
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
async function createSamplePDF() {
const pdfDoc = await PDFDocument.create();
const font = await pdfDoc.embedFont(StandardFonts.Helvetica);
const boldFont = await pdfDoc.embedFont(StandardFonts.HelveticaBold);
for (let i = 1; i <= 3; i++) {
const page = pdfDoc.addPage([595.28, 841.89]);
page.drawText('Company Attendance Management Policy', {
x: 50,
y: 800,
size: 24,
font: boldFont,
color: rgb(0, 0, 0),
});
page.drawText('Version: v1.2 | Updated: 2026-01-01', {
x: 50,
y: 770,
size: 12,
font,
color: rgb(0.5, 0.5, 0.5),
});
const content = [
'Chapter 1: General Provisions',
'',
'Article 1: This policy is established to regulate attendance management and maintain normal work order.',
'',
'Article 2: This policy applies to all employees of the company.',
'',
'Article 3: Attendance management follows the principles of fairness, impartiality, and transparency.',
'',
'Chapter 2: Working Hours',
'',
'Article 4: The company implements standard working hours:',
'- Working days: Monday to Friday',
'- Working hours: 9:00 AM - 12:00 PM, 1:30 PM - 6:00 PM',
'- Lunch break: 12:00 PM - 1:30 PM (1.5 hours)',
'',
'Article 5: Special positions may adjust working hours as needed with HR approval.',
'',
'Chapter 3: Attendance Methods',
'',
'Article 6: The company uses an electronic attendance system for recording.',
'',
'Article 7: Check-in requirements:',
'- Morning check-in: No later than 10 minutes after start time',
'- Evening check-out: No earlier than 10 minutes before end time',
`- Official business or special circumstances require prior approval`,
'',
`Article ${i + 7}: Sample content on page ${i}`,
];
let yPosition = 720;
content.forEach((line) => {
if (yPosition > 50) {
page.drawText(line, {
x: 50,
y: yPosition,
size: 12,
font,
color: rgb(0, 0, 0),
});
yPosition -= 20;
}
});
page.drawText(`Page ${i} / 3`, {
x: 250,
y: 30,
size: 10,
font,
color: rgb(0.5, 0.5, 0.5),
});
}
const pdfBytes = await pdfDoc.save();
const outputPath = path.join(__dirname, 'public', 'sample.pdf');
fs.writeFileSync(outputPath, pdfBytes);
console.log(`Sample PDF generated successfully!`);
console.log(`File path: ${outputPath}`);
console.log(`File size: ${(pdfBytes.length / 1024).toFixed(2)} KB`);
}
createSamplePDF().catch(console.error);