mirror of
https://github.com/alam00000/bentopdf.git
synced 2025-12-23 22:28:49 -05:00
- Add release type detection to distinguish between version tags and edge builds - Implement separate Docker build steps for release and edge builds with appropriate tags - Add edge and SHA-based image tags for main branch builds - Update nginx configuration to support Vietnamese (vi) language routing - Simplify nginx location block to handle static files and fallback to index.html - Remove javascript-obfuscator and ts-migrate from dependencies - Update README with simplified self-hosting instructions using npx http-server - Consolidate multiple server setup examples into single recommended approach - Update build preview command to use npm run preview instead of npx serve - Improve localization files for German, English, Vietnamese, and Chinese - Update worker files and TypeScript logic files for improved functionality - Enhance PDF tool pages with better structure and internationalization support
496 lines
21 KiB
Markdown
496 lines
21 KiB
Markdown
<p align="center"><img src="public/images/favicon.svg" width="80"></p>
|
||
<h1 align="center">BentoPDF</h1>
|
||
|
||
**BentoPDF** is a powerful, privacy-first, client-side PDF toolkit that is self hostable and allows you to manipulate, edit, merge, and process PDF files directly in your browser. No server-side processing is required, ensuring your files remain secure and private.
|
||
|
||
 [](https://ko-fi.com/alio0) 
|
||
[](https://github.com/sponsors/alam00000)
|
||
|
||

|
||
|
||
---
|
||
|
||
## 📢 Join Us on Discord
|
||
|
||
[](https://discord.gg/Bgq3Ay3f2w)
|
||
|
||
Have questions, feature requests, or want to chat with the community? Join our Discord server!
|
||
|
||
---
|
||
|
||
## 📜 Licensing
|
||
|
||
BentoPDF is dual-licensed:
|
||
|
||
- **AGPL-3.0** for open-source projects where you share your full source code publicly
|
||
- **Commercial License** for proprietary/closed-source applications - **[Get Lifetime License for $49](https://ko-fi.com/s/f32ca4cb75)** (a one-time lifetime purchase, includes all feature updates forever)
|
||
|
||
For more details, see our [Licensing Page](https://bentopdf.com/licensing.html)
|
||
|
||
<hr>
|
||
|
||
## ⭐ Stargazers over time
|
||
|
||
[](https://star-history.com/#alam00000/bentopdf&Date)
|
||
|
||
---
|
||
|
||
## ✨ Why BentoPDF?
|
||
|
||
- **Privacy First**: All processing happens in your browser. Your files are never uploaded to a server, guaranteeing 100% privacy.
|
||
- **No Limits**: Manipulate as many files as you want, as often you want. There are no restrictions or upload limits.
|
||
- **High Performance**: Built with modern web technologies, BentoPDF is fast and efficient, handling even large PDF files with ease.
|
||
- **Completely Free**: BentoPDF is a free and open-source tool for everyone.
|
||
|
||
---
|
||
|
||
## 🛠️ Features / Tools Supported
|
||
|
||
BentoPDF offers a comprehensive suite of tools to handle all your PDF needs.
|
||
|
||
### Organize & Manage PDFs
|
||
|
||
| Tool Name | Description |
|
||
| :------------------------ | :------------------------------------------------------------------------- |
|
||
| **Merge PDFs** | Combine multiple PDF files into one. |
|
||
| **Split PDFs** | Extract specific pages or divide a document into smaller files. |
|
||
| **Organize Pages** | Reorder, duplicate, or delete pages with a simple drag-and-drop interface. |
|
||
| **Extract Pages** | Save a specific range of pages as a new PDF. |
|
||
| **Delete Pages** | Remove unwanted pages from your document. |
|
||
| **Rotate PDF** | Rotate individual or all pages in a document. |
|
||
| **N-Up PDF** | Combine multiple pages onto a single page. |
|
||
| **View PDF** | A powerful, integrated PDF viewer. |
|
||
| **Alternate & Mix pages** | Merge pages by alternating pages from each PDF. |
|
||
| **Posterize PDF** | Split a PDF into multiple smaller pages for print. |
|
||
| **PDF Multi Tool** | Merge, Split, Organize, Delete, Rotate, Add Blank Pages, Extract and Duplicate in an unified interface. |
|
||
| **Add Attachments** | Embed one or more files into your PDF. |
|
||
| **Extract Attachments** | Extract all embedded files from PDF(s) as a ZIP. |
|
||
| **Edit Attachments** | View or remove attachments in your PDF. |
|
||
| **Divide Pages** | Divide pages horizontally or vertically. |
|
||
| **Combine to Single Page**| Stitch all pages into one continuous scroll. |
|
||
| **Add Blank Page** | Insert an empty page anywhere in your PDF. |
|
||
| **Reverse Pages** | Flip the order of all pages in your document. |
|
||
| **View Metadata** | Inspect the hidden properties of your PDF. |
|
||
| **PDFs to ZIP** | Package multiple PDF files into a ZIP archive. |
|
||
| **Compare PDFs** | Compare two PDFs side by side. |
|
||
|
||
### Edit & Modify PDFs
|
||
|
||
| Tool Name | Description |
|
||
| :--------------------- | :---------------------------------------------------------- |
|
||
| **PDF Editor** | A comprehensive editor to modify your PDFs. |
|
||
| **Create Fillable Forms** | Create professional fillable PDF forms with text fields, checkboxes, dropdowns, radio buttons, signatures, and more. Fully compliant with PDF standards for compatibility with all PDF viewers. |
|
||
| **Add Page Numbers** | Easily add page numbers with customizable formatting. |
|
||
| **Add Watermark** | Add text or image watermarks to protect your documents. |
|
||
| **Header & Footer** | Add customizable headers and footers. |
|
||
| **Crop PDF** | Crop specific pages or the entire document. |
|
||
| **Invert Colors** | Invert the colors of your PDF pages for better readability. |
|
||
| **Change Background** | Modify the background color of your PDF. |
|
||
| **Change Text Color** | Change the color of text content within the PDF. |
|
||
| **Fill Forms** | Fill out PDF forms directly in your browser. |
|
||
| **Flatten PDF** | Flatten form fields and annotations into static content. |
|
||
| **Remove Annotations** | Remove comments, highlights, and other annotations. |
|
||
| **Remove Blank Pages** | Auto detect and remove blank pages in a PDF. |
|
||
| **Edit Bookmarks** | Add, Edit, Create, Import and Export PDF Bookmarks. |
|
||
| **Add Stamps** | Add image stamps to your PDF using the annotation toolbar. |
|
||
| **Table of Contents** | Generate a table of contents page from PDF bookmarks. |
|
||
| **Redact Content** | Permanently remove sensitive content from your PDFs. |
|
||
|
||
### Convert to PDF
|
||
|
||
| Tool Name | Description |
|
||
| :------------------ | :-------------------------------------------------------------- |
|
||
| **Image to PDF** | Convert JPG, PNG, WebP, SVG, BMP, HEIC, and TIFF images to PDF. |
|
||
| **JPG to PDF** | Convert JPG images to PDF. |
|
||
| **PNG to PDF** | Convert PNG images to PDF. |
|
||
| **WebP to PDF** | Convert WebP images to PDF. |
|
||
| **SVG to PDF** | Convert SVG images to PDF. |
|
||
| **BMP to PDF** | Convert BMP images to PDF. |
|
||
| **HEIC to PDF** | Convert HEIC images to PDF. |
|
||
| **TIFF to PDF** | Convert TIFF images to PDF. |
|
||
| **Markdown to PDF** | Convert `.md` files into professional PDF documents. |
|
||
| **Text to PDF** | Convert plain text files into a PDF. |
|
||
| **JSON to PDF** | Convert JSON to PDF. |
|
||
|
||
### Convert from PDF
|
||
|
||
| Tool Name | Description |
|
||
| :------------------- | :----------------------------------------------------------------------------- |
|
||
| **PDF to Image** | Convert PDF pages to JPG, PNG, WebP, BMP, or TIFF formats. |
|
||
| **PDF to JPG** | Convert each PDF page into a JPG image. |
|
||
| **PDF to PNG** | Convert each PDF page into a PNG image. |
|
||
| **PDF to WebP** | Convert each PDF page into a WebP image. |
|
||
| **PDF to BMP** | Convert each PDF page into a BMP image. |
|
||
| **PDF to TIFF** | Convert each PDF page into a TIFF image. |
|
||
| **PDF to Greyscale** | Convert a color PDF into a black-and-white version. |
|
||
| **OCR PDF** | Make scanned PDFs searchable and copyable using Optical Character Recognition. |
|
||
| **PDF to JSON** | Convert PDF files to JSON format. |
|
||
|
||
### Secure & Optimize PDFs
|
||
|
||
| Tool Name | Description |
|
||
| :--------------------- | :----------------------------------------------------------------- |
|
||
| **Compress PDF** | Reduce file size while maintaining quality. |
|
||
| **Repair PDF** | Attempt to repair and recover data from a corrupted PDF. |
|
||
| **Encrypt PDF** | Add a password to protect your PDF from unauthorized access. |
|
||
| **Decrypt PDF** | Remove password protection from a PDF (password required). |
|
||
| **Change Permissions** | Set or modify user permissions for printing, copying, and editing. |
|
||
| **Sign PDF** | Add your digital signature to a document. |
|
||
| **Redact Content** | Permanently remove sensitive content from your PDFs. |
|
||
| **Edit Metadata** | View and modify PDF metadata (author, title, keywords, etc.). |
|
||
| **Remove Metadata** | Strip all metadata from your PDF for privacy. |
|
||
| **Linearize PDF** | Optimize PDF for fast web view. |
|
||
| **Sanitize PDF** | Remove potentially unwanted or malicous files from PDF. |
|
||
| **Fix Page Size** | Standardize all pages to a uniform size. |
|
||
| **Page Dimensions** | Analyze page size, orientation, and units. |
|
||
| **Remove Restrictions**| Remove password protection and security restrictions associated with digitally signed PDF files. |
|
||
|
||
---
|
||
|
||
## 🌍 Translations
|
||
|
||
BentoPDF is available in multiple languages:
|
||
|
||
| Language | Status |
|
||
|----------|--------|
|
||
| English | [](public/locales/en/common.json) |
|
||
| German | [](public/locales/de/common.json) |
|
||
| Vietnamese | [](public/locales/vi/common.json) |
|
||
|
||
Want to help translate BentoPDF into your language? Check out our [Translation Guide](TRANSLATION.md)!
|
||
|
||
---
|
||
|
||
## 🚀 Getting Started
|
||
|
||
You can run BentoPDF locally for development or personal use.
|
||
|
||
### Prerequisites
|
||
|
||
- [Node.js](https://nodejs.org/) (v18 or higher recommended)
|
||
- [npm](https://www.npmjs.com/) (or yarn/pnpm)
|
||
- [Docker](https://www.docker.com/) & [Docker Compose](https://docs.docker.com/compose/install/) (for containerized setup)
|
||
|
||
### 🚀 Quick Start with Docker
|
||
|
||
[](https://zeabur.com/templates/K4AU2B)
|
||
|
||
You can run BentoPDF directly from Docker Hub or GitHub Container Registry without cloning the repository:
|
||
|
||
You can also watch the video on how to set it up 👉
|
||
[BentoPDF Docker Setup](https://drive.google.com/file/d/1C4eJ2nqeaH__1Tlad-xuBHaF2Ha4fSBf/view?usp=drive_link)
|
||
|
||
**Using Docker Hub:**
|
||
|
||
```bash
|
||
docker run -p 3000:8080 bentopdf/bentopdf:latest
|
||
```
|
||
|
||
**Using GitHub Container Registry:**
|
||
|
||
```bash
|
||
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
||
```
|
||
|
||
Open your browser at: http://localhost:3000
|
||
|
||
This is the fastest way to try BentoPDF without setting up a development environment.
|
||
|
||
### 🏠 Self-Hosting
|
||
|
||
Since BentoPDF is fully client-side, all processing happens in the user's browser and no server-side processing is required. This means you can host BentoPDF as simple static files on any web server or hosting platform.
|
||
|
||
**Download from Releases (Recommended):**
|
||
|
||
The easiest way to self-host is to download the pre-built distribution file from our [GitHub releases](https://github.com/alam00000/bentopdf/releases). Each release includes a `dist-{version}.zip` file that contains all necessary files for self-hosting.
|
||
|
||
1. Go to [BentoPDF Releases](https://github.com/alam00000/bentopdf/releases)
|
||
2. Download the latest `dist-{version}.zip` file
|
||
3. Extract the zip file
|
||
4. Serve the extracted folder with your preferred web server
|
||
|
||
**Serve the extracted folder (requires Node.js):**
|
||
|
||
```bash
|
||
# Navigate to the extracted folder
|
||
cd dist-1.7.3 # Replace with your version
|
||
|
||
# Start a local server
|
||
npx http-server -c-1
|
||
```
|
||
|
||
The website will be accessible at: `http://localhost:8080/`
|
||
|
||
> **Note:** The `-c-1` flag disables caching for development.
|
||
|
||
**Build from Source (Advanced):**
|
||
|
||
If you prefer to build from source:
|
||
|
||
```bash
|
||
# Clone the repository
|
||
git clone https://github.com/alam00000/bentopdf.git
|
||
cd bentopdf
|
||
|
||
# Install dependencies
|
||
npm install
|
||
|
||
# Build the project
|
||
npm run build
|
||
|
||
# Package the distribution for hosting (optional)
|
||
npm run package
|
||
|
||
# Preview the build locally
|
||
npm run preview
|
||
|
||
# The website will be accessible at: http://localhost:4173/
|
||
|
||
```
|
||
|
||
**Subdirectory Hosting:**
|
||
|
||
BentoPDF can also be hosted from a subdirectory (e.g., `example.com/tools/bentopdf/`):
|
||
|
||
```bash
|
||
|
||
# Example:
|
||
# 1. Build the app with the specific BASE_URL. BASE_URL must have a trailing and leading slash. The BASE_URL can be any url of your choice. Here we are using /tools/bentopdf/ as an example.
|
||
|
||
BASE_URL=/tools/bentopdf/ npm run build
|
||
|
||
# 2. Create the nested directory structure inside serve-test (or any folder of your choice for local testing. In case of production, create the nested directory structure inside the root directory)
|
||
mkdir -p serve-test/tools/bentopdf
|
||
|
||
# 3. Copy all files from the 'dist' folder into that nested directory
|
||
cp -r dist/* serve-test/tools/bentopdf/
|
||
|
||
# 4. Serve the 'serve-test' folder
|
||
npx serve serve-test
|
||
```
|
||
|
||
The website can be accessible at: ```http://localhost:3000/tools/bentopdf/```
|
||
|
||
The `npm run package` command creates a `dist-{version}.zip` file that you can use for self-hosting.
|
||
|
||
**Docker Subdirectory Deployment:**
|
||
|
||
BentoPDF's Docker image also supports the `BASE_URL` build argument for subdirectory deployments:
|
||
|
||
```bash
|
||
# Build for subdirectory deployment
|
||
docker build --build-arg BASE_URL=/bentopdf/ -t bentopdf .
|
||
|
||
# Run the container
|
||
docker run -p 3000:8080 bentopdf
|
||
|
||
# The app will be accessible at http://localhost:3000/bentopdf/
|
||
```
|
||
|
||
**Combined with Simple Mode:**
|
||
|
||
```bash
|
||
# Build with both BASE_URL and SIMPLE_MODE
|
||
docker build \
|
||
--build-arg BASE_URL=/tools/pdf/ \
|
||
--build-arg SIMPLE_MODE=true \
|
||
-t bentopdf-simple .
|
||
|
||
docker run -p 3000:8080 bentopdf-simple
|
||
```
|
||
|
||
> **Important**:
|
||
> - Always include trailing slashes in `BASE_URL` (e.g., `/bentopdf/` not `/bentopdf`)
|
||
> - The default value is `/` for root deployment
|
||
|
||
### 🚀 Run with Docker Compose (Recommended)
|
||
|
||
For a more robust setup with auto-restart capabilities:
|
||
|
||
1. **Download the repo and create a `docker-compose.yml` file or use the one given in repo**:
|
||
|
||
```yaml
|
||
services:
|
||
bentopdf:
|
||
image: bentopdf/bentopdf:latest
|
||
container_name: bentopdf
|
||
ports:
|
||
- '3000:8080'
|
||
restart: unless-stopped
|
||
```
|
||
|
||
2. **Start the application**:
|
||
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
The application will be available at `http://localhost:3000`.
|
||
|
||
### 🏢 Simple Mode for Internal Use
|
||
|
||
For organizations that want a clean, distraction-free interface focused solely on PDF tools, BentoPDF supports a **Simple Mode** that hides all branding and marketing content.
|
||
|
||
**What Simple Mode does:**
|
||
|
||
- Hides navigation, hero section, features, FAQ, testimonials, and footer
|
||
- Shows only the essential PDF tools
|
||
- Updates page title to "PDF Tools"
|
||
- Perfect for internal company tools and educational institutions
|
||
|
||
For more details, see [SIMPLE_MODE.md](SIMPLE_MODE.md).
|
||
|
||
### 🔒 Security Features
|
||
|
||
BentoPDF runs as a non-root user using nginx-unprivileged for enhanced security:
|
||
|
||
- **Non-Root Execution**: Container runs with minimal privileges using nginx-unprivileged
|
||
- **Port 8080**: Uses high port number to avoid requiring root privileges
|
||
- **Security Best Practices**: Follows Principle of Least Privilege
|
||
|
||
#### Basic Usage
|
||
|
||
```bash
|
||
docker build -t bentopdf .
|
||
docker run -p 8080:8080 bentopdf
|
||
```
|
||
|
||
For detailed security configuration, see [SECURITY.md](SECURITY.md).
|
||
|
||
### 📦 Version Management
|
||
|
||
BentoPDF supports semantic versioning with multiple Docker tags available on both Docker Hub and GitHub Container Registry:
|
||
|
||
**Docker Hub:**
|
||
|
||
- **Latest**: `bentopdf/bentopdf:latest`
|
||
- **Specific Version**: `bentopdf/bentopdf:1.0.0`
|
||
- **Version with Prefix**: `bentopdf/bentopdf:v1.0.0`
|
||
|
||
**GitHub Container Registry:**
|
||
|
||
- **Latest**: `ghcr.io/alam00000/bentopdf:latest`
|
||
- **Specific Version**: `ghcr.io/alam00000/bentopdf:1.0.0`
|
||
- **Version with Prefix**: `ghcr.io/alam00000/bentopdf:v1.0.0`
|
||
|
||
#### Quick Release
|
||
|
||
```bash
|
||
# Release a patch version (0.0.1 → 0.0.2)
|
||
npm run release
|
||
|
||
# Release a minor version (0.0.1 → 0.1.0)
|
||
npm run release:minor
|
||
|
||
# Release a major version (0.0.1 → 1.0.0)
|
||
npm run release:major
|
||
```
|
||
|
||
For detailed release instructions, see [RELEASE.md](RELEASE.md).
|
||
|
||
### 🚀 Development Setup
|
||
|
||
#### Option 1: Run with npm
|
||
|
||
1. **Clone the Repository**:
|
||
|
||
```bash
|
||
git clone https://github.com/alam00000/bentopdf.git
|
||
cd bentopdf
|
||
```
|
||
|
||
2. **Install Dependencies**:
|
||
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
3. **Run the Development Server**:
|
||
```bash
|
||
npm run dev
|
||
```
|
||
The application will be available at `http://localhost:5173`.
|
||
|
||
#### Option 2: Build and Run with Docker Compose
|
||
|
||
1. **Clone the Repository**:
|
||
|
||
```bash
|
||
git clone https://github.com/alam00000/bentopdf.git
|
||
cd bentopdf
|
||
```
|
||
|
||
2. **Run with Docker Compose**:
|
||
|
||
```bash
|
||
docker-compose -f docker-compose.dev.yml up -d
|
||
```
|
||
|
||
The application will be available at `http://localhost:3000`.
|
||
|
||
> **Note:** After making any local changes to the code, rebuild the Docker image using:
|
||
|
||
```bash
|
||
docker-compose -f docker-compose.dev.yml up --build -d
|
||
```
|
||
|
||
This ensures your latest changes are applied inside the container.
|
||
|
||
---
|
||
|
||
## 🛠️ Tech Stack & Background
|
||
|
||
BentoPDF was originally built using **HTML**, **CSS**, and **vanilla JavaScript**. As the project grew, it was migrated to a modern stack for better maintainability and scalability:
|
||
|
||
- **Vite**: A fast build tool for modern web development.
|
||
- **TypeScript**: For type safety and an improved developer experience.
|
||
- **Tailwind CSS**: For rapid and consistent UI development.
|
||
|
||
> **Note:** Some parts of the codebase still use legacy structures from the original implementation. Contributors should expect gradual updates as testing and refactoring continue.
|
||
|
||
---
|
||
|
||
## 🗺️ Roadmap
|
||
|
||
### Planned Features:
|
||
|
||
- **HTML to PDF**: Convert HTML files or web pages into PDF documents.
|
||
- **Markdown to PDF**: Enhanced support for converting `.md` files to PDF.
|
||
- **Convert to PDF/A**: Convert PDFs to the PDF/A archival format.
|
||
- **Edit PDF Content**: Directly edit text and other content within your PDF.
|
||
- **PDF to Office**: Converts PDF files into editable Word, Excel, and PowerPoint formats.
|
||
- **Office to PDF**: Converts Word, Excel, and PowerPoint documents into optimized PDFs.
|
||
|
||
Contributions and discussions on the roadmap are welcome! Join the conversation via [Discord](https://discord.gg/Bgq3Ay3f2w).
|
||
|
||
---
|
||
|
||
## 🤝 Contributing
|
||
|
||
We welcome contributions from the community! Here's how you can get started:
|
||
|
||
1. **Fork the repository** and create your branch from `main`.
|
||
2. Follow the **Getting Started** steps to set up your local environment.
|
||
3. Make your changes and commit them with a clear message.
|
||
4. **Open a Pull Request** and describe the changes you've made.
|
||
|
||
Have an idea for a new tool or an improvement? [Open an issue](https://github.com/alam00000/bentopdf/issues) to discuss it first.
|
||
|
||
---
|
||
|
||
## Special Thanks
|
||
|
||
BentoPDF wouldn't be possible without the amazing open-source tools and libraries that power it. We'd like to extend our heartfelt thanks to the creators and maintainers of:
|
||
|
||
- **[PDFLib.js](https://pdf-lib.js.org/)** – For enabling powerful client-side PDF manipulation.
|
||
- **[PDF.js](https://mozilla.github.io/pdf.js/)** – For the robust PDF rendering engine in the browser.
|
||
- **[PDFKit](https://pdfkit.org/)** – For creating and editing PDFs with ease.
|
||
- **[EmbedPDF](https://github.com/embedpdf/embed-pdf-viewer)** – For seamless PDF editing in pure JS.
|
||
- **[Cropper.js](https://fengyuanchen.github.io/cropperjs/)** – For intuitive image cropping functionality.
|
||
- **[Vite](https://vitejs.dev/)** – For lightning-fast development and build tooling.
|
||
- **[Tailwind CSS](https://tailwindcss.com/)** – For rapid, flexible, and beautiful UI styling.
|
||
- **[qpdf](https://github.com/qpdf/qpdf)** and **[qpdf-wasm](https://github.com/neslinesli93/qpdf-wasm)**– A powerful command-line tool and library for inspecting, repairing, and transforming PDF file ported to wasm
|
||
- **[cpdf](https://www.coherentpdf.com/)** – For content preserving pdf operations.
|
||
|
||
Your work inspires and empowers developers everywhere. Thank you for making open-source amazing!
|