84 lines
3.5 KiB
PHP
84 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace App\Support;
|
|
|
|
class LetterLayout
|
|
{
|
|
/**
|
|
* @return array{
|
|
* page_format: string,
|
|
* margins_mm: array{0: int, 1: int, 2: int, 3: int},
|
|
* css: array<string, string>
|
|
* }
|
|
*/
|
|
public static function resolve(): array
|
|
{
|
|
$page = config('letter.page');
|
|
$content = config('letter.content');
|
|
$typography = config('letter.typography');
|
|
$spacing = config('letter.spacing');
|
|
$colors = config('letter.colors');
|
|
|
|
$marginTop = self::length($page['margin_top_mm']);
|
|
$marginRight = self::length($page['margin_right_mm']);
|
|
$marginBottom = self::length($page['margin_bottom_mm']);
|
|
$marginLeft = self::length($page['margin_left_mm']);
|
|
$contentPaddingX = self::length($content['padding_x_mm']);
|
|
$pageHeight = $page['height_mm'].'mm';
|
|
|
|
return [
|
|
'page_format' => $page['format'],
|
|
'margins_mm' => [
|
|
$page['margin_top_mm'],
|
|
$page['margin_right_mm'],
|
|
$page['margin_bottom_mm'],
|
|
$page['margin_left_mm'],
|
|
],
|
|
'css' => [
|
|
'margin_top' => $marginTop,
|
|
'margin_right' => $marginRight,
|
|
'margin_bottom' => $marginBottom,
|
|
'margin_left' => $marginLeft,
|
|
'content_padding_x' => $contentPaddingX,
|
|
'page_height' => $pageHeight,
|
|
'sheet_min_height' => sprintf(
|
|
'calc(%s - %s - %s)',
|
|
$pageHeight,
|
|
$marginTop,
|
|
$marginBottom,
|
|
),
|
|
'font_family' => $typography['font_family'],
|
|
'font_size' => $typography['font_size'],
|
|
'line_height' => (string) $typography['line_height'],
|
|
'body_color' => $typography['body_color'],
|
|
'signatory_title_size' => $typography['signatory_title_size'],
|
|
'signatory_title_color' => $typography['signatory_title_color'],
|
|
'footer_font_size' => $typography['footer_font_size'],
|
|
'footer_line_height' => (string) $typography['footer_line_height'],
|
|
'letterhead_registration_size' => $typography['letterhead_registration_size'],
|
|
'letterhead_margin_bottom' => $spacing['letterhead_margin_bottom'].'px',
|
|
'meta_margin_bottom' => $spacing['meta_margin_bottom'].'px',
|
|
'recipient_margin_bottom' => $spacing['recipient_margin_bottom'].'px',
|
|
'subject_margin_bottom' => $spacing['subject_margin_bottom'].'px',
|
|
'body_margin_bottom' => $spacing['body_margin_bottom'].'px',
|
|
'body_paragraph_margin_bottom' => $spacing['body_paragraph_margin_bottom'].'px',
|
|
'signature_block_margin_bottom' => $spacing['signature_block_margin_bottom'].'px',
|
|
'signature_company_margin_bottom' => $spacing['signature_company_margin_bottom'].'px',
|
|
'signature_space_height' => $spacing['signature_space_height'].'px',
|
|
'logo_height' => $spacing['logo_height'].'px',
|
|
'color_blue' => $colors['blue'],
|
|
'color_orange' => $colors['orange'],
|
|
'color_white' => $colors['white'],
|
|
'color_black' => $colors['black'],
|
|
],
|
|
];
|
|
}
|
|
|
|
private static function length(int $millimetres): string
|
|
{
|
|
$centimetres = $millimetres / 10;
|
|
|
|
return rtrim(rtrim(number_format($centimetres, 2, '.', ''), '0'), '.').'cm';
|
|
}
|
|
}
|