* * data:application/pdf;base64,JVBERi0xLjQ… * */ final class VoucherPreviewParser extends AbstractParser { private const string DATA_URI_PREFIX = 'data:application/pdf;base64,'; public function parse(Crawler $node): VoucherPreview { $dataUri = trim($this->getStringOrNullValue($node->filterXPath('//gutscheinpdf')) ?? ''); if (!str_starts_with($dataUri, self::DATA_URI_PREFIX)) { throw new \InvalidArgumentException('Missing or malformed PDF data URI in voucher preview response.'); } $pdf = base64_decode(substr($dataUri, \strlen(self::DATA_URI_PREFIX)), true); if (false === $pdf || '' === $pdf) { throw new \InvalidArgumentException('Undecodable PDF in voucher preview response.'); } return new VoucherPreview($pdf); } }