1. Go to this page and download the library: Download sarder/pdfstudio 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/ */
sarder / pdfstudio example snippets
use PdfStudio\Laravel\Facades\Pdf;
// Download immediately
return Pdf::view('invoices.show')
->data(['invoice' => $invoice])
->download('invoice.pdf');
// Stream inline in browser
return Pdf::view('reports.quarterly')
->data(['report' => $report])
->inline('report.pdf');
// Save to Storage
Pdf::view('statements.monthly')
->data(['account' => $account])
->driver('chromium')
->format('A4')
->landscape()
->save('statements/2024-01.pdf', 's3');
// Render from inline HTML
$result = Pdf::html('<h1>Hello World</h1>')->render();
echo $result->bytes; // file size in bytes
echo $result->renderTimeMs; // render duration
use PdfStudio\Laravel\Contracts\TemplateVersionServiceContract;
$versioning = app(TemplateVersionServiceContract::class);
// Save current version
$version = $versioning->create(
definition: $registry->get('invoice'),
author: 'Jane Smith',
changeNotes: 'Updated payment section layout',
);
// List version history
$versions = $versioning->list('invoice');
// Returns Collection<TemplateVersion> ordered newest first
// Restore a previous version
$definition = $versioning->restore('invoice', versionNumber: 3);
// Diff two versions
$changes = $versioning->diff('invoice', fromVersion: 2, toVersion: 3);
// Returns array of changed field names
use PdfStudio\Laravel\Models\Workspace;
use PdfStudio\Laravel\Models\WorkspaceMember;
use PdfStudio\Laravel\Contracts\AccessControlContract;
// Create a workspace
$workspace = Workspace::create(['name' => 'Acme Corp', 'slug' => 'acme']);
// Add members with roles: owner | admin | member | viewer
WorkspaceMember::create([
'workspace_id' => $workspace->id,
'user_id' => $user->id,
'role' => 'admin',
]);
// Check access in code
$access = app(AccessControlContract::class);
$access->canAccess($user->id, $workspace->id); // true/false
$access->canManage($user->id, $workspace->id); // true for owner/admin
// Protect routes with middleware
Route::middleware('pdf-studio.workspace')->group(function () {
// Route parameter must be named {workspace} (slug)
Route::get('/workspaces/{workspace}/...', ...);
});
use PdfStudio\Laravel\Builder\Schema\DocumentSchema;
use PdfStudio\Laravel\Builder\Schema\TextBlock;
use PdfStudio\Laravel\Builder\Schema\TableBlock;
use PdfStudio\Laravel\Builder\Schema\DataBinding;
use PdfStudio\Laravel\Builder\Schema\StyleTokens;
$schema = new DocumentSchema(
blocks: [
new TextBlock(content: 'Invoice', tag: 'h1', classes: 'text-2xl font-bold'),
new TableBlock(
headers: ['Item', 'Qty', 'Price'],
rowBinding: new DataBinding(variable: 'items', path: 'items'),
cellBindings: ['name', 'quantity', 'price'],
),
],
styleTokens: new StyleTokens(
primaryColor: '#1a1a1a',
fontFamily: 'Inter, sans-serif',
),
);
// Serialize to JSON (store in DB, send to frontend)
$json = $schema->toJson();
// Restore from JSON
$schema = DocumentSchema::fromJson($json);
use PdfStudio\Laravel\Builder\Compiler\SchemaToHtmlCompiler;
$html = app(SchemaToHtmlCompiler::class)->compile($schema);
// Returns full HTML document ready to pass to PdfBuilder
use PdfStudio\Laravel\Builder\Exporter\BladeExporter;
$blade = app(BladeExporter::class)->export($schema);
// Returns a Blade template string with @foreach loops for tables
file_put_contents(resource_path('views/pdf/invoice.blade.php'), $blade);
use PdfStudio\Laravel\Models\Workspace;
use PdfStudio\Laravel\Models\ApiKey;
$workspace = Workspace::create(['name' => 'Acme Corp', 'slug' => 'acme']);
$generated = ApiKey::generate(); // ['key' => '...64 chars...', 'prefix' => '...8 chars...']
ApiKey::create([
'workspace_id' => $workspace->id,
'name' => 'Production Key',
'key' => hash('sha256', $generated['key']), // store hash only
'prefix' => $generated['prefix'],
'expires_at' => now()->addYear(), // optional
]);
// Give $generated['key'] to your customer — it cannot be retrieved again
// Set both passwords
Pdf::html('<h1>Secret Report</h1>')
->protect(userPassword: 'user123', ownerPassword: 'admin456')
->download('protected.pdf');
// Owner password with restricted permissions
Pdf::view('contract')
->protect(
ownerPassword: 'admin',
permissions: ['Printing', 'CopyContents'],
)
->save('contracts/signed.pdf');
// Fill form fields
$result = Pdf::acroform(storage_path('forms/application.pdf'))
->fill([
'name' => 'John Doe',
'email' => '[email protected]',
'date' => '2024-01-15',
])
->flatten()
->output();
$result->download('application-filled.pdf');
// List available form fields
$fields = Pdf::acroform(storage_path('forms/application.pdf'))->fields();
// ['name', 'email', 'date', 'signature']
// In a Livewire component action
public function downloadInvoice()
{
return Pdf::view('invoices.show')
->data(['invoice' => $this->invoice])
->livewireDownload('invoice.pdf');
}
$result = Pdf::html('<h1>Report</h1>')->render();
$base64 = $result->toBase64(); // or $result->base64()
// Cache for 1 hour (3600 seconds)
$result = Pdf::html('<h1>Report</h1>')->cache(3600)->render();
// Second call returns cached result instantly (renderTimeMs = 0)
$result2 = Pdf::html('<h1>Report</h1>')->cache(3600)->render();
// Bypass cache for a specific render
$fresh = Pdf::html('<h1>Report</h1>')->cache(3600)->noCache()->render();
// Auto-fit content height
Pdf::html('<h1>Long receipt...</h1>')
->contentFit()
->download('receipt.pdf');
// With maximum height cap (in pixels)
Pdf::view('receipt')
->contentFit(maxHeight: 3000)
->download('receipt.pdf');
// Alias
Pdf::html($html)->autoHeight()->render();
// Hide header on the first page (e.g., cover page)
Pdf::view('report')
->headerExceptFirst()
->download('report.pdf');
// Hide footer on the last page
Pdf::view('report')
->footerExceptLast()
->download('report.pdf');
// Show header only on specific pages
Pdf::view('report')
->headerOnPages([2, 3, 4])
->download('report.pdf');
// Exclude header/footer from specific pages
Pdf::view('report')
->headerExcludePages([1, 5])
->footerExcludePages([1])
->download('report.pdf');