Borb

Latest version: v2.1.25

Safety actively analyzes 706267 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 3 of 12

2.1.11

:mega: borb release notes

This release is a feature release:
- Added `Equation` to the `LayoutElement` hierarchy
- `Equation` allows you to easily add mathematical expressions to a PDF
- Determine the `font`, `font_size`, `font_color` and many other attributes
- `Equation` behaves just like any other `LayoutElement`

- Fix minor issue in `SimpleFindReplace`

- Fix minor issue in `Image` (present for `Image` objects with mode `LA`)

- Fix `vertical_alignment` for `Table` implementations
- `vertical_alignment` is now relative to the `Table` rather than to the `Page`
- This approach does incur the cost of having to determine the tallest `LayoutElement` in the row

2.1.10

:mega: borb release notes

This release is a **beauty pageant** release:
- Classes have been split in 3 parts:
- `CONSTRUCTOR`
- `PRIVATE`
- `PUBLIC`
- :+1: **All** class-methods in the `borb` package have been sorted (in their respective part)
- :+1: **All** public methods have been documented
- :+1: The vast majority of `mypy` warnings have been taken care of

Although the majority of the work has been done, this will always be an ongoing task.
As new development adds code, I may need this kind of release from time to time to ensure the quality of the code
stays up.

This release includes the following **minor fixes**:
- minor fix in `DisconnectedShape` (method names related to scaling were not analoguous to `ConnectedShape`)

2.1.8

:mega: borb release notes

This release is a bugfix release.

2.1.7

:mega: borb release notes

This release is a feature release.

- Introducing `SimpleFindReplace` which enables you to find and replace text in a PDF
- For examples on how to use it, check the examples repository
- You can also check the `tests` directory in this project


This release fixes inconsistencies in `toolkit`

Most of the classes in the following table implement `EventListener` and are part of the package `toolkit`.
They have a class method (which you can call if you instantiate them and add them as `EventListener` to a PDF).
They also have a static method that you can call. The class method and static method typically return the same type/thing.

The static method has the advantage that it allows you to work with a `Document`, whereas the class method only works with a PDF that is being loaded.
Or, to put it simply, the static method can be used at any point in the life-cycle of `Document`, whereas the class method can only be used when reading an existing PDF.

This table gives you an overview of the available classes in `toolkit` and their methods:

| class | class method | static method | status |
|-----------------------------------|----------------------------|--------------------------------------|--------------------|
| `ColorExtraction` | `get_color` | `get_color_from_pdf` | :heavy_check_mark: |
| `FontExtraction` | `get_fonts` | | |
| `FontExtraction` | `get_font_names` | | |
| `HTMLToPDF` | | `convert_html_to_layout_element` | :heavy_check_mark: |
| `HTMLToPDF` | | `convert_html_to_pdf` | :heavy_check_mark: |
| `ImageExtraction` | `get_images` | `get_images_from_pdf` | :heavy_check_mark: |
| `MarkdownToPDF` | | `convert_markdown_to_layout_element` | :heavy_check_mark: |
| `MarkdownToPDF` | | `convert_markdown_to_pdf` | :heavy_check_mark: |
| `PDFToJPG` | `convert_to_jpg` | `convert_pdf_to_jpg` | :heavy_check_mark: |
| `PDFToMP3` | `convert_to_mp3` | `convert_pdf_to_mp3` | :heavy_check_mark: |
| `PDFToSVG` | `convert_to_svg` | `convert_pdf_to_svg` | :heavy_check_mark: |
| `RegularExpressionTextExtraction` | `get_matches` | `get_matches_for_pdf` | :heavy_check_mark: |
| `SimpleLineOfTextExtraction` | `get_lines_of_text` | `get_lines_of_text_from_pdf` | :heavy_check_mark: |
| `SimpleNonLigatureTextExtraction` | `get_text` | `get_text_from_pdf` | :heavy_check_mark: |
| `SimpleParagraphExtraction` | `get_paragraphs` | `get_paragraphs_from_pdf` | :heavy_check_mark: |
| `SimpleTextExtraction` | `get_text` | `get_text_from_pdf` | :heavy_check_mark: |
| `TableDetectionByLines` | `get_tables` | | |
| `TableDetectionByLines` | `get_table_bounding_boxes` | | |
| `TextRankKeywordExtraction` | `get_keywords` | `get_keywords_from_pdf` | :heavy_check_mark: |
| `TFIDFKeywordExtraction` | `get_keywords` | `get_keywords_from_pdf` | :heavy_check_mark: |

2.1.6

:mega: borb release notes

This release is a maintenance release.
- minor fix to annotations and `Page`
- minor fix to `Hyphenation`

2.1.5

:mega: borb release notes

This release is a maintenance release.
- `FormField` elements behave more like `LayoutElement` now
- Add more `SmartArt`
- Add automated testing using GitHub actions
- Add `Version` class to have 1 point of reference for getting version/author/producer information

Usage Statistics

Recently, `borb` has gone into the early stages of finding a reseller.
This is a very exciting step that I am sure will bring positive things for all of us, both `borb` and its users.

Understandably, the marketing/sales team would like some data to figure out what our target audience is, where to invest effort and resources, and more.
So I have added `UsageStatistics` to `borb`. This class gathers the following data:

- anonymous user ID (This is a randomly generated UUID, it is persisted in the installation directory of `borb` to ensure consistency between calls)
- city
- country name
- country code
- system platform (the operating system on which `borb` is running)
- state
- utc time in ms
- version (the version of `borb` that is running)

These statistics are periodically sent to our server(s). I have done my best to ensure this does not hinder the performance of `borb` in any way.
I urge to look at the source code of the `License` package to reassure yourself of the fact that we are gathering only the bare minimum of data.

Nevertheless, I fully understand that you may prefer not to send this information.
You can turn it off by calling `UsageStatistics.disable()`.

Page 3 of 12

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.