diff --git a/fonts/全真楷書.ttf b/fonts/全真楷書.ttf new file mode 100644 index 0000000..e6577f3 Binary files /dev/null and b/fonts/全真楷書.ttf differ diff --git a/src/contractService.js b/src/contractService.js index dbb84d0..acbd772 100644 --- a/src/contractService.js +++ b/src/contractService.js @@ -7,6 +7,7 @@ const { pathToFileURL } = require('node:url'); const JSZip = require('jszip'); const TEMPLATE_DIR = path.resolve(process.env.TEMPLATE_DIR || path.join(process.cwd(), 'templates')); +const FONTS_DIR = path.resolve(process.env.FONTS_DIR || path.join(process.cwd(), 'fonts')); const TEMP_DIR = path.resolve(process.env.TEMP_DIR || path.join(os.tmpdir(), 'rental-contracts')); const SOFFICE_BIN = process.env.SOFFICE_BIN || ( process.platform === 'win32' @@ -205,9 +206,26 @@ function assertAllPlaceholdersWereFound(replacementCounts) { } } +async function copyFontsToProfile(profileDir) { + let fontFiles; + try { + fontFiles = await fs.readdir(FONTS_DIR); + } catch { + return; + } + const profileFontsDir = path.join(profileDir, 'user', 'fonts'); + await fs.mkdir(profileFontsDir, { recursive: true }); + await Promise.all( + fontFiles + .filter((f) => /\.(ttf|otf|ttc)$/i.test(f)) + .map((f) => fs.copyFile(path.join(FONTS_DIR, f), path.join(profileFontsDir, f))), + ); +} + async function convertToPdf(inputPath, outputDir) { const libreOfficeProfileDir = path.join(outputDir, 'lo-profile'); await fs.mkdir(libreOfficeProfileDir, { recursive: true }); + await copyFontsToProfile(libreOfficeProfileDir); const args = [ `-env:UserInstallation=${pathToFileURL(libreOfficeProfileDir).href}`,