feat: scripts
This commit is contained in:
113
scripts/markdownpdf.js
Normal file
113
scripts/markdownpdf.js
Normal file
@@ -0,0 +1,113 @@
|
||||
#! /usr/bin/env runjs
|
||||
|
||||
// http://wkhtmltopdf.org/downloads.html
|
||||
// $ wkhtmltopdf --user-style-sheet scripts/for-pdf.css --header-left "Hatter's Test Document - v1.0"
|
||||
// --header-right '[page]/[toPage]' --header-line --margin-top 2.3cm --header-spacing 8 --header-font-size 10
|
||||
// --footer-line --footer-font-name 'Times New Roman' --footer-font-size 10 --footer-spacing 8 --margin-bottom 2.3cm
|
||||
// --footer-center 'Copyright © 2017 Hatter Jiang. All Rights Reserved.' --debug-javascript test.htm test.pdf
|
||||
|
||||
requireJAR('markdown4j-2.2.jar');
|
||||
|
||||
var File = java.io.File;
|
||||
var RFile = Packages.me.hatter.tools.commons.io.RFile;
|
||||
var StringUtil = Packages.me.hatter.tools.commons.string.StringUtil;
|
||||
var Markdown4jProcessor = Packages.org.markdown4j.Markdown4jProcessor;
|
||||
|
||||
var main = () => {
|
||||
var whichResults = $$.shell().commands('which', 'wkhtmltopdf').start();
|
||||
if (!whichResults[0].toString().contains('wkhtmltopdf')) {
|
||||
println('[ERROR] `wkhtmltopdf` must be installed <http://wkhtmltopdf.org/downloads.html>')
|
||||
return;
|
||||
}
|
||||
if ($ARGS == null || $ARGS.length == 0) {
|
||||
println('markdownpdf.js - Render markdown to pdf.')
|
||||
println();
|
||||
println('ERROR: NO arguments assigned!');
|
||||
println('markdownpdf.js filename.md [filename.pdf]');
|
||||
return;
|
||||
}
|
||||
var mdFile = $$.file($ARGS[0]);
|
||||
if (!mdFile.exists()) {
|
||||
println('[ERROR] File not exists: ' + $ARGS[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
var pdfFile = ($ARGS.length > 1)? $ARGS[1]: (StringUtil.substringBeforeLast(mdFile.getName(), '.') || mdFile.getName()) + '.pdf';
|
||||
|
||||
var defaultMarkdownpdfConfig = {
|
||||
"header-left": "Sample Document - v1.0",
|
||||
"header-right": "[page]/[toPage]",
|
||||
"header-line": true,
|
||||
"margin-top": "2.3cm",
|
||||
"header-spacing": "8",
|
||||
"header-font-size": "10",
|
||||
"footer-line": true,
|
||||
"footer-font-name": "Times New Roman",
|
||||
"footer-font-size": "10",
|
||||
"footer-spacing": "8",
|
||||
"margin-bottom": "2.3cm",
|
||||
"footer-center": "Copyright © 2017 Hatter Jiang. All Rights Reserved.",
|
||||
"debug-javascript": true
|
||||
//"user-style-sheet": "pdf.css"
|
||||
};
|
||||
var markdownpdfConfig = defaultMarkdownpdfConfig;
|
||||
var fileMarkdownpdfConfig = $$.file('markdownpdf.json');
|
||||
if (fileMarkdownpdfConfig.exists()) {
|
||||
println('[INFO] Config file markdownpdf.json found, load config.');
|
||||
markdownpdfConfig = JSON.parse(RFile.from(fileMarkdownpdfConfig).rReader().stringAndClose());
|
||||
} else {
|
||||
println('[INFO] Config file markdownpdf.json not found, load default config.');
|
||||
}
|
||||
|
||||
var boolConfigKeys = $$.set();
|
||||
boolConfigKeys.addAll($$.asList('header-line', 'footer-line', 'debug-javascript'));
|
||||
|
||||
var cmds = $$.list();
|
||||
cmds.add('wkhtmltopdf');
|
||||
|
||||
["header-left", "header-right", "header-line", "margin-top", "header-spacing", "header-font-size", "footer-line",
|
||||
"footer-font-name", "footer-font-size", "footer-spacing", "margin-bottom", "footer-center", "debug-javascript", "user-style-sheet"].forEach((k) => {
|
||||
var conf = (markdownpdfConfig[k] == null)? defaultMarkdownpdfConfig[k]: markdownpdfConfig[k];
|
||||
if (conf) {
|
||||
cmds.add('--' + k);
|
||||
if (!boolConfigKeys.contains(k)) {
|
||||
cmds.add(conf);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
println('[INFO] Render markdown file to temp html.')
|
||||
var tempHtmlFile = File.createTempFile('markdowntopdf', '.html');
|
||||
tempHtmlFile.deleteOnExit();
|
||||
var md = RFile.from(mdFile).string();
|
||||
var html = new Markdown4jProcessor().process(md);
|
||||
html = '<html>\n'
|
||||
+ '<head>\n'
|
||||
+ '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n'
|
||||
+ '<style>\n'
|
||||
+ ' * {\n'
|
||||
+ ' font-size: 60px;\n'
|
||||
+ ' }\n'
|
||||
+ '</style>\n'
|
||||
+ '</head>\n'
|
||||
+ '<body>\n\n\n' + html + '\n\n\n</body>\n'
|
||||
+ '</html>\n';
|
||||
RFile.from(tempHtmlFile).write(html);
|
||||
|
||||
cmds.add(tempHtmlFile.getAbsolutePath());
|
||||
cmds.add(pdfFile);
|
||||
println('[INFO] Execute command line: ' + cmds);
|
||||
|
||||
var result = $$.shell().commands(cmds.toArray(java.lang.reflect.Array.newInstance($$.clazz('java.lang.String'), 0))).start();
|
||||
|
||||
println('[INFO] Outputs: ')
|
||||
if (result[1] && result[1].toString().trim().length > 0) {
|
||||
println(result[1].toString().trim());
|
||||
}
|
||||
if (result[0].toString().trim().length > 0) {
|
||||
println(result[0].toString().trim());
|
||||
}
|
||||
};
|
||||
|
||||
main();
|
||||
|
||||
Reference in New Issue
Block a user