Skip to content

shelfio/libreoffice-lambda-base-image

Repository files navigation

LibreOffice Lambda Base Image

LibreOffice 25.2 base image for Lambda Node.js 20/22 x86_64 and Python 3.12/3.13 x86_64 to be used as a base for your own images.

Usage

Includes CJK fonts support! 877 MB in size.

Blog post announcement

Set environment variable HOME=/tmp in your Lambda function.

Node.js 22 x86_64

FROM public.ecr.aws/shelf/lambda-libreoffice-base:25.2-node22-x86_64

COPY handler.js ${LAMBDA_TASK_ROOT}/

CMD [ "handler.handler" ]

And your handler.js:

const {execSync} = require('child_process');
const {writeFileSync} = require('fs');

module.exports.handler = () => {
  writeFileSync('/tmp/hello.txt', Buffer.from('Hello World!'));

  execSync(`
  cd /tmp
  libreoffice25.2 --headless --invisible --nodefault --view --nolockcheck --nologo --norestore --convert-to pdf --outdir /tmp ./hello.txt
  `);
};

Node.js 20 x86_64

FROM public.ecr.aws/shelf/lambda-libreoffice-base:25.2-node20-x86_64

COPY handler.js ${LAMBDA_TASK_ROOT}/

CMD [ "handler.handler" ]

And your handler.js:

const {execSync} = require('child_process');
const {writeFileSync} = require('fs');

module.exports.handler = () => {
  writeFileSync('/tmp/hello.txt', Buffer.from('Hello World!'));

  execSync(`
  cd /tmp
  libreoffice25.2 --headless --invisible --nodefault --view --nolockcheck --nologo --norestore --convert-to pdf --outdir /tmp ./hello.txt
  `);
};

Python 3.13 x86_64

FROM public.ecr.aws/shelf/lambda-libreoffice-base:25.2-python3.13-x86_64

COPY handler.py ${LAMBDA_TASK_ROOT}/

CMD [ "handler.handler" ]

And your handler.py:

import subprocess

def handler(event, context):
    with open('/tmp/hello.txt', 'w') as f:
        f.write('Hello World!')

    subprocess.run([
        'libreoffice25.2',
        '--headless',
        '--invisible',
        '--nodefault',
        '--view',
        '--nolockcheck',
        '--nologo',
        '--norestore',
        '--convert-to',
        'pdf',
        '--outdir',
        '/tmp',
        '/tmp/hello.txt'
    ], check=True)

Python 3.12 x86_64

FROM public.ecr.aws/shelf/lambda-libreoffice-base:25.2-python3.12-x86_64

COPY handler.py ${LAMBDA_TASK_ROOT}/

CMD [ "handler.handler" ]

And your handler.py:

import subprocess

def handler(event, context):
    with open('/tmp/hello.txt', 'w') as f:
        f.write('Hello World!')

    subprocess.run([
        'libreoffice25.2',
        '--headless',
        '--invisible',
        '--nodefault',
        '--view',
        '--nolockcheck',
        '--nologo',
        '--norestore',
        '--convert-to',
        'pdf',
        '--outdir',
        '/tmp',
        '/tmp/hello.txt'
    ], check=True)

Troubleshooting

Command failed: Fatal Error: The application cannot be started. User installation could not be completed.

Set environment variable HOME=/tmp in your Lambda function.

Available Tags & Versions

Current Versions (LibreOffice 25.2)

  • 25.2-node22-x86_64 - Node.js 22 with LibreOffice 25.2.5
  • 25.2-node20-x86_64 - Node.js 20 with LibreOffice 25.2.5
  • 25.2-python3.13-x86_64 - Python 3.13 with LibreOffice 25.2.5
  • 25.2-python3.12-x86_64 - Python 3.12 with LibreOffice 25.2.5

Legacy Versions (LibreOffice 7.6)

  • 7.6-node20-x86_64 - Node.js 20 with LibreOffice 7.6
  • 7.6-python3.12-x86_64 - Python 3.12 with LibreOffice 7.6
  • 7.6-node18-x86_64 - Node.js 18 with LibreOffice 7.6
  • 7.4-node16-x86_64 - Node.js 16 with LibreOffice 7.4
  • 7.3-node16-x86_64 - Node.js 16 with LibreOffice 7.3

See Also

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 10