Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add screenshot #37

Merged
merged 12 commits into from
May 24, 2024
2 changes: 1 addition & 1 deletion .phpstorm.meta.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace PHPSTORM_META {
expectedArguments(
\Sensiolabs\GotenbergBundle\Builder\AbstractPdfBuilder::fileName(),
\Sensiolabs\GotenbergBundle\Builder\AbstractBuilder::fileName(),
1,
\Symfony\Component\HttpFoundation\HeaderUtils::DISPOSITION_INLINE,
\Symfony\Component\HttpFoundation\HeaderUtils::DISPOSITION_ATTACHMENT,
Expand Down
52 changes: 52 additions & 0 deletions config/builder_pdf.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

use Sensiolabs\GotenbergBundle\Builder\Pdf\HtmlPdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\Pdf\LibreOfficePdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\Pdf\MarkdownPdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\Pdf\UrlPdfBuilder;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;

return static function (ContainerConfigurator $container): void {
$services = $container->services();

$services->set('.sensiolabs_gotenberg.pdf_builder.html', HtmlPdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.pdf_builder')
;

$services->set('.sensiolabs_gotenberg.pdf_builder.url', UrlPdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
service('router')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.pdf_builder')
;

$services->set('.sensiolabs_gotenberg.pdf_builder.markdown', MarkdownPdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.pdf_builder')
;

$services->set('.sensiolabs_gotenberg.pdf_builder.office', LibreOfficePdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
])
->tag('sensiolabs_gotenberg.pdf_builder')
;
};
42 changes: 42 additions & 0 deletions config/builder_screenshot.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

use Sensiolabs\GotenbergBundle\Builder\Screenshot\HtmlScreenshotBuilder;
use Sensiolabs\GotenbergBundle\Builder\Screenshot\MarkdownScreenshotBuilder;
use Sensiolabs\GotenbergBundle\Builder\Screenshot\UrlScreenshotBuilder;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;

return static function (ContainerConfigurator $container): void {
$services = $container->services();

$services->set('.sensiolabs_gotenberg.screenshot_builder.html', HtmlScreenshotBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.screenshot_builder')
;

$services->set('.sensiolabs_gotenberg.screenshot_builder.url', UrlScreenshotBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
service('router')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.screenshot_builder')
;

$services->set('.sensiolabs_gotenberg.screenshot_builder.markdown', MarkdownScreenshotBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.screenshot_builder')
;
};
10 changes: 5 additions & 5 deletions config/debug.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php

use Sensiolabs\GotenbergBundle\DataCollector\GotenbergDataCollector;
use Sensiolabs\GotenbergBundle\Debug\TraceableGotenberg;
use Sensiolabs\GotenbergBundle\Debug\TraceableGotenbergPdf;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\DependencyInjection\Reference;
use function Symfony\Component\DependencyInjection\Loader\Configurator\abstract_arg;
Expand All @@ -11,17 +11,17 @@
return static function (ContainerConfigurator $container): void {
$services = $container->services();

$services->set('sensiolabs_gotenberg.traceable', TraceableGotenberg::class)
->decorate('sensiolabs_gotenberg')
$services->set('sensiolabs_gotenberg.traceable', TraceableGotenbergPdf::class)
->decorate('sensiolabs_gotenberg.pdf')
->args([
new Reference('.inner'),
])
;

$services->set('sensiolabs_gotenberg.data_collector', GotenbergDataCollector::class)
->args([
service('sensiolabs_gotenberg'),
tagged_locator('sensiolabs_gotenberg.builder'),
service('sensiolabs_gotenberg.pdf'),
tagged_locator('sensiolabs_gotenberg.pdf_builder'),
abstract_arg('All default options will be set through the configuration.'),
])
->tag('data_collector', ['template' => '@SensiolabsGotenberg/Collector/sensiolabs_gotenberg.html.twig', 'id' => 'sensiolabs_gotenberg'])
Expand Down
56 changes: 17 additions & 39 deletions config/services.php
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
<?php

use Sensiolabs\GotenbergBundle\Builder\HtmlPdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\LibreOfficePdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\MarkdownPdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\UrlPdfBuilder;
use Sensiolabs\GotenbergBundle\Client\GotenbergClient;
use Sensiolabs\GotenbergBundle\Client\GotenbergClientInterface;
use Sensiolabs\GotenbergBundle\Formatter\AssetBaseDirFormatter;
use Sensiolabs\GotenbergBundle\Pdf\Gotenberg;
use Sensiolabs\GotenbergBundle\Pdf\GotenbergInterface;
use Sensiolabs\GotenbergBundle\Gotenberg;
use Sensiolabs\GotenbergBundle\GotenbergInterface;
use Sensiolabs\GotenbergBundle\GotenbergPdf;
use Sensiolabs\GotenbergBundle\GotenbergPdfInterface;
use Sensiolabs\GotenbergBundle\GotenbergScreenshot;
use Sensiolabs\GotenbergBundle\GotenbergScreenshotInterface;
use Sensiolabs\GotenbergBundle\Twig\GotenbergAssetExtension;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\Filesystem\Filesystem;
use function Symfony\Component\DependencyInjection\Loader\Configurator\abstract_arg;
use function Symfony\Component\DependencyInjection\Loader\Configurator\param;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service_locator;
use function Symfony\Component\DependencyInjection\Loader\Configurator\tagged_locator;

return static function (ContainerConfigurator $container): void {
Expand All @@ -40,49 +41,26 @@
->tag('twig.extension')
;

$services->set('.sensiolabs_gotenberg.builder.html', HtmlPdfBuilder::class)
->share(false)
$services->set('sensiolabs_gotenberg.pdf', GotenbergPdf::class)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
tagged_locator('sensiolabs_gotenberg.pdf_builder'),
])
->tag('sensiolabs_gotenberg.builder')
->alias(GotenbergPdfInterface::class, 'sensiolabs_gotenberg.pdf')
;

$services->set('.sensiolabs_gotenberg.builder.url', UrlPdfBuilder::class)
->share(false)
$services->set('sensiolabs_gotenberg.screenshot', GotenbergScreenshot::class)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
service('router')->nullOnInvalid(),
tagged_locator('sensiolabs_gotenberg.screenshot_builder'),
])
->tag('sensiolabs_gotenberg.builder')
;

$services->set('.sensiolabs_gotenberg.builder.markdown', MarkdownPdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.builder')
;

$services->set('.sensiolabs_gotenberg.builder.office', LibreOfficePdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
])
->tag('sensiolabs_gotenberg.builder')
->alias(GotenbergScreenshotInterface::class, 'sensiolabs_gotenberg.screenshot')
;

$services->set('sensiolabs_gotenberg', Gotenberg::class)
->args([
tagged_locator('sensiolabs_gotenberg.builder'),
service_locator([
GotenbergPdfInterface::class => service('sensiolabs_gotenberg.pdf'),
GotenbergScreenshotInterface::class => service('sensiolabs_gotenberg.screenshot'),
]),
])
->alias(GotenbergInterface::class, 'sensiolabs_gotenberg')
;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Client\GotenbergClientInterface;
use Sensiolabs\GotenbergBundle\Enum\PaperSizeInterface;
use Sensiolabs\GotenbergBundle\Enum\PdfPart;
use Sensiolabs\GotenbergBundle\Exception\InvalidBuilderConfiguration;
use Sensiolabs\GotenbergBundle\Exception\PdfPartRenderingException;
use Sensiolabs\GotenbergBundle\Formatter\AssetBaseDirFormatter;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\Mime\Part\DataPart;
use Symfony\Component\Mime\Part\File as DataPartFile;
use Twig\Environment;
Expand Down Expand Up @@ -399,7 +398,7 @@ public function failOnHttpStatusCodes(array $statusCodes): static
}

/**
* Forces Gotenberg to return a 409 Conflict response if there are
* Forces GotenbergPdf to return a 409 Conflict response if there are
* exceptions in the Chromium console. (default false).
*
* @see https://gotenberg.dev/docs/routes#console-exceptions
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Client\GotenbergClientInterface;
use Sensiolabs\GotenbergBundle\Client\PdfResponse;
use Sensiolabs\GotenbergBundle\Client\GotenbergResponse;
use Sensiolabs\GotenbergBundle\Enum\PdfPart;
use Sensiolabs\GotenbergBundle\Exception\JsonEncodingException;
use Sensiolabs\GotenbergBundle\Formatter\AssetBaseDirFormatter;
Expand Down Expand Up @@ -71,7 +71,7 @@ private function encodeData(string $key, mixed $value): array
}

/**
* The Gotenberg API endpoint path.
* The GotenbergPdf API endpoint path.
*/
abstract protected function getEndpoint(): string;

Expand All @@ -91,7 +91,7 @@ public function fileName(string $fileName, string $headerDisposition = HeaderUti
return $this;
}

public function generate(): PdfResponse
public function generate(): GotenbergResponse
{
$pdfResponse = $this->gotenbergClient->call($this->getEndpoint(), $this->getMultipartFormData());

Expand Down Expand Up @@ -190,7 +190,7 @@ protected function assertFileExtension(string $path, array $validExtensions): vo
$extension = $file->getExtension();

if (!\in_array($extension, $validExtensions, true)) {
throw new \InvalidArgumentException(sprintf('The file extension "%s" is not available in Gotenberg.', $extension));
throw new \InvalidArgumentException(sprintf('The file extension "%s" is not available in GotenbergPdf.', $extension));
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Enum\PdfPart;
use Sensiolabs\GotenbergBundle\Exception\MissingRequiredFieldException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Exception\InvalidBuilderConfiguration;
use Sensiolabs\GotenbergBundle\Exception\MissingRequiredFieldException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Enum\PdfPart;
use Sensiolabs\GotenbergBundle\Exception\MissingRequiredFieldException;
Expand Down
13 changes: 13 additions & 0 deletions src/Builder/Pdf/PdfBuilderInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Client\GotenbergResponse;

interface PdfBuilderInterface
{
/**
* Generates the PDF and returns the response.
*/
public function generate(): GotenbergResponse;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Client\GotenbergClientInterface;
use Sensiolabs\GotenbergBundle\Exception\MissingRequiredFieldException;
Expand Down
13 changes: 0 additions & 13 deletions src/Builder/PdfBuilderInterface.php

This file was deleted.

Loading