huoshui-pdf-converter 1.0.4
High-quality PDF ↔ Markdown converter with MCP integration and Unicode support
License: MIT
Requires Python: >=3.10
Keywords: chinese, cjk, converter, markdown, mcp, pdf, unicode

# 活水 PDF 转换器 (Huoshui PDF Converter)

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
[![MCP](https://img.shields.io/badge/MCP-Compatible-green.svg)](https://github.com/modelcontextprotocol/spec)
[![PyPI version](https://badge.fury.io/py/huoshui-pdf-converter.svg)](https://pypi.org/project/huoshui-pdf-converter/)

A high-quality, cross-platform PDF ↔ Markdown converter implemented as an MCP (Model Context Protocol) server. Supports bidirectional conversion with full Unicode/CJK character support.

## Features

### Core Capabilities

- **PDF → Markdown**: Extract text and images with layout preservation
- **Markdown → PDF**: Generate beautiful PDFs with multiple rendering engines
- **Unicode Support**: Full support for Chinese, Japanese, Korean, and other Unicode characters
- **Cross-Platform**: Works on Windows, macOS, and Linux
- **MCP Integration**: Use with Claude Desktop or any MCP-compatible client

### Technical Features

- **Pure Python**: No external system dependencies required
- **Automatic Font Detection**: Finds and uses system Unicode fonts
- **Smart Engine Selection**: Automatically switches engines based on content
- **Comprehensive Error Handling**: Graceful degradation and detailed logging
- **Async Architecture**: Non-blocking operations for better performance

## Installation

### From MCP Registry (Recommended)

This server is available in the Model Context Protocol Registry. Install it using your MCP client.

mcp-name: io.github.huoshuiai42/huoshui-pdf-converter

### As a Python Package

```bash
pip install huoshui-pdf-converter
```

Or using `uv` (recommended):

```bash
uv pip install huoshui-pdf-converter
```

### As an MCP Server

Add to your Claude Desktop configuration:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
**Linux**: `~/.config/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "huoshui-pdf-converter": {
      "command": "uvx",
      "args": ["huoshui-pdf-converter"],
      "env": {}
    }
  }
}
```

Or if you prefer to use a specific Python environment:

```json
{
  "mcpServers": {
    "huoshui-pdf-converter": {
      "command": "python",
      "args": ["-m", "huoshui_pdf_converter.server"],
      "env": {}
    }
  }
}
```

## Usage

### Command Line Interface

```bash
# Convert PDF to Markdown
huoshui-pdf pdf-to-md input.pdf output.md

# Convert Markdown to PDF
huoshui-pdf md-to-pdf input.md output.pdf

# With options
huoshui-pdf md-to-pdf input.md output.pdf --page-size A4 --margin 2cm --font-size 12
```

### As a Python Library

```python
import asyncio
from huoshui_pdf_converter import PDFToMarkdownConverter, MarkdownToPDFConverter

async def main():
    # PDF to Markdown
    pdf_converter = PDFToMarkdownConverter()
    result = await pdf_converter.convert(
        pdf_path="input.pdf",
        output_path="output.md",
        extract_images=True,
        preserve_formatting=True
    )

    # Markdown to PDF
    md_converter = MarkdownToPDFConverter()
    result = await md_converter.convert(
        markdown_path="input.md",
        output_path="output.pdf",
        page_size="A4",
        margin="2cm",
        font_size=12
    )

asyncio.run(main())
```

### MCP Tools

When used as an MCP server, the following tools are available:

1. **pdf_to_markdown**: Convert PDF files to Markdown

   ```json
   {
     "pdf_path": "path/to/input.pdf",
     "output_path": "path/to/output.md",
     "extract_images": true,
     "preserve_formatting": true
   }
   ```

2. **markdown_to_pdf**: Convert Markdown files to PDF

   ```json
   {
     "markdown_path": "path/to/input.md",
     "output_path": "path/to/output.pdf",
     "page_size": "A4",
     "margin": "2cm",
     "font_size": 12
   }
   ```

3. **list_supported_formats**: Get supported formats and engines
4. **validate_file**: Validate input files before conversion

## Supported Formats

### Input Formats

- **PDF**: All standard PDF files (PDF 1.0 - 1.7)
- **Markdown**: CommonMark and GitHub Flavored Markdown

### Output Options

- **Page Sizes**: A4, A3, Letter, Legal
- **Margins**: Customizable (e.g., "1cm", "0.5in")
- **Font Sizes**: Any size in points
- **Images**: PNG, JPEG extraction from PDFs

## Unicode and Font Support

The converter automatically detects and uses appropriate fonts for different languages:

- **macOS**: Arial Unicode, PingFang SC, STHeiti
- **Windows**: Microsoft YaHei, SimSun, Arial Unicode MS
- **Linux**: Noto Sans CJK, Source Han Sans, WenQuanYi

## Architecture

### Conversion Engines

**PDF → Markdown**

- PyMuPDF (MuPDF): High-quality text and image extraction

**Markdown → PDF**

- ReportLab: Best Unicode support, cross-platform compatibility
- xhtml2pdf: Good HTML/CSS rendering (fallback)
- fpdf2: Basic PDF generation (last resort)

### Engine Selection Logic

1. Detects CJK characters → Uses ReportLab
2. Complex formatting → Uses xhtml2pdf
3. Basic documents → Uses any available engine

## Development

### Setup Development Environment

```bash
# Clone the repository
git clone https://github.com/yourusername/huoshui-pdf-converter.git
cd huoshui-pdf-converter

# Install dependencies
uv pip install -e ".[dev]"

# Run tests
python test_converter.py
```

### Project Structure

```
huoshui-pdf-converter/
├── huoshui_pdf_converter/
│   ├── __init__.py
│   ├── server.py           # MCP server implementation
│   ├── pdf_converter.py    # PDF to Markdown converter
│   └── markdown_converter.py # Markdown to PDF converter
├── pyproject.toml
├── README.md
├── LICENSE
└── test_converter.py
```

## Troubleshooting

### Common Issues

1. **Chinese characters not displaying**:

   - Ensure Arial Unicode or similar fonts are installed
   - The converter will automatically detect and use appropriate fonts

2. **Import errors**:

   - Install all dependencies: `pip install huoshui-pdf-converter[all]`

3. **MCP connection issues**:
   - Check Claude Desktop logs
   - Ensure Python is in your PATH

### Logging

Enable debug logging:

```python
import logging
logging.basicConfig(level=logging.DEBUG)
```

## Contributing

Contributions are welcome! Please:

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Acknowledgments

- Built with [FastMCP](https://github.com/jlowin/fastmcp) for Model Context Protocol support
- Uses [PyMuPDF](https://github.com/pymupdf/PyMuPDF) for PDF parsing
- Uses [ReportLab](https://www.reportlab.com/) for PDF generation
- Inspired by the need for better PDF ↔ Markdown conversion tools

## Support

- **Issues**: [GitHub Issues](https://github.com/yourusername/huoshui-pdf-converter/issues)
- **Discussions**: [GitHub Discussions](https://github.com/yourusername/huoshui-pdf-converter/discussions)
- **Email**: your.email@example.com