1. Go to this page and download the library: Download html2img/html2img-laravel library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use GuzzleHttp\Client;
use GuzzleHttp\ClientInterface;
$this->app->bind('html2img.http', fn () => new Client([
'base_uri' => config('html2img.base_uri'),
'timeout' => config('html2img.timeout'),
// your own handler stack, middleware, proxy settings, etc.
]));
use Html2img\Enum\Format;
use Html2img\Laravel\Facades\Html2img;
use Html2img\Request\HtmlRequest;
$response = Html2img::html(new HtmlRequest(
html: view('invoices.show', ['invoice' => $invoice])->render(),
format: Format::Pdf,
));
// Store it like any other render
$path = Html2img::store($response, "invoices/{$invoice->number}.pdf");
use Html2img\Laravel\Facades\Html2img;
use Html2img\Request\HtmlRequest;
$response = Html2img::html(new HtmlRequest(html: $document, width: 1200, height: 630));
// Returns the stored path; uses the HTML2IMG_DISK disk, or your default disk.
$path = Html2img::store($response, "og/{$post->id}.png");
// Or target a specific disk.
Html2img::store($response, "og/{$post->id}.png", 's3');
$post->update(['og_image_path' => $path]);
$bytes = Html2img::download($response); // or a URL string
$path = Html2img::store('https://i.html2img.com/abc.png', 'thumb.png');
use Html2img\Laravel\Html2img;
use Html2img\Request\HtmlRequest;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class GenerateOgImage implements ShouldQueue
{
use Queueable;
public function __construct(public Post $post) {}
public function handle(Html2img $html2img): void
{
$response = $html2img->html(new HtmlRequest(
html: view('og.post', ['post' => $this->post])->render(),
width: 1200,
height: 630,
));
$this->post->update([
'og_image_path' => $html2img->store($response, "og/{$this->post->id}.png"),
]);
}
}
$response->success; // bool
$response->id; // string|null, the render id
$response->url; // string|null, the CDN URL of the image
$response->creditsRemaining; // int|null, credits left after this call
$response->status; // string|null, "processing" for async jobs
$response->message; // string|null
$response->template; // string|null, the template slug, when applicable
$response->isProcessing(); // bool
$response->raw(); // array, the full decoded JSON payload
use Html2img\Laravel\Facades\Html2img;
use Html2img\Request\ScreenshotRequest;
$response = Html2img::screenshot(new ScreenshotRequest(
url: 'https://example.com/long-report',
fullpage: true,
webhookUrl: route('hooks.html2img'),
));
if ($response->isProcessing()) {
// The final URL will arrive at your webhook, not on this response.
}
use Html2img\Laravel\Facades\Html2img;
use Html2img\Request\HtmlRequest;
use Html2img\Exception\Html2imgException;
use Html2img\Exception\ValidationException;
use Html2img\Exception\InsufficientCreditsException;
try {
$response = Html2img::html(new HtmlRequest(html: $document));
} catch (ValidationException $e) {
// 400 or 422: inspect the per-field messages
foreach ($e->details() as $field => $messages) {
// ...
}
} catch (InsufficientCreditsException $e) {
// 402: out of credits
$left = $e->creditsRemaining();
} catch (Html2imgException $e) {
// anything else
$e->statusCode(); // int|null
$e->errorCode(); // string|null, the API "code" field
$e->payload(); // array, the decoded body
}