# Changelog of Word to PDF Converter - Excel and PowerPoint (`marcel-rbro/word-to-pdf`) Actor

- **URL**: https://apify.com/marcel-rbro/word-to-pdf/changelog.md
- **Full Actor documentation**: https://apify.com/marcel-rbro/word-to-pdf.md

## Changelog

### 0.2 - unreleased

Batch conversion. **Breaking**: the visible input field is now `files`, an array. `file` is kept as a
hidden alias, so existing API callers and saved input configurations are unaffected, and a run given
one file behaves exactly as it did in 0.1.

- Converts up to 100 documents in one run. Each becomes its own PDF in the key-value store, and all
  of them are packed into a single ZIP - which is the point, since this Actor's image is around
  1.4 GB and its cold start costs more than converting an ordinary document does.
- `OUTPUT` is the PDF for a single-file run, the ZIP for a batch, and a JSON manifest of the records
  for a batch whose PDFs are too large to archive in memory.
- One dataset record per input file, with `ok` and `error`, pushed as each file finishes.
- Per-file failure isolation: a password-protected, damaged or undownloadable document is recorded
  against its own row and the batch carries on. The run fails only when nothing converted.
- Output keys are collision-de-duplicated, so a `notes.docx` and a `notes.xlsx` in one batch become
  `notes.pdf` and `notes-2.pdf` instead of one overwriting the other.
- Documents are converted strictly one at a time, sharing the prebuilt LibreOffice profile safely,
  and each file's scratch directory is deleted as soon as its PDF is uploaded.
- Caps on the file count, the total input size, one file's size, the download time and the archive
  size, each failing with a message naming the number that was exceeded.
- `src/zip.js` is copied from the `pdf-to-jpg` Actor in this family. No new dependency.

### 0.1

Initial version.

- Converts Word, Excel and PowerPoint documents to PDF with LibreOffice in headless mode:
  `.docx`, `.doc`, `.odt`, `.rtf`, `.txt`, `.xlsx`, `.xls`, `.ods`, `.csv`, `.pptx`, `.ppt` and `.odp`.
- Exports PDF 1.5, 1.6, 1.7 or the archival PDF/A-1b, PDF/A-2b and PDF/A-3b profiles, with control
  over bookmark export, image quality and image downsampling.
- Accepts the source file as a URL (including the Apify Console file upload field) or as base64.
- Reads the OOXML content types part, the OpenDocument `mimetype` entry and OLE2 stream names to
  decide which LibreOffice module has to open the document, rather than trusting the file extension.
- Detects password-protected documents and fails with an explanation instead of hanging on a prompt
  nobody can answer.
- Checks that a non-empty PDF was actually written, because LibreOffice exits 0 when it converts
  nothing.
- Ships a LibreOffice user profile built into the image, so runs do not pay for creating one.
- Writes the result to the key-value store under both `OUTPUT` and its filename, and pushes one
  dataset record per conversion.
