A modern, browser-based GUI for Pandoc that runs locally with comprehensive formatting support. Convert between multiple document formats with an intuitive interface.
- Input Formats: Markdown, HTML, DOCX, ODT, EPUB, LaTeX, reStructuredText, Textile, Org Mode, MediaWiki, RTF, and more
- Output Formats: All input formats plus PDF, plain text, and Pandoc JSON
- β Clean Paragraph Formatting - Preserves document structure
- β Numbered and Bullet Lists - Maintains list hierarchy
- β Nested Lists & Indents - Proper indentation handling
- β Heading Structures (H1-H6) - Complete heading support
- β Table Conversion - Complex table formatting
- β Footnotes & Endnotes - Academic citation support
- β Image Processing - Embedded and linked images
- β Text Styling - Bold, italics, underline, strikethrough
- β Hyperlinks & Anchor Text - URL and internal links
- β Line Breaks & Spacing - Precise spacing control
- β Text Boxes Handling - Special content blocks
- β Inline Comments - Comment preservation
- β Batch Processing - Convert multiple files at once
- β ZIP Download - Bulk export functionality
- Browser-based GUI (works on all platforms)
- Drag-and-drop file upload
- Single file or batch processing modes
- Real-time conversion progress
- Responsive design for mobile and desktop
Pandoc must be installed on your system:
macOS:
brew install pandocLinux (Ubuntu/Debian):
sudo apt-get install pandocLinux (Fedora):
sudo dnf install pandocWindows: Download from pandoc.org/installing.html
Download and install Node.js (v14 or higher) from nodejs.org
Verify installation:
node --version
npm --version- Clone or download this repository:
git clone https://github.com/your-username/PandaDoc-GUI.git
cd PandaDoc-GUI- Install dependencies:
npm install- Start the server:
npm start- Open your browser: Navigate to http://localhost:3000
- Click "Single File" mode (default)
- Drop a file or click to browse
- Select input format (or leave as auto-detect)
- Choose output format
- Configure options if needed (TOC, numbering, etc.)
- Click "Convert Document"
- Download starts automatically
- Click "Batch Processing" mode
- Drop multiple files or click to browse
- Select formats and options
- Click "Convert Document"
- All files are converted and downloaded as a ZIP
- Table of Contents: Generate a TOC for your document
- Number Sections: Automatically number all headings
- Bibliography: Enable citation and bibliography processing
- CSS Styling: Enhanced styling for HTML output
Common conversion paths:
- Markdown β HTML/PDF/DOCX - Blog posts, documentation
- DOCX β Markdown - Word documents to plain text
- HTML β Markdown/PDF - Web content to documents
- LaTeX β PDF/DOCX - Academic papers
- EPUB β PDF/DOCX - E-books to printable formats
PDF generation requires LaTeX. Install it for your platform:
macOS:
brew install --cask mactex-no-guiLinux:
sudo apt-get install texlive-latex-base texlive-fonts-recommendedYou can add custom Pandoc templates by placing them in the project directory and modifying server.js to reference them.
The server exposes REST API endpoints:
GET /api/check-pandoc- Check Pandoc availabilityGET /api/formats- Get supported formatsPOST /api/convert- Convert single filePOST /api/convert-batch- Batch convert files
npm run devThis uses nodemon to automatically restart the server when files change.
PandaDoc-GUI/
βββ server.js # Express backend
βββ package.json # Dependencies
βββ public/ # Frontend files
β βββ index.html # Main UI
β βββ styles.css # Styling
β βββ app.js # Client-side JavaScript
βββ uploads/ # Temporary upload directory (auto-created)
βββ downloads/ # Temporary download directory (auto-created)
- Ensure Pandoc is installed:
pandoc --version - Make sure Pandoc is in your system PATH
- Restart the server after installing Pandoc
- Install LaTeX (see Advanced Usage section)
- Try converting to HTML first to verify other conversions work
- Default file size limit is 100MB
- Adjust
maxBufferin server.js for larger files - For very large files, use command-line Pandoc directly
- Change the port in server.js:
const PORT = 3001; - Or set environment variable:
PORT=3001 npm start
Set the PORT environment variable:
PORT=8080 npm startOr edit server.js:
const PORT = process.env.PORT || 8080;Edit the multer configuration in server.js:
limits: { fileSize: 200 * 1024 * 1024 } // 200MBContributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.
MIT License - see LICENSE file for details
- Powered by Pandoc - Universal document converter by John MacFarlane
- Pandoc source code: github.com/jgm/pandoc
- Pandoc - The command-line tool this GUI wraps
- Pandoc Documentation - Complete Pandoc manual
For issues related to:
- This GUI: Open an issue in this repository
- Pandoc itself: See Pandoc's GitHub
- Document conversion questions: Check Pandoc documentation
Note: This is a GUI wrapper around Pandoc. All document conversion is performed by Pandoc locally on your machine. No files are uploaded to external servers.