{"id":123,"date":"2026-01-19T21:50:13","date_gmt":"2026-01-19T18:50:13","guid":{"rendered":"https:\/\/blog.giturn.com\/?p=123"},"modified":"2026-01-23T23:04:36","modified_gmt":"2026-01-23T20:04:36","slug":"how-to-program-an-invoice-engine-engineers-office","status":"publish","type":"post","link":"https:\/\/giturn.com\/blog\/how-to-program-an-invoice-engine-engineers-office\/","title":{"rendered":"\u062d\u0644 \u0639\u0642\u062f\u0629 \u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0641\u064a \u0645\u0644\u0641\u0627\u062a PDF: \u0643\u064a\u0641 \u0628\u0631\u0645\u062c\u0646\u0627 \u0645\u062d\u0631\u0643 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631 \u0644\u0645\u0643\u062a\u0628 &#8220;\u0627\u0644\u0645\u0647\u0646\u062f&#8221;"},"content":{"rendered":"<p data-path-to-node=\"9\">\u0623\u062b\u0646\u0627\u0621 \u0628\u0631\u0645\u062c\u0629 \u0627\u0644\u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0627\u0644\u064a \u0644\u0645\u0643\u062a\u0628 <b data-path-to-node=\"9\" data-index-in-node=\"32\">\u0627\u0644\u0645\u0647\u0646\u062f \u0644\u0644\u062a\u0631\u062c\u0645\u0629<\/b>\u060c \u0648\u0627\u062c\u0647\u0646\u0627 \u062a\u062d\u062f\u064a\u0627\u064b \u0643\u0644\u0627\u0633\u064a\u0643\u064a\u0627\u064b \u064a\u0648\u0627\u062c\u0647\u0647 \u0643\u0644 \u0645\u0628\u0631\u0645\u062c \u0639\u0631\u0628\u064a: \u062a\u0648\u0644\u064a\u062f \u0641\u0648\u0627\u062a\u064a\u0631 \u0628\u0635\u064a\u063a\u0629 PDF \u062a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0646\u0635\u0648\u0635 \u0639\u0631\u0628\u064a\u0629 \u0648\u0625\u0646\u0643\u0644\u064a\u0632\u064a\u0629 \u0645\u062e\u062a\u0644\u0637\u0629. \u0627\u0644\u0645\u0643\u062a\u0628\u0627\u062a \u0627\u0644\u0642\u064a\u0627\u0633\u064a\u0629 \u063a\u0627\u0644\u0628\u0627\u064b \u0645\u0627 \u062a\u0641\u0634\u0644 \u0641\u064a \u0639\u0631\u0636 \u0627\u0644\u062e\u0637 \u0627\u0644\u0639\u0631\u0628\u064a \u0628\u0634\u0643\u0644 \u0645\u062a\u0635\u0644\u060c \u0623\u0648 \u062a\u0638\u0647\u0631\u0647 \u0643\u0631\u0645\u0648\u0632 \u0627\u0633\u062a\u0641\u0647\u0627\u0645 <code data-path-to-node=\"9\" data-index-in-node=\"242\">????<\/code>. \u0627\u0644\u062d\u0644 \u0627\u0644\u0630\u064a \u0627\u0639\u062a\u0645\u062f\u0646\u0627\u0647 \u0641\u064a <b data-path-to-node=\"9\" data-index-in-node=\"270\">Giturn<\/b> \u0643\u0627\u0646 \u0628\u0646\u0627\u0621 &#8220;Micro-service&#8221; \u0645\u062e\u0635\u0635 \u0644\u062a\u0648\u0644\u064a\u062f \u0627\u0644\u062a\u0642\u0627\u0631\u064a\u0631 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u0643\u062a\u0628\u0629 <b data-path-to-node=\"9\" data-index-in-node=\"338\">mPDF<\/b> \u0627\u0644\u0645\u0639\u062f\u0644\u0629\u060c \u0644\u0636\u0645\u0627\u0646 \u0638\u0647\u0648\u0631 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0628\u0634\u0643\u0644 \u0627\u062d\u062a\u0631\u0627\u0641\u064a \u0648\u062f\u0642\u064a\u0642.<\/p>\n<p data-path-to-node=\"10\">\u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u0634\u0631\u062d\u060c \u0646\u0633\u062a\u0639\u0631\u0636 \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u062e\u0644\u0641\u064a (Backend) \u0627\u0644\u0645\u0633\u0624\u0648\u0644 \u0639\u0646 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064a\u0629.<\/p>\n<hr data-path-to-node=\"11\" \/>\n<h3 data-path-to-node=\"12\">\u0627\u0644\u062c\u0632\u0621 \u0627\u0644\u0623\u0648\u0644: \u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u062d\u0631\u0643 \u0648\u0627\u0644\u062e\u0637\u0648\u0637 (Configuring mPDF)<\/h3>\n<p data-path-to-node=\"13\"><i data-path-to-node=\"13\" data-index-in-node=\"0\">(\u0627\u0643\u062a\u0628 \u0647\u0630\u0627 \u0627\u0644\u0634\u0631\u062d \u0642\u0628\u0644 \u0627\u0644\u0643\u0648\u062f)<\/i> \u0627\u0644\u0633\u0631 \u0644\u064a\u0633 \u0641\u064a \u0627\u0644\u0645\u0643\u062a\u0628\u0629 \u0641\u0642\u0637\u060c \u0628\u0644 \u0641\u064a \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062e\u0637\u0648\u0637 (Font Config). \u064a\u062c\u0628 \u062a\u0648\u062c\u064a\u0647 \u0627\u0644\u0645\u0643\u062a\u0628\u0629 \u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062e\u0637\u0648\u0637 \u062a\u062f\u0639\u0645 \u0627\u0644\u0640 Unicode \u0627\u0644\u0639\u0631\u0628\u064a (\u0645\u062b\u0644 Cairo \u0623\u0648 Lateef).<\/p>\n<p data-path-to-node=\"14\"><b data-path-to-node=\"14\" data-index-in-node=\"0\">(\u0627\u0646\u0633\u062e \u0647\u0630\u0627 \u0627\u0644\u0643\u0648\u062f \u0648\u0636\u0639\u0647 \u0641\u064a Code Block \u0648\u0627\u062e\u062a\u0631 \u0627\u0644\u0644\u063a\u0629 PHP):<\/b><\/p>\n<div class=\"code-block ng-tns-c372103520-345 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjipuvt4peSAxUAAAAAHQAAAAAQuAU\">\n<div class=\"code-block-decoration header-formatted gds-title-s ng-tns-c372103520-345 ng-star-inserted\">\n<p><span class=\"ng-tns-c372103520-345\">PHP<\/span><\/p>\n<div class=\"buttons ng-tns-c372103520-345 ng-star-inserted\"><\/div>\n<\/div>\n<div class=\"formatted-code-block-internal-container ng-tns-c372103520-345\">\n<div class=\"animated-opacity ng-tns-c372103520-345\">\n<pre class=\"ng-tns-c372103520-345\"><code class=\"code-container formatted ng-tns-c372103520-345\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Mpdf<\/span>\\<span class=\"hljs-title\">Mpdf<\/span>;\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">generateInvoice<\/span>(<span class=\"hljs-params\"><span class=\"hljs-variable\">$invoiceData<\/span><\/span>) <\/span>{\r\n    \r\n    <span class=\"hljs-comment\">\/\/ 1. \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062e\u0637\u0648\u0637 \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0644\u0636\u0645\u0627\u0646 \u0627\u0644\u0638\u0647\u0648\u0631 \u0627\u0644\u0635\u062d\u064a\u062d<\/span>\r\n    <span class=\"hljs-variable\">$defaultConfig<\/span> = (<span class=\"hljs-keyword\">new<\/span> \\Mpdf\\Config\\ConfigVariables())-&gt;getDefaults();\r\n    <span class=\"hljs-variable\">$fontDirs<\/span> = <span class=\"hljs-variable\">$defaultConfig<\/span>[<span class=\"hljs-string\">'fontDir'<\/span>];\r\n\r\n    <span class=\"hljs-variable\">$defaultFontConfig<\/span> = (<span class=\"hljs-keyword\">new<\/span> \\Mpdf\\Config\\FontVariables())-&gt;getDefaults();\r\n    <span class=\"hljs-variable\">$fontData<\/span> = <span class=\"hljs-variable\">$defaultFontConfig<\/span>[<span class=\"hljs-string\">'fontdata'<\/span>];\r\n\r\n    <span class=\"hljs-comment\">\/\/ 2. \u062a\u0647\u064a\u0626\u0629 \u0627\u0644\u0645\u0643\u062a\u0628\u0629<\/span>\r\n    <span class=\"hljs-variable\">$mpdf<\/span> = <span class=\"hljs-keyword\">new<\/span> Mpdf([\r\n        <span class=\"hljs-string\">'mode'<\/span> =&gt; <span class=\"hljs-string\">'utf-8'<\/span>,\r\n        <span class=\"hljs-string\">'format'<\/span> =&gt; <span class=\"hljs-string\">'A4'<\/span>,\r\n        <span class=\"hljs-string\">'fontDir'<\/span> =&gt; array_merge(<span class=\"hljs-variable\">$fontDirs<\/span>, [\r\n            public_path(<span class=\"hljs-string\">'fonts'<\/span>), <span class=\"hljs-comment\">\/\/ \u0645\u0633\u0627\u0631 \u0627\u0644\u062e\u0637\u0648\u0637 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643<\/span>\r\n        ]),\r\n        <span class=\"hljs-string\">'fontdata'<\/span> =&gt; <span class=\"hljs-variable\">$fontData<\/span> + [\r\n            <span class=\"hljs-string\">'cairo'<\/span> =&gt; [\r\n                <span class=\"hljs-string\">'R'<\/span> =&gt; <span class=\"hljs-string\">'Cairo-Regular.ttf'<\/span>,\r\n                <span class=\"hljs-string\">'B'<\/span> =&gt; <span class=\"hljs-string\">'Cairo-Bold.ttf'<\/span>,\r\n                <span class=\"hljs-string\">'useOTL'<\/span> =&gt; <span class=\"hljs-number\">0xFF<\/span>, <span class=\"hljs-comment\">\/\/ \u062a\u0641\u0639\u064a\u0644 \u062e\u0635\u0627\u0626\u0635 OpenType<\/span>\r\n                <span class=\"hljs-string\">'useKashida'<\/span> =&gt; <span class=\"hljs-number\">75<\/span>, <span class=\"hljs-comment\">\/\/ \u0644\u0644\u0643\u0634\u064a\u062f\u0629 \u0627\u0644\u0639\u0631\u0628\u064a\u0629<\/span>\r\n            ]\r\n        ],\r\n        <span class=\"hljs-string\">'default_font'<\/span> =&gt; <span class=\"hljs-string\">'cairo'<\/span> <span class=\"hljs-comment\">\/\/ \u062c\u0639\u0644 \u0627\u0644\u062e\u0637 \u0627\u0644\u0639\u0631\u0628\u064a \u0647\u0648 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a<\/span>\r\n    ]);\r\n    \r\n    <span class=\"hljs-comment\">\/\/ ... \u064a\u062a\u0628\u0639<\/span>\r\n}\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<hr data-path-to-node=\"16\" \/>\n<h3 data-path-to-node=\"17\">\u0627\u0644\u062c\u0632\u0621 \u0627\u0644\u062b\u0627\u0646\u064a: \u062d\u0642\u0646 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0648\u062a\u0648\u0644\u064a\u062f \u0627\u0644\u0645\u0644\u0641 (Data Injection)<\/h3>\n<p data-path-to-node=\"18\"><i data-path-to-node=\"18\" data-index-in-node=\"0\">(\u0627\u0643\u062a\u0628 \u0647\u0630\u0627 \u0627\u0644\u0634\u0631\u062d \u0642\u0628\u0644 \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u062b\u0627\u0646\u064a)<\/i> \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0631\u0633\u0645 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0628\u0631\u0645\u062c\u064a\u0627\u064b (\u0645\u0645\u0627 \u064a\u062c\u0639\u0644 \u0627\u0644\u062a\u0639\u062f\u064a\u0644 \u0635\u0639\u0628\u0627\u064b)\u060c \u0642\u0645\u0646\u0627 \u0628\u062a\u0635\u0645\u064a\u0645 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0643\u0645\u0644\u0641 HTML (View)\u060c \u062b\u0645 \u0646\u0642\u0648\u0645 \u0628\u0640 &#8220;\u062d\u0642\u0646&#8221; \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0639\u0645\u064a\u0644 \u0648\u0627\u0644\u062f\u0641\u0639 \u062f\u0627\u062e\u0644\u0647\u0627\u060c \u0648\u0623\u062e\u064a\u0631\u0627\u064b \u062a\u062d\u0648\u064a\u0644\u0647\u0627 \u0625\u0644\u0649 PDF.<\/p>\n<p data-path-to-node=\"19\"><b data-path-to-node=\"19\" data-index-in-node=\"0\">(\u0627\u0646\u0633\u062e \u0647\u0630\u0627 \u0627\u0644\u0643\u0648\u062f \u0648\u0636\u0639\u0647 \u0641\u064a Code Block &#8211; PHP):<\/b><\/p>\n<div class=\"code-block ng-tns-c372103520-346 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjipuvt4peSAxUAAAAAHQAAAAAQuQU\">\n<div class=\"code-block-decoration header-formatted gds-title-s ng-tns-c372103520-346 ng-star-inserted\">\n<p><span class=\"ng-tns-c372103520-346\">PHP<\/span><\/p>\n<div class=\"buttons ng-tns-c372103520-346 ng-star-inserted\"><\/div>\n<\/div>\n<div class=\"formatted-code-block-internal-container ng-tns-c372103520-346\">\n<div class=\"animated-opacity ng-tns-c372103520-346\">\n<pre class=\"ng-tns-c372103520-346\"><code class=\"code-container formatted ng-tns-c372103520-346\" role=\"text\" data-test-id=\"code-content\">    <span class=\"hljs-comment\">\/\/ \u062a\u0627\u0628\u0639 \u0644\u0644\u062f\u0627\u0644\u0629 \u0627\u0644\u0633\u0627\u0628\u0642\u0629...<\/span>\r\n\r\n    <span class=\"hljs-comment\">\/\/ 3. \u062a\u062c\u0647\u064a\u0632 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0642\u0627\u062f\u0645\u0629 \u0645\u0646 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a<\/span>\r\n    <span class=\"hljs-variable\">$data<\/span> = [\r\n        <span class=\"hljs-string\">'invoice_id'<\/span> =&gt; <span class=\"hljs-variable\">$invoiceData<\/span>-&gt;id,\r\n        <span class=\"hljs-string\">'client_name'<\/span> =&gt; <span class=\"hljs-variable\">$invoiceData<\/span>-&gt;client-&gt;name, <span class=\"hljs-comment\">\/\/ \u0627\u0633\u0645 \u0627\u0644\u0639\u0645\u064a\u0644 (\u0639\u0631\u0628\u064a)<\/span>\r\n        <span class=\"hljs-string\">'date'<\/span> =&gt; date(<span class=\"hljs-string\">'Y-m-d'<\/span>),\r\n        <span class=\"hljs-string\">'items'<\/span> =&gt; <span class=\"hljs-variable\">$invoiceData<\/span>-&gt;items, <span class=\"hljs-comment\">\/\/ \u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0644\u062e\u062f\u0645\u0627\u062a<\/span>\r\n        <span class=\"hljs-string\">'total'<\/span> =&gt; <span class=\"hljs-variable\">$invoiceData<\/span>-&gt;total_amount\r\n    ];\r\n\r\n    <span class=\"hljs-comment\">\/\/ 4. \u062a\u062d\u0648\u064a\u0644 \u0645\u0644\u0641 HTML (Blade View) \u0625\u0644\u0649 \u0633\u062a\u0631\u064a\u0646\u062c<\/span>\r\n    <span class=\"hljs-variable\">$html<\/span> = view(<span class=\"hljs-string\">'invoices.template_v1'<\/span>, <span class=\"hljs-variable\">$data<\/span>)-&gt;render();\r\n\r\n    <span class=\"hljs-comment\">\/\/ 5. \u0627\u0644\u0643\u062a\u0627\u0628\u0629 \u062f\u0627\u062e\u0644 \u0627\u0644\u0640 PDF<\/span>\r\n    <span class=\"hljs-variable\">$mpdf<\/span>-&gt;WriteHTML(<span class=\"hljs-variable\">$html<\/span>);\r\n\r\n    <span class=\"hljs-comment\">\/\/ 6. \u062a\u0635\u062f\u064a\u0631 \u0627\u0644\u0645\u0644\u0641 (\u0625\u0645\u0627 \u062a\u062d\u0645\u064a\u0644 \u0645\u0628\u0627\u0634\u0631 \u0623\u0648 \u062d\u0641\u0638 \u0641\u064a \u0627\u0644\u0633\u0631\u0641\u0631)<\/span>\r\n    <span class=\"hljs-comment\">\/\/ 'D' \u062a\u0639\u0646\u064a Download<\/span>\r\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-variable\">$mpdf<\/span>-&gt;Output(<span class=\"hljs-string\">\"Invoice_<span class=\"hljs-subst\">{$invoiceData-&gt;id}<\/span>.pdf\"<\/span>, <span class=\"hljs-string\">'D'<\/span>);\r\n}\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<hr data-path-to-node=\"21\" \/>\n<h3 data-path-to-node=\"22\">(\u062e\u0627\u062a\u0645\u0629 \u0627\u0644\u0645\u0642\u0627\u0644)<\/h3>\n<p data-path-to-node=\"23\">\u0627\u0644\u0646\u062a\u064a\u062c\u0629 \u0647\u064a \u0641\u0627\u062a\u0648\u0631\u0629 \u0631\u0642\u0645\u064a\u0629 \u0628\u062f\u0642\u0629 \u0639\u0627\u0644\u064a\u0629\u060c \u062a\u062f\u0639\u0645 \u0627\u0644\u0639\u0631\u0628\u064a\u0629 100%\u060c \u0648\u064a\u0645\u0643\u0646 \u0623\u0631\u0634\u0641\u062a\u0647\u0627 \u0623\u0648 \u0625\u0631\u0633\u0627\u0644\u0647\u0627 \u0644\u0644\u0639\u0645\u064a\u0644 \u0639\u0628\u0631 \u0648\u0627\u062a\u0633\u0627\u0628 \u0628\u0636\u063a\u0637\u0629 \u0632\u0631. \u0641\u064a <b data-path-to-node=\"23\" data-index-in-node=\"111\">Giturn<\/b>\u060c \u0646\u062d\u0646 \u0646\u0647\u062a\u0645 \u0628\u0647\u0630\u0647 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u062f\u0642\u064a\u0642\u0629 \u0644\u0623\u0646\u0646\u0627 \u0646\u0639\u0644\u0645 \u0623\u0646 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0647\u064a \u062c\u0632\u0621 \u0645\u0646 \u0647\u0648\u064a\u0629 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u062a\u062c\u0627\u0631\u064a\u0629.<\/p>\n<p data-path-to-node=\"24\">\u0647\u0644 \u062a\u062d\u062a\u0627\u062c \u0644\u0646\u0638\u0627\u0645 \u0645\u062d\u0627\u0633\u0628\u064a \u0623\u0648 \u0625\u062f\u0627\u0631\u064a \u0645\u062e\u0635\u0635 \u0644\u0634\u0631\u0643\u062a\u0643\u061f<br \/>\n<b data-path-to-node=\"24\" data-index-in-node=\"44\">[\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0646\u0627 \u0644\u0628\u0646\u0627\u0621 \u0646\u0638\u0627\u0645\u0643 \u0627\u0644\u062e\u0627\u0635]<\/b><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0623\u062b\u0646\u0627\u0621 \u0628\u0631\u0645\u062c\u0629 \u0627\u0644\u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0627\u0644\u064a \u0644\u0645\u0643\u062a\u0628 \u0627\u0644\u0645\u0647\u0646\u062f \u0644\u0644\u062a\u0631\u062c\u0645\u0629\u060c \u0648\u0627\u062c\u0647\u0646\u0627 \u062a\u062d\u062f\u064a\u0627\u064b \u0643\u0644\u0627\u0633\u064a\u0643\u064a\u0627\u064b \u064a\u0648\u0627\u062c\u0647\u0647 \u0643\u0644 \u0645\u0628\u0631\u0645\u062c \u0639\u0631\u0628\u064a: \u062a\u0648\u0644\u064a\u062f \u0641\u0648\u0627\u062a\u064a\u0631 \u0628\u0635\u064a\u063a\u0629 PDF \u062a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0646\u0635\u0648\u0635 \u0639\u0631\u0628\u064a\u0629 \u0648\u0625\u0646\u0643\u0644\u064a\u0632\u064a\u0629 \u0645\u062e\u062a\u0644\u0637\u0629. \u0627\u0644\u0645\u0643\u062a\u0628\u0627\u062a \u0627\u0644\u0642\u064a\u0627\u0633\u064a\u0629 \u063a\u0627\u0644\u0628\u0627\u064b \u0645\u0627 \u062a\u0641\u0634\u0644 \u0641\u064a \u0639\u0631\u0636 \u0627\u0644\u062e\u0637 \u0627\u0644\u0639\u0631\u0628\u064a \u0628\u0634\u0643\u0644 \u0645\u062a\u0635\u0644\u060c \u0623\u0648 \u062a\u0638\u0647\u0631\u0647 \u0643\u0631\u0645\u0648\u0632 \u0627\u0633\u062a\u0641\u0647\u0627\u0645 ????. \u0627\u0644\u062d\u0644 \u0627\u0644\u0630\u064a \u0627\u0639\u062a\u0645\u062f\u0646\u0627\u0647 \u0641\u064a Giturn \u0643\u0627\u0646 \u0628\u0646\u0627\u0621 &#8220;Micro-service&#8221; \u0645\u062e\u0635\u0635 \u0644\u062a\u0648\u0644\u064a\u062f \u0627\u0644\u062a\u0642\u0627\u0631\u064a\u0631 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u0643\u062a\u0628\u0629 mPDF \u0627\u0644\u0645\u0639\u062f\u0644\u0629\u060c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[14],"tags":[],"class_list":["post-123","post","type-post","status-publish","format-standard","hentry","category-14"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/posts\/123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/comments?post=123"}],"version-history":[{"count":2,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/posts\/123\/revisions"}],"predecessor-version":[{"id":145,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/posts\/123\/revisions\/145"}],"wp:attachment":[{"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/media?parent=123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/categories?post=123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/tags?post=123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}