xm-md-pdf
Version:
CLI tool for converting Markdown files to PDF and DOC.
73 lines (72 loc) • 2.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseFilePath = void 0;
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const global_1 = require("./global");
const render_1 = require("./render");
// 路径解析
exports.parseFilePath = (filePath) => {
const { dir, name, ext, } = path_1.default.parse(filePath);
return {
path: dir,
fileName: `${name}${ext}`,
};
};
exports.default = async (content, options, filePath) => {
var _a;
const { pdf_options, watermark } = global_1.Global.config;
const html = render_1.renderHtml(content);
if (!((_a = global_1.Global.browser) === null || _a === void 0 ? void 0 : _a.isConnected())) {
throw '浏览器启动失败,请确保已经调用过 openBrowser';
}
// 设置html content
await global_1.Global.page.setContent(html, {
waitUntil: 'domcontentloaded'
});
// 指定位置插入插入 html 片段
// await Global.page.$eval('#content', (dom, html) => {
// dom.innerHTML = html
// }, html);
// 添加样式
await global_1.Global.page.addStyleTag({
path: path_1.default.resolve(__dirname, 'assets/markdown.css'),
});
if (watermark) {
await global_1.Global.page.addScriptTag({
path: path_1.default.resolve(__dirname, 'lib/waterMask.js'),
});
// 运行自定义js脚本,这里用于添加水印
// 注:调用是需要带上 window 命名空间
await global_1.Global.page.evaluate((text) => {
// @ts-ignore
if (window.waterMark) {
// @ts-ignore
window.waterMark({
text
});
}
}, watermark);
}
let result = filePath;
try {
await global_1.Global.page.emulateMediaType('screen');
if (filePath) {
const downloadConfig = exports.parseFilePath(filePath);
fs_extra_1.default.ensureDir(downloadConfig.path);
result = await global_1.Global.page.pdf(Object.assign(Object.assign(Object.assign({}, options), pdf_options), { path: `${downloadConfig.path}/${downloadConfig.fileName}` }));
console.log(`${filePath} export complete`);
}
else {
result = await global_1.Global.page.pdf(Object.assign(Object.assign({}, options), pdf_options));
console.log('pdf export complete');
}
}
catch (error) {
throw error;
}
return Promise.resolve(result);
};