Skip to content

πŸ“„ πŸ”„ Doxswap is a Laravel package for seamless document conversion using LibreOffice. Effortlessly convert DOCX, PDF, ODT, and more with a simple, elegant API. Supports Laravel storage, configurable settings, and secure file handling.

License

Notifications You must be signed in to change notification settings

Blaspsoft/doxswap

Repository files navigation

Onym Icon

GitHub Workflow Status (main) Total Downloads Latest Version License

Doxswap

A Laravel package for seamless document and image format conversions. Transform between various formats like DOCX -> PDF, HTML -> PDF, PNG -> WEBP, and more popular formats using a simple, elegant API. Powered by LibreOffice for documents and ImageMagick for image processing.

πŸš€ Features

  • πŸ“„ Multiple Format Support – Convert between documents (DOCX, XLSX, ODT) and images (PNG, JPG, WEBP) with ease
  • πŸš€ Simple API – Easy-to-use interface for all conversion operations
  • πŸ’Ύ Laravel Storage Integration – Works seamlessly with Laravel's filesystem drivers
  • ⚑ Efficient Processing – Optimized conversion using LibreOffice and ImageMagick engines
  • πŸ” Conversion Tracking – Detailed results including duration and file paths
  • πŸ”’ Secure File Handling – Safe and secure file processing with proper cleanup
  • βš™οΈ Configurable Settings – Customize paths, storage disks, and conversion options
  • πŸ›‘οΈ Error Handling – Robust exception handling for unsupported formats and conversions

Installation

You can install the package via composer:

composer require blaspsoft/doxswap

You can publish the config file with:

php artisan vendor:publish --tag="doxswap-config"

Overview

The config/doxswap.php file includes:

πŸ’Ύ Storage & Cleanup

  • input_disk: Where to read files from (default: 'public')
  • output_disk: Where to save converted files (default: 'public')
  • perform_cleanup: Delete input files after conversion (default: false)

πŸ“ File Naming

Configure how output files are named using different strategies:

'filename' => [
    // Strategy: 'original', 'random', or 'timestamp'
    'strategy' => 'original',

    // Naming options
    'options' => [
        'length' => 24,          // Length for random names
        'prefix' => '',          // Add prefix to filename
        'suffix' => '',          // Add suffix to filename
        'separator' => '_',      // Separator for components
        'format' => 'YmdHis',    // Format for timestamp strategy
    ],
]

πŸ› οΈ Conversion Drivers

Configure paths for conversion tools:

'drivers' => [
    'libreoffice_path' => env('LIBRE_OFFICE_PATH', '/usr/bin/soffice'),
]

Default LibreOffice paths by OS:

  • 🐧 Linux: /usr/bin/soffice
  • 🍎 macOS: /Applications/LibreOffice.app/Contents/MacOS/soffice
  • πŸͺŸ Windows: C:\Program Files\LibreOffice\program\soffice.exe

πŸ“„ File Types

Supports various document formats including:

  • Documents: DOC, DOCX, ODT, RTF, TXT
  • Spreadsheets: XLS, XLSX, ODS, CSV
  • Presentations: PPT, PPTX, ODP
  • Images: JPG, PNG, SVG, BMP, TIFF, WEBP, GIF
  • Web: HTML, XML
  • Other: PDF

Usage

$result = Doxswap::convert('sample.docx', 'pdf');

/**
 * Returns a ConversionResult object with the following properties:
 *
 * @property string $inputFilename   The original input filename
 * @property string $inputFilePath   The full path to the input file
 * @property string $outputFilename  The converted output filename
 * @property string $outputFilePath  The full path to the converted output file
 * @property string $toFormat       The format the file was converted to (e.g. 'pdf')
 * @property string $duration       The time taken for conversion (e.g. "2.21 sec")
 * @property float  $startTime      Unix timestamp of when conversion started
 * @property float  $endTime        Unix timestamp of when conversion completed
 * @property string $inputDisk      The Laravel storage disk used for input
 * @property string $outputDisk     The Laravel storage disk used for output
 */

Requirements

LibreOffice & ImageMagick

This package requires LibreOffice, ImageMagick, and Potrace to be installed on your system. Here's how to install them:

Ubuntu/Debian

sudo apt update
sudo apt install libreoffice imagemagick potrace

macOS

brew install libreoffice imagemagick potrace

Windows

choco install libreoffice imagemagick potrace

Docker

If you're using Docker, you can add the required dependencies to your container:

# Ubuntu/Debian based
RUN apt-get update && apt-get install -y libreoffice imagemagick potrace

# Alpine based
RUN apk add --no-cache libreoffice imagemagick potrace

PHP Requirements

  • PHP >= 8.1
  • ext-fileinfo
  • ext-imagick
  • Laravel >= 9.0

πŸ” Supported Conversions by Category

πŸ“ Documents

From Supported Conversions
DOCX PDF βœ…βœ…, ODT, RTF, TXT, HTML, XML, EPUB
DOC PDF βœ…βœ…, DOCX, ODT, RTF, TXT, HTML, XML, EPUB
ODT PDF, DOCX, RTF, TXT, HTML, XML
RTF PDF, DOCX, ODT, TXT, HTML, XML
TXT PDF, DOCX, ODT, HTML, XML
HTML PDF, ODT, TXT
XML PDF, DOCX, ODT, TXT, HTML

πŸ“Š Spreadsheets

From Supported Conversions
XLSX PDF βœ…βœ…, ODS, CSV
XLS PDF, XLSX, ODS, CSV
ODS PDF, XLSX, CSV
CSV PDF, XLSX, ODS

🎯 Presentations

From Supported Conversions
PPTX PDF βœ…βœ…, ODP
PPT PDF, PPTX, ODP
ODP PDF, PPTX

πŸ–ΌοΈ Images

From Supported Conversions
PNG PDF βœ…, JPG, SVG, TIFF, WEBP, GIF, BMP
JPG PDF βœ…, PNG, SVG, TIFF, WEBP, GIF, BMP
SVG PDF, PNG, JPG, TIFF, WEBP, GIF, BMP
BMP PDF, PNG, JPG, SVG, TIFF, WEBP, GIF
TIFF PDF, PNG, JPG, SVG, WEBP, GIF, BMP
WEBP PDF, PNG, JPG, SVG, TIFF, GIF, BMP
GIF PDF, PNG, JPG, SVG, TIFF, WEBP, BMP

Legend πŸ”

  • βœ…βœ… = Common high-priority conversion
  • βœ… = Popular supported format
  • (unlisted) = Conversion not supported

Note: Document conversions are performed using LibreOffice in headless mode, while image format conversions utilize ImageMagick πŸš€

🀝 Sponsors

If you find this package helpful, please consider sponsoring the development:

πŸš€ Become a GitHub Sponsor

License

Blasp is open-sourced software licensed under the MIT license.

About

πŸ“„ πŸ”„ Doxswap is a Laravel package for seamless document conversion using LibreOffice. Effortlessly convert DOCX, PDF, ODT, and more with a simple, elegant API. Supports Laravel storage, configurable settings, and secure file handling.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages