A PHP client for interacting with Gotenberg
This package is a PHP client for Gotenberg, a developer-friendly API to interact with powerful tools like Chromium and LibreOffice for converting numerous document formats (HTML, Markdown, Word, Excel, etc.) into PDF files, and more!
| Gotenberg version | Client |
|---|---|
8.x(current) | v2.x(current) |
7.x | v1.x |
6.x | thecodingmachine/gotenberg-php-client |
Tip
A Symfony Bundle is also available!
You may convert a target URL to PDF and save it to a given directory:
useGotenberg\Gotenberg;
// Converts a target URL to PDF and saves it to a given directory.$filename = Gotenberg::save(
Gotenberg::chromium($apiUrl)->pdf()->url('https://my.url'), $pathToSavingDirectory
);You may also convert Office documents:
useGotenberg\Gotenberg;
useGotenberg\Stream;
// Converts Office documents to PDF.$response = Gotenberg::send(
Gotenberg::libreOffice($apiUrl)
->convert(
Stream::path($pathToDocx),
Stream::path($pathToXlsx)
)
);This packages requires Gotenberg, a containerized API for seamless PDF conversion.
See the installation guide for more information.
This package can be installed with Composer:
composer require gotenberg/gotenberg-php
We use PSR-7 HTTP message interfaces (i.e., RequestInterface and ResponseInterface) and the PSR-18 HTTP client
interface (i.e., ClientInterface).
For the latter, you may need an adapter in order to use your favorite client library. Check the available adapters:
If you're not sure which adapter you should use, consider using the php-http/guzzle7-adapter:
composer require php-http/guzzle7-adapter
This package is organized around modules, namely:
useGotenberg\Gotenberg;
Gotenberg::chromium($apiUrl);
Gotenberg::libreOffice($apiUrl);
Gotenberg::pdfEngines($apiUrl);Each of these modules offers a variety of methods to populate a multipart/form-data request.
After setting all optional form fields and files, you can create a request by calling the method that represents the endpoint.
For example, to call the /forms/chromium/convert/url route:
useGotenberg\Gotenberg;
Gotenberg::chromium($apiUrl)
->pdf() // Or screenshot().
->singlePage() // Optional.
->url('https://my.url'));Tip
Head to the documentation to learn about all possibilities.
If the route requires form files, use the Stream class to create them:
useGotenberg\DownloadFrom;
useGotenberg\Gotenberg;
useGotenberg\Stream;
Gotenberg::libreOffice($apiUrl)
->convert(Stream::path($pathToDocument));
// Alternatively, you may also set the content directly.
Gotenberg::chromium($apiUrl)
->pdf()
->assets(Stream::string('style.css', 'body{font-family: Arial, Helvetica, sans-serif;}'))
->html(Stream::string('index.html', '<html><head><link rel="stylesheet" type="text/css" href="style.css"></head><body><p>Hello, world!</p></body></html>'));
// Or create your stream from scratch.
Gotenberg::libreOffice($apiUrl)
->convert(newStream('document.docx', $stream));
// Or even tell Gotenberg to download the files for you.
Gotenberg::libreOffice($apiUrl)
->downloadFrom([
newDownloadFrom('https://url.to.document.docx', ['MyHeader' => 'MyValue'])
])
->convert();After having created the HTTP request, you have two options:
- Get the response from the API and handle it according to your need.
- Save the resulting file to a given directory.
You may use any HTTP client that is able to handle a PSR-7RequestInterface to call the API:
useGotenberg\Gotenberg;
$request = Gotenberg::chromium($apiUrl)
->pdf()
->url('https://my.url');
$response = $client->sendRequest($request);If you have a PSR-18 compatible HTTP client (see Installation), you may also use Gotenberg::send:
useGotenberg\Gotenberg;
$request = Gotenberg::chromium($apiUrl)
->pdf()
->url('https://my.url');
try {
$response = Gotenberg::send($request);
return$response;
} catch (GotenbergApiErrored$e) {
// $e->getResponse();
}This helper will parse the response and if it is not 2xx, it will throw an exception. That's especially useful if you wish to return the response directly to the browser.
You may also explicitly set the HTTP client:
useGotenberg\Gotenberg;
$response = Gotenberg::send($request, $client);If you have a PSR-18 compatible HTTP client (see Installation), you may use Gotenberg::save:
useGotenberg\Gotenberg;
$request = Gotenberg::chromium($apiUrl)
->pdf()
->url('https://my.url');
$filename = Gotenberg::save($request, '/path/to/saving/directory');It returns the filename of the resulting file. By default, Gotenberg creates a UUID filename (i.e.,
95cd9945-484f-4f89-8bdb-23dbdd0bdea9) with either a .zip or a .pdf file extension (or image formats for screenshots).
You may also explicitly set the HTTP client:
useGotenberg\Gotenberg;
$response = Gotenberg::save($request, $pathToSavingDirectory, $client);You may override the output filename with:
useGotenberg\Gotenberg;
$request = Gotenberg::chromium($apiUrl)
->pdf()
->outputFilename('my_file')
->url('https://my.url');Gotenberg will automatically add the correct file extension.
By default, Gotenberg creates a UUID correlation ID that identifies a request in its logs. You may override its value thanks to:
useGotenberg\Gotenberg;
$request = Gotenberg::chromium($apiUrl)
->pdf()
->correlationId('debug')
->url('https://my.url');It will set the header Gotenberg-Trace with your value. You may also override the default header name:
useGotenberg\Gotenberg;
$request = Gotenberg::chromium($apiUrl)
->pdf()
->correlationId('debug', 'Request-Id')
->url('https://my.url');Please note that it should be the same value as defined by the --api-correlation-id-header Gotenberg's property.
The response from Gotenberg will also contain the correlation ID header. In case of error, both the Gotenberg::send
and Gotenberg::save methods throw a GotenbergApiErrored exception that provides the following method for retrieving
it:
useGotenberg\Exceptions\GotenbergApiErrored;
useGotenberg\Gotenberg;
try {
$response = Gotenberg::send(
Gotenberg::chromium($apiUrl)
->screenshot()
->url('https://my.url')
);
} catch (GotenbergApiErrored$e) {
$correlationId = $e->getCorrelationId();
// Or if you override the header name:$correlationId = $e->getCorrelationId('Request-Id');
}Note
The trace() and getGotenbergTrace() methods are deprecated but still available for backward compatibility.
