PDF Thumbnail: Exception with FontDocumentThumbnailGenerator.php

Hello together,

i’m receiving an exception within the Media Module when neos tries to create a thumbnail for a PDF file. And the Module just shows the spinner:

neos_media

The detailed view seems to work, as neos is showing it:

I’ve also stated my question in Slack, but idk where to dig for it.

The interesting part, as Christian already picked out, that it has something todo with the FontDocumentThumbnailGenerator.php

I’m using the following setup but with: php:8.2-cli instead of php:8.1-cli and mariadb:11.1.

The exception looks like:

30-10-27 06:57:49 8475 CRITICAL Exception in line 53 of /var/Neos/Data/Temporary/Production/Cache/Code/Flow_Object_Classes/Neos_Media_Domain_Model_ThumbnailGenerator_FontDocumentThumbnailGenerator.php: Call to a member function getResource() on null - See also: 20231027125749032724.txt

The exception occurs with: PHP GD, Gmagick

The full stacktrace:

Exception in line 53 of /var/Neos/Data/Temporary/Production/Cache/Code/Flow_Object_Classes/Neos_Media_Domain_Model_ThumbnailGenerator_FontDocumentThumbnailGenerator.php: Call to a member function getResource() on null

47 Neos\Media\Domain\Model\ThumbnailGenerator\AbstractThumbnailGenerator::isExtensionSupported(Neos\Media\Domain\Model\Thumbnail)
46 Neos\Media\Domain\Model\ThumbnailGenerator\FontDocumentThumbnailGenerator_Original::canRefresh(Neos\Media\Domain\Model\Thumbnail)
45 Neos\Media\Domain\Strategy\ThumbnailGeneratorStrategy_Original::refresh(Neos\Media\Domain\Model\Thumbnail)
44 Neos\Flow\ObjectManagement\DependencyInjection\DependencyProxy::__call("refresh", array|1|)
43 Neos\Media\Domain\Model\Thumbnail_Original::refresh()
42 Neos\Media\Domain\Service\ThumbnailService_Original::refreshThumbnail(Neos\Media\Domain\Model\Thumbnail)
41 Neos\Flow\ObjectManagement\DependencyInjection\DependencyProxy::__call("refreshThumbnail", array|1|)
40 Neos\Media\Controller\ThumbnailController_Original::thumbnailAction(Neos\Media\Domain\Model\Thumbnail)
39 Neos\Media\Controller\ThumbnailController::thumbnailAction(Neos\Media\Domain\Model\Thumbnail)
38 Neos\Media\Controller\ThumbnailController::Flow_Aop_Proxy_invokeJoinPoint(Neos\Flow\Aop\JoinPoint)
37 Neos\Flow\Aop\Advice\AdviceChain::proceed(Neos\Flow\Aop\JoinPoint)
36 Neos\Flow\Security\Aspect\PolicyEnforcementAspect_Original::enforcePolicy(Neos\Flow\Aop\JoinPoint)
35 Neos\Flow\Aop\Advice\AroundAdvice::invoke(Neos\Flow\Aop\JoinPoint)
34 Neos\Flow\Aop\Advice\AdviceChain::proceed(Neos\Flow\Aop\JoinPoint)
33 Neos\Media\Controller\ThumbnailController::thumbnailAction(Neos\Media\Domain\Model\Thumbnail)
32 Neos\Flow\Mvc\Controller\ActionController_Original::callActionMethod()
31 Neos\Flow\Mvc\Controller\ActionController_Original::processRequest(Neos\Flow\Mvc\ActionRequest, Neos\Flow\Mvc\ActionResponse)
30 Neos\Flow\Mvc\Dispatcher_Original::initiateDispatchLoop(Neos\Flow\Mvc\ActionRequest, Neos\Flow\Mvc\ActionResponse)
29 Neos\Flow\Mvc\Dispatcher_Original::dispatch(Neos\Flow\Mvc\ActionRequest, Neos\Flow\Mvc\ActionResponse)
28 Neos\Flow\Mvc\DispatchMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
27 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
26 Neos\Flow\Http\Middleware\SecurityEntryPointMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
25 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
24 Neos\Flow\Http\Middleware\RequestBodyParsingMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
23 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
22 Neos\Flow\Mvc\FlashMessage\FlashMessageMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
21 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
20 Neos\Flow\Http\Middleware\PoweredByMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
19 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
18 Neos\RedirectHandler\RedirectMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
17 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
16 Neos\Flow\Mvc\Routing\RoutingMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
15 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
14 Neos\Neos\Routing\RequestUriHostMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
13 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
12 Neos\FluidAdaptor\Core\Widget\AjaxWidgetMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
11 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
10 Neos\Flow\Http\Middleware\SessionMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
9 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
8 Neos\Flow\Http\Middleware\MethodOverrideMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
7 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
6 Neos\Flow\Http\Middleware\TrustedProxiesMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
5 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
4 Neos\Flow\Http\Middleware\StandardsComplianceMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
3 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
2 Neos\Flow\Http\RequestHandler::handleRequest()
1 Neos\Flow\Core\Bootstrap::run()


HTTP REQUEST:
target: /media/thumbnail/cf1fc177-4029-4088-ae06-d085fdf0aba5
Cookie: Neos_Session=G6foFSQ1i0SaJjiWVjP31HQNFtqs8qG7
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Accept-Encoding: gzip, deflate, br
Referer: https://<home>/neos/management/media
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Sec-Ch-Ua-Platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua: "Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"
X-Scheme: https
X-Forwarded-Scheme: https
X-Forwarded-Proto: https
X-Forwarded-Port: 443
X-Forwarded-Host: <home>
X-Forwarded-For: <IP>
X-Real-Ip: <IP>
X-Request-Id: afc2d95dec3884d340c5c5e8d2e241fa
Host: <home>
Content-Length:
Content-Type:

PHP PROCESS:
Inode: 27391586
PID: 8475
UID: 0
GID: 0
User: root

I suppose the FontDocumentThumbnailGenerator.php is trying to extract the front out of the pdf file but fails, as it is not installed on the system. But that’s just a guess as i’m not sure how to verify that. Anyway, it seems to happen with “any” front. I tried it with a dummy.pdf and the same error occurs.

So i might probably have to install a font somehow? Did someone of you had the same issue or knows how to add this font to the system? Or maybe it is a missing package for the image?

/e: The very same applies to me: no pdf thumbnail generation Imagick · Issue #3373 · neos/neos-development-collection · GitHub but instead of using Imagick i’m using PHP GD (on my dev Gmagick)

Thanks! :slight_smile:

This is fixed btw. It was an Policy issue where i had to give the Anonymous user some privileges to read pdfs, as initially i’ve disallowed them. Whysoever this also interferes with the admin user…

1 Like