Metadata-Version: 2.4
Name: softworker
Version: 1.0.3
Summary: Generate ATS-friendly PDF resumes from structured JSON Resume data.
Author-email: nayetdet <jpmoreiracampos21@gmail.com>
License-Expression: GPL-3.0-or-later
Requires-Python: >=3.14
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: jsonata-python>=0.6.2
Requires-Dist: pybars3>=0.9.7
Requires-Dist: pydantic>=2.13.3
Requires-Dist: pydantic-settings>=2.14.0
Requires-Dist: typer>=0.25.1
Requires-Dist: weasyprint>=68.1
Dynamic: license-file

# SoftWorker

Generate ATS-friendly PDF resumes from structured JSON Resume data.

Provide a JSON Resume file, run the CLI, and SoftWorker renders a ready-to-use A4 PDF designed to be readable by both recruiters and applicant tracking systems (ATS).

## Preview

First page of the PDF generated from the project's main example:

![First page of the generated resume](docs/examples/images/resume.png)

## What the project does

- Accepts resumes in JSON Resume format.
- Produces ready-to-use A4 PDFs.
- Generates accessible PDFs suitable for recruiters and applicant tracking systems (ATS).

## Requirements

- Python 3.14+
- WeasyPrint's native system dependencies

## Installation

```bash
python -m pip install softworker
```

## CLI usage

Generate a PDF from a JSON Resume file:

```bash
python -m softworker resume.json
```

By default, the file is saved in the current directory with the same base name as the JSON file:

```text
resume.pdf
```

To define an output path:

```bash
python -m softworker resume.json /tmp/resume.pdf
```

To render the resume in another language:

```bash
python -m softworker resume.json /tmp/resume-en.pdf --resume-language en_US
```

## Library usage

You can also generate the PDF directly in Python:

```python
import json
from pathlib import Path
from typing import Any, Dict
from softworker import render_pdf_from_dict
from softworker.enums import ResumeLanguage

resume_path = Path("resume.json")
output_path = Path("resume.pdf")
resume: Dict[str, Any] = json.loads(resume_path.read_text(encoding="utf-8"))
pdf: bytes = render_pdf_from_dict(resume, resume_language=ResumeLanguage.PT_BR)
output_path.write_bytes(pdf)
```

## Supported sections

The current theme supports these JSON Resume sections:

- `basics`
- `work`
- `skills`
- `projects`
- `certificates`
- `awards`
- `education`
- `languages`
- `profiles`
- `publications`
- `volunteer`
- `interests`
- `references`
