llm-pdf
Version:
Command Line tool to automate LLM and image models to generate a pdf by converting the generated text into markdown format and save it as a pdf document.
107 lines (99 loc) • 3.03 kB
JavaScript
import { mdToPdf } from 'md-to-pdf';
import fs from 'fs/promises';
async function generatePdf(markdownContent, outputName) {
const isDark = outputName.includes('dark');
await mdToPdf({ content: markdownContent }, {
dest: `./${outputName}`,
stylesheet: [
'https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.2.0/github-markdown.min.css',
],
body_class: 'markdown-body',
css: `
@page {
size: A4;
margin: 0;
padding: 2rem;
}
.page-break { page-break-after: always; }
.markdown-body {
font-size: 12px;
padding: 30px !important;
box-sizing: border-box;
min-width: 200px;
max-width: 980px;
margin: 0 auto;
${isDark ? `
background-color: #1a1a1a !important;
color: #c9d1d9 !important;
` : ''}
}
.markdown-body h1, .markdown-body h2 {
${isDark ? `
color: #ffffff !important;
border-left: 4px solid #58a6ff !important;
` : `
color: #24292f !important;
border-left: 4px solid #0969da !important;
`}
border-bottom: none !important;
padding-left: 12px !important;
margin-left: -16px !important;
font-weight: 600 !important;
}
.markdown-body pre {
background-color: ${isDark ? '#161b22' : '#f6f8fa'} !important;
padding: 16px;
border-radius: 1px;
overflow-x: auto;
}
.markdown-body code {
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;
${isDark ? 'color: #c9d1d9 !important;' : ''}
}
.markdown-body table {
border-spacing: 0;
border-collapse: collapse;
display: block;
width: 100%;
overflow: auto;
margin: 15px 0;
${isDark ? `
background-color: #1a1a1a !important;
` : ''}
}
.markdown-body th {
font-weight: 600;
background-color: ${isDark ? '#2d333b' : '#f6f8fa'};
}
.markdown-body td {
${isDark ? `
background-color: #1a1a1a !important;
` : ''}
}
.markdown-body th,
.markdown-body td {
padding: 6px 13px;
border: 1px solid ${isDark ? '#404850' : '#dfe2e5'};
}
`,
highlight_style: isDark ? 'atom-one-dark' : 'github',
pdf_options: {
margin: '0',
printBackground: true,
format: 'A4',
},
});
}
async function convertMarkdownToPdf() {
try {
const mdContent = await fs.readFile('conversation.md', 'utf-8');
const markdownContent = mdContent.replace(/<think>[\s\S]*?<\/think>/g, '');
await generatePdf(markdownContent, 'output-dark.pdf');
console.log('Dark theme PDF created: output-dark.pdf');
await generatePdf(markdownContent, 'output-light.pdf');
console.log('Light theme PDF created: output-light.pdf');
} catch (error) {
console.error('Error converting Markdown to PDF:', error);
}
}
export default convertMarkdownToPdf;