#! /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 ') 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 = '\n' + '\n' + '\n' + '\n' + '\n' + '\n\n\n' + html + '\n\n\n\n' + '\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();