Important
You are browsing upcoming documentation for version 7.0 of OroCommerce, scheduled for release in 2026. Read the documentation for version 6.1 (the latest LTS version) to get up-to-date information.
See our Release Process documentation for more information on the currently supported and upcoming releases.
Create PDF Options Preset
PDF options preset
is a string that denotes a set of options to be stored in the PDF options
DTO. The list of presets available out-of-the-box is defined in the \Oro\Bundle\PdfGeneratorBundle\PdfOptionsPreset\PdfOptionsPreset
class. Currently, the only available preset is default. For more details, see the Architecture Details section of the documentation.
PDF options
is a DTO that contains options for generating a PDF file, which will be passed to the PDF engine. It is implemented by the \Oro\Bundle\PdfGeneratorBundle\PdfOptions\PdfOptions
class out-of-the-box. The PDF options
may include parameters, such as page size, margins, engine-specific settings like API URL, binary path, etc.
PDF options
DTO is configured by the PDF options configurator
that uses \Symfony\Component\OptionsResolver\OptionsResolver
. These options are resolved in the PDF builder
before being passed to the configured PDF engine
.
In order to create a custom PDF options preset
, you need to create a class that implements the \Oro\Bundle\PdfGeneratorBundle\PdfOptionsPreset\PdfOptionsPresetConfiguratorInterface
and register it as a service with the tag oro_pdf_generator.pdf_options_preset_configurator
. Example:
namespace Acme\Bundle\DemoBundle\PdfOptionsPreset;
use Oro\Bundle\PdfGeneratorBundle\PdfOptionsPreset\PdfOptionsPresetConfiguratorInterface;
use Oro\Bundle\PdfGeneratorBundle\PdfOptions\PdfOptions;
use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* Custom PDF options preset configurator.
* Decorates the default configurator to add page size options for A4 format and the custom option.
*/
class CustomPdfOptionsPresetConfigurator implements PdfOptionsPresetConfiguratorInterface
{
public const string NAME = 'custom';
public function __construct(
private readonly PdfOptionsPresetConfiguratorInterface $defaultPdfOptionsPresetConfigurator
) {
}
#[\Override]
public function configureOptions(OptionsResolver $resolver): void
{
$this->defaultPdfOptionsPresetConfigurator->configureOptions($resolver);
$resolver->setDefaults([
'page_width' => '8.27in', // A4 width
'page_height' => '11.7in', // A4 height
// Add other default options as needed.
]);
$resolver
->define('custom_option')
->default('default_value')
->allowedTypes('string');
}
public function isApplicable(string $pdfEngineName, string $pdfOptionsPreset = PdfOptionsPreset::DEFAULT): bool
{
// Return true if this configurator is applicable for the given preset.
return $pdfOptionsPreset === 'custom';
}
}
Then register it in your service configuration:
services:
acme.demo.pdf_options_preset.custom:
class: Acme\Bundle\DemoBundle\PdfOptionsPreset\CustomPdfOptionsPresetConfigurator:
arguments:
- '@oro_pdf_generator.pdf_options_preset.default_configurator'
tags:
- { name: oro_pdf_generator.pdf_options_preset_configurator }
Next, use this preset to create a PDF file
:
$pdfBuilder = $this->pdfBuilderFactory->createPdfBuilder(CustomPdfOptionsPresetConfigurator::NAME);
$pdfTemplate = $this->pdfTemplateFactory->createPdfTemplate(
'@AcmeDemo/PdfDocument/template.html.twig',
['param1' => 'value1', 'param2' => 'value2']
);
$pdfBuilder->content($pdfTemplate);
/* @var $pdfFile \Oro\Bundle\PdfGeneratorBundle\Model\PdfFileInterface */
$pdfFile = $pdfBuilder->createPdfFile();
Or to create a PDF document
:
$pdfDocumentDemand = new GenericPdfDocumentDemand(
sourceEntity: $order,
pdfDocumentName: 'order-0101',
pdfDocumentType: 'us_standard_invoice',
pdfOptionsPreset: CustomPdfOptionsPresetConfigurator::NAME,
pdfDocumentPayload: ['customer_notes' => 'Some notes']
);
/* @var $pdfDocument \Oro\Bundle\PdfGeneratorBundle\Entity\PdfDocument */
$pdfDocument = $this->pdfDocumentOperatorRegistry
->getOperator(Order::class, PdfDocumentGenerationMode::INSTANT)
->createPdfDocument($pdfDocumentDemand);
/* @var $pdfDocumentFile \Oro\Bundle\AttachmentBundle\Entity\File */
$pdfDocumentFile = $pdfDocument->getPdfDocumentFile();