From a67f5ead683178e7a0b50b23116469219149cfd8 Mon Sep 17 00:00:00 2001 From: igor Date: Fri, 8 May 2026 10:57:36 +0200 Subject: [PATCH] added hello world script and dotted for create dotted A4 for print --- .gitignore | 1 + AGENTS.md | 70 +++++++++++ README.md | 179 +++++++++++++++++++++++++++ output/dotted.pdf | Bin 0 -> 220427 bytes src/dotted.php | 287 ++++++++++++++++++++++++++++++++++++++++++++ src/hello-world.php | 27 +++++ 6 files changed, 564 insertions(+) create mode 100644 AGENTS.md create mode 100644 README.md create mode 100644 output/dotted.pdf create mode 100644 src/dotted.php create mode 100644 src/hello-world.php diff --git a/.gitignore b/.gitignore index 61ead86..28d0a93 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /vendor +/output diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..d6d5214 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,70 @@ +# Repository Guidelines + +## Project Structure & Module Organization + +This is a small PHP Composer project for generating PDF files with `tecnickcom/tc-lib-pdf`. + +- `src/` contains executable PDF scripts. +- `src/hello-world.php` is a minimal PDF example. +- `src/dotted.php` generates A4 dotted technical drawing paper. +- `output/` contains generated PDFs such as `output/dotted.pdf`; it is ignored by Git. +- `vendor/` contains Composer dependencies and generated font assets; it is ignored by Git. +- `README.md` documents setup and user-facing commands. + +There is currently no dedicated `tests/` directory. + +## Build, Test, and Development Commands + +Install project dependencies: + +```powershell +composer install +``` + +Generate font definitions required by `tc-lib-pdf-font`: + +```powershell +cd vendor\tecnickcom\tc-lib-pdf-font\util +composer install +cd .. +composer install +cd util +php bulk_convert.php +``` + +Check PHP syntax: + +```powershell +php -l src\hello-world.php +php -l src\dotted.php +``` + +Generate dotted paper from CLI: + +```powershell +php src\dotted.php --dot-size=0.4 --space=5 +``` + +Open via web server: + +```text +http://localhost/pdfcreator/src/dotted.php?dot-size=0.4&space=5 +``` + +## Coding Style & Naming Conventions + +Use PHP 8 syntax and keep scripts under the `Igor\Pdfcreator` namespace. Prefer clear helper functions for parameter parsing, validation, and PDF drawing. Use four-space indentation, strict readable variable names like `$pageWidth`, `$tableBox`, and `$dotSize`, and kebab-case filenames for browser-facing scripts, for example `hello-world.php`. + +Avoid writing generated files into tracked paths. Keep `vendor/` and `output/` uncommitted. + +## Testing Guidelines + +No automated test suite is configured yet. For changes, at minimum run `php -l` on modified PHP files and execute the affected script from CLI. For `src/dotted.php`, verify valid parameters generate `output/dotted.pdf` and invalid values such as `--dot-size=0` or `--space=1` fail with an error. + +## Commit & Pull Request Guidelines + +Git history was not available in this environment, so use concise imperative commit messages such as `Add dotted paper generator` or `Update font setup docs`. Pull requests should describe the change, list commands run, mention generated output paths, and include screenshots or PDFs when visual PDF layout changes. + +## Security & Configuration Tips + +Do not commit generated PDFs, Composer vendor files, or local configuration. Keep web scripts free of output before PDF headers. Validate all CLI and query parameters before using them in PDF generation. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8766898 --- /dev/null +++ b/README.md @@ -0,0 +1,179 @@ +# pdfCreator + +Projekt na generovanie PDF suborov pomocou `tecnickcom/tc-lib-pdf`. + +## Slovensky + +### Inicializacia po cistom clone + +Po novom clone repozitara alebo po zmazani adresara `vendor` najprv nainstaluj hlavne Composer zavislosti: + +```powershell +composer install +``` + +Samotny `composer install` nevygeneruje PDF font definicie, ktore `tc-lib-pdf-font` nacitava pri renderovani. Bez nich moze aplikacia spadnut napr. s chybou: + +```text +unable to read file: helvetica.json +``` + +Fonty vygeneruj cez utilitny balicek v `vendor/tecnickcom/tc-lib-pdf-font`: + +```powershell +cd vendor\tecnickcom\tc-lib-pdf-font\util +composer install + +cd .. +composer install + +cd util +php bulk_convert.php +``` + +Po uspesnom behu by mal existovat napr. subor: + +```text +vendor\tecnickcom\tc-lib-pdf-font\target\fonts\core\helvetica.json +``` + +### Skripty + +Hello world PDF: + +```powershell +php src\hello-world.php +``` + +Bodkovany papier pre technicke nacrtky: + +```powershell +php src\dotted.php +``` + +Volitelne parametre bodkovaneho papiera: + +```powershell +php src\dotted.php --dot-size=0.4 --space=5 +``` + +Vystup z CLI sa ulozi do: + +```text +output\dotted.pdf +``` + +### Web spustenie + +Hello world PDF: + +```text +http://localhost/pdfcreator/src/hello-world.php +``` + +Bodkovany papier inline v prehliadaci: + +```text +http://localhost/pdfcreator/src/dotted.php?dot-size=0.4&space=5 +``` + +### Overenie + +Syntax PHP skriptov: + +```powershell +php -l src\hello-world.php +php -l src\dotted.php +``` + +### Poznamka k `vendor` a `output` + +Adresare `vendor` a `output` su ignorovane v Gite. Ak sa `vendor` zmaze alebo sa projekt inicializuje na inom stroji, treba instalaciu zavislosti a generovanie fontov zopakovat. + +## English + +### Fresh Repository Setup + +After cloning the repository, or after deleting the `vendor` directory, install the main Composer dependencies first: + +```powershell +composer install +``` + +The root `composer install` does not generate the PDF font definition files used by `tc-lib-pdf-font` at runtime. Without them, the application may fail with an error such as: + +```text +unable to read file: helvetica.json +``` + +Generate the fonts through the utility package inside `vendor/tecnickcom/tc-lib-pdf-font`: + +```powershell +cd vendor\tecnickcom\tc-lib-pdf-font\util +composer install + +cd .. +composer install + +cd util +php bulk_convert.php +``` + +After a successful run, this file should exist: + +```text +vendor\tecnickcom\tc-lib-pdf-font\target\fonts\core\helvetica.json +``` + +### Scripts + +Hello world PDF: + +```powershell +php src\hello-world.php +``` + +Dotted paper for technical sketches: + +```powershell +php src\dotted.php +``` + +Optional dotted paper parameters: + +```powershell +php src\dotted.php --dot-size=0.4 --space=5 +``` + +CLI output is saved to: + +```text +output\dotted.pdf +``` + +### Web Usage + +Hello world PDF: + +```text +http://localhost/pdfcreator/src/hello-world.php +``` + +Dotted paper rendered inline in the browser: + +```text +http://localhost/pdfcreator/src/dotted.php?dot-size=0.4&space=5 +``` + +### Verification + +Check PHP syntax: + +```powershell +php -l src\hello-world.php +php -l src\dotted.php +``` + +### Notes About `vendor` and `output` + +The `vendor` and `output` directories are ignored by Git. If `vendor` is deleted or the project is initialized on another machine, repeat the dependency installation and font generation steps. diff --git a/output/dotted.pdf b/output/dotted.pdf new file mode 100644 index 0000000000000000000000000000000000000000..02f23e65bbb30d8c6031a68359d790612c4323bd GIT binary patch literal 220427 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 literal 0 HcmV?d00001 diff --git a/src/dotted.php b/src/dotted.php new file mode 100644 index 0000000..2351303 --- /dev/null +++ b/src/dotted.php @@ -0,0 +1,287 @@ + parseFloatParam($options['dot-size'] ?? null, 0.35), + 'space' => parseFloatParam($options['space'] ?? null, 5.0), + ]; + } + + return [ + 'dot-size' => parseFloatParam($_GET['dot-size'] ?? null, 0.35), + 'space' => parseFloatParam($_GET['space'] ?? null, 5.0), + ]; +} + +function parseFloatParam(mixed $value, float $default): float +{ + if ($value === null || $value === '') { + return $default; + } + + if (\is_array($value)) { + fail('Parameter value must be a single number.'); + } + + $normalized = \str_replace(',', '.', (string) $value); + if (! \is_numeric($normalized)) { + fail('Parameter value must be numeric.'); + } + + return (float) $normalized; +} + +/** + * @param array{dot-size: float, space: float} $params + */ +function validateParams(array $params): void +{ + if ($params['dot-size'] <= 0 || $params['dot-size'] > 2) { + fail('Invalid --dot-size value. Use a number greater than 0 and at most 2 mm.'); + } + + if ($params['space'] < 2 || $params['space'] > 20) { + fail('Invalid --space value. Use a number from 2 to 20 mm.'); + } +} + +function fail(string $message): never +{ + if (PHP_SAPI === 'cli') { + \fwrite(STDERR, 'Error: ' . $message . PHP_EOL); + exit(1); + } + + \http_response_code(400); + \header('Content-Type: text/plain; charset=utf-8'); + echo 'Error: ' . $message; + exit; +} + +function getLineStyle(float $width, string $color): array +{ + return [ + 'lineWidth' => $width, + 'lineCap' => 'butt', + 'lineJoin' => 'miter', + 'dashArray' => [], + 'dashPhase' => 0, + 'lineColor' => $color, + ]; +} + +function getFillStyle(string $color): array +{ + return [ + 'all' => [ + 'lineWidth' => 0, + 'lineCap' => 'butt', + 'lineJoin' => 'miter', + 'dashArray' => [], + 'dashPhase' => 0, + 'lineColor' => $color, + 'fillColor' => $color, + ], + ]; +} + +/** + * @param array{x: float, y: float, width: float, height: float} $tableBox + */ +function drawDotGrid( + \Com\Tecnick\Pdf\Tcpdf $pdf, + float $left, + float $top, + float $right, + float $bottom, + float $dotSize, + float $space, + array $tableBox +): void { + $radius = $dotSize / 2.0; + $dotStyle = getFillStyle('rgb(145,145,145)'); + + for ($y = $top; $y <= $bottom; $y += $space) { + for ($x = $left; $x <= $right; $x += $space) { + $insideTable = ( + $x >= $tableBox['x'] + && $x <= ($tableBox['x'] + $tableBox['width']) + && $y >= $tableBox['y'] + && $y <= ($tableBox['y'] + $tableBox['height']) + ); + + if ($insideTable) { + continue; + } + + $pdf->page->addContent($pdf->graph->getCircle($x, $y, $radius, 0, 360, 'F', $dotStyle)); + } + } +} + +function drawFrame(\Com\Tecnick\Pdf\Tcpdf $pdf, float $pageWidth, float $pageHeight): void +{ + $outerMargin = 5.0; + + $pdf->page->addContent( + $pdf->graph->getRect( + $outerMargin, + $outerMargin, + $pageWidth - (2 * $outerMargin), + $pageHeight - (2 * $outerMargin), + 'D', + ['all' => getLineStyle(0.18, 'black')] + ) + ); +} + +/** + * @param array{x: float, y: float, width: float, height: float} $tableBox + */ +function drawTitleBlock(\Com\Tecnick\Pdf\Tcpdf $pdf, array $tableBox): void +{ + assertFontIsAvailable(); + + $font = $pdf->font->insert($pdf->pon, 'helvetica', '', 7.0, 0.0, 1.0); + $pdf->page->addContent($font['out']); + $pdf->page->addContent($pdf->color->getPdfColor('black')); + + $lineStyle = getLineStyle(0.16, 'black'); + $rowHeight = $tableBox['height'] / 4.0; + $labelWidth = 28.0; + + $pdf->page->addContent( + $pdf->graph->getRect($tableBox['x'], $tableBox['y'], $tableBox['width'], $tableBox['height'], 'D', [ + 'all' => $lineStyle, + ]) + ); + + for ($row = 1; $row < 4; ++$row) { + $lineY = $tableBox['y'] + ($row * $rowHeight); + $pdf->page->addContent( + $pdf->graph->getLine($tableBox['x'], $lineY, $tableBox['x'] + $tableBox['width'], $lineY, $lineStyle) + ); + } + + $pdf->page->addContent( + $pdf->graph->getLine( + $tableBox['x'] + $labelWidth, + $tableBox['y'], + $tableBox['x'] + $labelWidth, + $tableBox['y'] + $tableBox['height'], + $lineStyle + ) + ); + + $labels = ['Názov projektu', 'Autor', 'Dátum', 'Revízia']; + foreach ($labels as $index => $label) { + $pdf->page->addContent( + $pdf->getTextCell( + $label, + $tableBox['x'] + 2.0, + $tableBox['y'] + ($index * $rowHeight) + 2.7, + $labelWidth - 4.0, + 4.0, + valign: 'C', + halign: 'L', + drawcell: false + ) + ); + } +} + +function assertFontIsAvailable(): void +{ + $fontFile = K_PATH_FONTS . DIRECTORY_SEPARATOR . 'core' . DIRECTORY_SEPARATOR . 'helvetica.json'; + if (! \is_readable($fontFile)) { + fail( + 'Missing font file helvetica.json. Generate fonts first: ' + . 'cd vendor\\tecnickcom\\tc-lib-pdf-font\\util && composer install && cd .. && composer install ' + . '&& cd util && php bulk_convert.php' + ); + } +} + +/** + * @param array{dot-size: float, space: float} $params + */ +function buildPdf(\Com\Tecnick\Pdf\Tcpdf $pdf, array $params): string +{ + $pageWidth = 210.0; + $pageHeight = 297.0; + $innerMargin = 10.0; + $tableBox = [ + 'width' => 80.0, + 'height' => 40.0, + 'x' => $pageWidth - $innerMargin - 80.0, + 'y' => $pageHeight - $innerMargin - 40.0, + ]; + + $pdf->setCreator('pdfCreator'); + $pdf->setAuthor(''); + $pdf->setSubject('Dotted technical drawing paper'); + $pdf->setTitle('Dotted technical drawing paper'); + $pdf->setKeywords('PDF dotted grid technical drawing floor plan'); + $pdf->setPDFFilename('dotted.pdf'); + + $pdf->addPage(['format' => 'A4', 'orientation' => 'P']); + + drawFrame($pdf, $pageWidth, $pageHeight); + drawDotGrid( + $pdf, + $innerMargin, + $innerMargin, + $pageWidth - $innerMargin, + $pageHeight - $innerMargin, + $params['dot-size'], + $params['space'], + $tableBox + ); + drawTitleBlock($pdf, $tableBox); + + return $pdf->getOutPDFString(); +} + +function outputPdf(\Com\Tecnick\Pdf\Tcpdf $pdf, string $rawPdf): void +{ + if (PHP_SAPI !== 'cli') { + if (\ob_get_length() !== false && \ob_get_length() > 0) { + \ob_clean(); + } + + $pdf->renderPDF($rawPdf); + return; + } + + $outputDir = \dirname(__DIR__) . DIRECTORY_SEPARATOR . 'output'; + if (! \is_dir($outputDir) && ! \mkdir($outputDir, 0775, true) && ! \is_dir($outputDir)) { + fail('Unable to create output directory: ' . $outputDir); + } + + $outputFile = $outputDir . DIRECTORY_SEPARATOR . 'dotted.pdf'; + if (\file_put_contents($outputFile, $rawPdf) === false) { + fail('Unable to write PDF file: ' . $outputFile); + } + + echo 'PDF generated: ' . $outputFile . PHP_EOL; +} + +$params = readParams(); +validateParams($params); +$rawPdf = buildPdf($pdf, $params); +outputPdf($pdf, $rawPdf); diff --git a/src/hello-world.php b/src/hello-world.php new file mode 100644 index 0000000..bdc5943 --- /dev/null +++ b/src/hello-world.php @@ -0,0 +1,27 @@ +font->insert($pdf->pon, 'helvetica', '', 12); + +$page = $pdf->addPage(); + +$pdf->page->addContent($bfont['out']); + +$html = '

Hello, PDF!

Generated with tc-lib-pdf.

'; + +$pdf->addHTMLCell( + html: $html, + posx: 15, // mm from left page edge + posy: 20, // mm from top page edge + width: 180, // mm wide (0 = to right margin) +); + +$rawpdf = $pdf->getOutPDFString(); + +$pdf->renderPDF($rawpdf); \ No newline at end of file