前端项目初始化提交
This commit is contained in:
96
generate-pdf.js
Normal file
96
generate-pdf.js
Normal 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);
|
||||
Reference in New Issue
Block a user