MQLPDF/README.md
SandroBegashvil 007391b21d
2026-09-07 15:44:54 +04:00

5.5 KiB

MQLPDF — a PDF creation library in pure MQL5

Source code for the mql5.com article series "Building a PDF Creation Library in MQL5".

Part 1: https://www.mql5.com/en/articles/24094

Part 2: https://www.mql5.com/en/articles/24314

MQLPDF is developed step by step throughout the series, starting with the fundamentals of the PDF file format and gradually building the components needed to create complete PDF documents directly from MQL5.

The goal is not to wrap an external PDF library or rely on third-party tools. Instead, the series explores how a PDF document is structured internally and implements the required pieces in pure MQL5, eventually forming a reusable library for generating PDF files.


Which version do I want?

Use the release that matches the article you are reading. Each part of the series has its own release, frozen at the state explained in that article. This means you can follow the implementation step by step without finding code that depends on concepts introduced only in later parts.

Release Article What it adds
part-01 Part 1 — Writing a PDF by Hand Review the PDF structure and write the first PDFs
part-02 Part 2 — Why PDFs Break Learn how a viewer opens a PDF backwards
... ... Later parts will be added as they are published

Later parts are added to this table as they are published. The main branch is always the newest state of the library and may therefore be ahead of the latest published article.


Installing

Download the release archive that matches the article you are reading and extract it over your terminal's data folder (File → Open Data Folder in MetaTrader 5). The archive already has the correct directory structure, so the files land where they belong:

MQL5/
├── Scripts/
│    └── MQLPDF/
│        ├── Part 01/
│        │   └── Demo01_HelloPdf.mq5    // Write a simple PDF file by Hand
│        └── Part 02/
│            ├── Demo02_BreakIt.mq5     // Create multiple PDF files (valid and invalid files)
│            └── Demo02_Validate.mq5    // Check the validation of the files
│
└── Include/
     └── MQLPDF/
         ├── HelloPdf.mqh                // To create simple PDF file (not in final library)
         └── PdfValidate.mqh             // To check the validation of PDF file and list the problems

Then open the demo for the article in MetaEditor, compile it with F7, and run it as described in the corresponding article.

Library headers are included in the usual way:

#include <MQLPDF/...>

Each release contains only the library components and demonstration files needed for that stage of the series, allowing the codebase to evolve alongside the articles.


What is this series building?

A PDF file may look like a single document from the user's perspective, but internally it is a structured collection of objects, streams, references and other components. MQLPDF is built by exploring and implementing these concepts step by step.

As the series progresses, the library will gradually grow from low-level PDF file construction into a higher-level interface for creating documents.

The implementation may eventually cover concepts such as:

  • PDF file and document structure
  • Objects and indirect references
  • Cross-reference information
  • Pages and page trees
  • Content streams
  • Text and fonts
  • Drawing operations and graphics
  • Images
  • Tables and higher-level document elements
  • Document layout and reusable components

The exact scope of each release follows the progression of the article series.


Scope

MQLPDF is a native MQL5 PDF generation library. Its purpose is to allow MQL5 programs to create PDF documents directly from code while keeping the underlying PDF structure accessible and understandable.

The project is developed as both a practical library and an educational journey. Rather than treating PDF generation as a black box, the series explains the format and the implementation decisions behind the code.

The final library is intended to provide progressively higher-level tools for creating documents, while the lower-level components remain available for users who need more control over the generated PDF.


Removing it

All library files and demonstration programs are installed inside the terminal's data folder. Removing the MQLPDF folders from MQL5/Include/ and MQL5/Scripts/ removes the installed source code and demos.

Generated PDF files are handled by the corresponding demonstration or user program and may need to be removed separately if they are no longer required.


Copyright 2026, Sandro Begashvili

You are free to use this code in your own projects and to extend it, commercially or otherwise. The only thing asked in return is attribution: keep a mention of the author's mql5.com profile in the source you derive from it.

If you build something with it, I would genuinely like to see it — the Telegram link above is the fastest way to reach me.