{"id":2104,"date":"2026-08-13T22:47:17","date_gmt":"2026-08-14T01:47:17","guid":{"rendered":"https:\/\/code4delphi.com.br\/blog\/?p=2104"},"modified":"2026-08-13T23:45:28","modified_gmt":"2026-08-14T02:45:28","slug":"geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus","status":"publish","type":"post","link":"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/","title":{"rendered":"Gera\u00e7\u00e3o de PDFs com Delphi para VCL, FMX, WEB Core e Lazarus"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Gerar PDFs diretamente pela aplica\u00e7\u00e3o \u00e9 \u00fatil para criar relat\u00f3rios, comprovantes, contratos e outros documentos. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Neste artigo, vamos usar o <strong>TMS FNC PDF<\/strong> para gerar documentos PDF em aplica\u00e7\u00f5es Delphi <strong>VCL<\/strong>, <strong>FMX<\/strong>, <strong>WEB Core<\/strong> e <strong>Lazarus<\/strong>, inclusive em projetos FMX executados no Android.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a um exemplo pr\u00e1tico de como utilizar:<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title ez-toc-toggle\" style=\"cursor:pointer\">Sum\u00e1rio<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Alternar tabela de conte\u00fado\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#Uses_necessarias\" >Uses necess\u00e1rias<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#Criando_um_PDF_com_texto_e_imagem\" >Criando um PDF com texto e imagem<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#Entendendo_o_codigo\" >Entendendo o c\u00f3digo<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#Iniciando_o_documento\" >Iniciando o documento<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#Configurando_o_cabecalho_e_o_rodape\" >Configurando o cabe\u00e7alho e o rodap\u00e9<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#Adicionando_texto_ao_PDF\" >Adicionando texto ao PDF<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#Adicionando_uma_imagem\" >Adicionando uma imagem<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#Finalizando_o_documento\" >Finalizando o documento<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#Conclusao\" >Conclus\u00e3o<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#%F0%9F%8F%B7%EF%B8%8F_Cupom_de_desconto\" >\ud83c\udff7\ufe0f Cupom de desconto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/code4delphi.com.br\/blog\/geracao-de-pdfs-com-delphi-para-vcl-fmx-web-core-e-lazarus\/#Links_uteis\" >Links \u00fateis<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Uses_necessarias\"><\/span>Uses necess\u00e1rias<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A unit necess\u00e1ria depende do framework utilizado:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>uses\n  System.SysUtils,\n  System.Types,\n  \n  \/\/ USE PARA VCL\n  VCL.TMSFNCPDFLib;\n  \n  \/\/ USE PARA FireMonkey\n  FMX.TMSFNCPDFLib;\n  \n  \/\/ USE PARA TMS WEB Core\n  WEBLib.TMSFNCPDFLib;\n  \n  \/\/ USE PARA Lazarus\/LCL\n  LCLTMSFNCPDFLib;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F286C4\">uses<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  System.SysUtils,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  System.Types,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\">\/\/ USE PARA VCL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  VCL.TMSFNCPDFLib;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\">\/\/ USE PARA FireMonkey<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  FMX.TMSFNCPDFLib;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\">\/\/ USE PARA TMS WEB Core<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  WEBLib.TMSFNCPDFLib;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\">\/\/ USE PARA Lazarus\/LCL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  LCLTMSFNCPDFLib;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A unit <strong>System.Types<\/strong> disponibiliza <strong>TRectF<\/strong>, <strong>PointF<\/strong> e <strong>RectF<\/strong>, utilizados para definir posi\u00e7\u00f5es e \u00e1reas dentro da p\u00e1gina.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A classe principal permanece a mesma em todos os frameworks:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>TTMSFNCPDFLib<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">TTMSFNCPDFLib<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Criando_um_PDF_com_texto_e_imagem\"><\/span>Criando um PDF com texto e imagem<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No exemplo abaixo, o evento de um bot\u00e3o cria um PDF contendo cabe\u00e7alho, texto, imagem e rodap\u00e9:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>procedure TForm1.btnGeneratePDFClick(Sender: TObject);\nvar\n  LPDF: TTMSFNCPDFLib;\n  LHeaderRect: TRectF;\nbegin\n  LPDF := TTMSFNCPDFLib.Create;\n  try\n    LPDF.BeginDocument('PDF criado pelo Delphi.pdf');\n    LPDF.Header := 'Criando PDF com Delphi';\n    LPDF.Footer := 'P\u00e1gina 1\/1';\n    LPDF.NewPage;\n\n    LHeaderRect := LPDF.GetHeaderRect;\n    LPDF.Graphics.DrawText('Corpo do PDF', PointF(LHeaderRect.Left, LHeaderRect.Bottom + 20));\n\n    LPDF.Graphics.DrawImageFromFile('C:\\Temp\\c4d_logo.png',\n      RectF(LHeaderRect.Left, LHeaderRect.Bottom + 40, \n      LHeaderRect.Left + 200, LHeaderRect.Bottom + 120)\n    );\n\n    LPDF.EndDocument(True);\n  finally\n    LPDF.Free;\n  end;\nend;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F286C4\">procedure<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">TForm1.btnGeneratePDFClick<\/span><span style=\"color: #F6F6F4\">(Sender: TObject);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">var<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  LPDF: TTMSFNCPDFLib;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  LHeaderRect: TRectF;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  LPDF := TTMSFNCPDFLib.Create;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">try<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.BeginDocument(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">PDF criado pelo Delphi.pdf<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.Header := <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">Criando PDF com Delphi<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.Footer := <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">P\u00e1gina 1\/1<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.NewPage;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LHeaderRect := LPDF.GetHeaderRect;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.Graphics.DrawText(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">Corpo do PDF<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">, PointF(LHeaderRect.Left, LHeaderRect.Bottom + <\/span><span style=\"color: #BF9EEE\">20<\/span><span style=\"color: #F6F6F4\">));<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.Graphics.DrawImageFromFile(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">C:\\Temp\\c4d_logo.png<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      RectF(LHeaderRect.Left, LHeaderRect.Bottom + <\/span><span style=\"color: #BF9EEE\">40<\/span><span style=\"color: #F6F6F4\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      LHeaderRect.Left + <\/span><span style=\"color: #BF9EEE\">200<\/span><span style=\"color: #F6F6F4\">, LHeaderRect.Bottom + <\/span><span style=\"color: #BF9EEE\">120<\/span><span style=\"color: #F6F6F4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.EndDocument(<\/span><span style=\"color: #BF9EEE\">True<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">finally<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.Free;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">end<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">end<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Entendendo_o_codigo\"><\/span>Entendendo o c\u00f3digo<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para facilitar o entendimento, vou apresentar novamente o c\u00f3digo-fonte, desta vez com coment\u00e1rios explicando cada etapa da gera\u00e7\u00e3o do PDF:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>procedure TForm1.btnGeneratePDFClick(Sender: TObject);\nvar\n  LPDF: TTMSFNCPDFLib;\n  LHeaderRect: TRectF;\nbegin\n  \/\/ Cria a biblioteca respons\u00e1vel pela gera\u00e7\u00e3o do PDF\n  LPDF := TTMSFNCPDFLib.Create;\n  try\n    \/\/ Inicia o documento e define o nome ou caminho do arquivo gerado\n    LPDF.BeginDocument('PDF criado pelo Delphi.pdf');\n\n    \/\/ Configura o cabe\u00e7alho e o rodap\u00e9\n    LPDF.Header := 'Criando PDF com Delphi';\n    LPDF.Footer := 'P\u00e1gina 1\/1';\n\n    \/\/ Adiciona uma p\u00e1gina ao documento\n    LPDF.NewPage;\n\n    \/\/ Obt\u00e9m a \u00e1rea do cabe\u00e7alho para posicionar o conte\u00fado abaixo dele\n    LHeaderRect:= LPDF.GetHeaderRect;\n\n    \/\/ Desenha o texto 20 unidades abaixo do cabe\u00e7alho\n    LPDF.Graphics.DrawText('Corpo do PDF', PointF(LHeaderRect.Left, LHeaderRect.Bottom + 20));\n\n    \/\/ Carrega a imagem e a desenha em uma \u00e1rea de 200 \u00d7 80 unidades\n    LPDF.Graphics.DrawImageFromFile('C:\\Temp\\c4d_logo.png',\n      RectF(LHeaderRect.Left, LHeaderRect.Bottom + 40,\n      LHeaderRect.Left + 200, LHeaderRect.Bottom + 120)\n    );\n\n    \/\/ Finaliza, salva e abre o PDF no leitor padr\u00e3o do sistema\n    LPDF.EndDocument(True);\n  finally\n    \/\/ Libera a biblioteca mesmo se ocorrer alguma exce\u00e7\u00e3o\n    LPDF.Free;\n  end;\nend;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F286C4\">procedure<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">TForm1.btnGeneratePDFClick<\/span><span style=\"color: #F6F6F4\">(Sender: TObject);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">var<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  LPDF: TTMSFNCPDFLib;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  LHeaderRect: TRectF;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #7B7F8B\">\/\/ Cria a biblioteca respons\u00e1vel pela gera\u00e7\u00e3o do PDF<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  LPDF := TTMSFNCPDFLib.Create;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">try<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ Inicia o documento e define o nome ou caminho do arquivo gerado<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.BeginDocument(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">PDF criado pelo Delphi.pdf<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ Configura o cabe\u00e7alho e o rodap\u00e9<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.Header := <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">Criando PDF com Delphi<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.Footer := <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">P\u00e1gina 1\/1<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ Adiciona uma p\u00e1gina ao documento<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.NewPage;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ Obt\u00e9m a \u00e1rea do cabe\u00e7alho para posicionar o conte\u00fado abaixo dele<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LHeaderRect:= LPDF.GetHeaderRect;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ Desenha o texto 20 unidades abaixo do cabe\u00e7alho<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.Graphics.DrawText(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">Corpo do PDF<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">, PointF(LHeaderRect.Left, LHeaderRect.Bottom + <\/span><span style=\"color: #BF9EEE\">20<\/span><span style=\"color: #F6F6F4\">));<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ Carrega a imagem e a desenha em uma \u00e1rea de 200 \u00d7 80 unidades<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.Graphics.DrawImageFromFile(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">C:\\Temp\\c4d_logo.png<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      RectF(LHeaderRect.Left, LHeaderRect.Bottom + <\/span><span style=\"color: #BF9EEE\">40<\/span><span style=\"color: #F6F6F4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">      LHeaderRect.Left + <\/span><span style=\"color: #BF9EEE\">200<\/span><span style=\"color: #F6F6F4\">, LHeaderRect.Bottom + <\/span><span style=\"color: #BF9EEE\">120<\/span><span style=\"color: #F6F6F4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ Finaliza, salva e abre o PDF no leitor padr\u00e3o do sistema<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.EndDocument(<\/span><span style=\"color: #BF9EEE\">True<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">finally<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ Libera a biblioteca mesmo se ocorrer alguma exce\u00e7\u00e3o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPDF.Free;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #F286C4\">end<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">end<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Iniciando_o_documento\"><\/span>Iniciando o documento<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">O m\u00e9todo <strong>BeginDocument <\/strong>inicia o processo de gera\u00e7\u00e3o e recebe o nome ou o caminho do arquivo:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LPDF.BeginDocument('PDF criado pelo Delphi.pdf');<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">LPDF.BeginDocument(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">PDF criado pelo Delphi.pdf<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Como foi informado somente o nome, o PDF ser\u00e1 salvo no diret\u00f3rio de trabalho da aplica\u00e7\u00e3o, para alterar o caminho de salvamento do PDF basta adicionar o caminho antes do nome do arquivo.<br><br>Toda chamada a <strong>BeginDocument <\/strong>deve ser acompanhada por uma chamada a <strong>EndDocument<\/strong>. Tamb\u00e9m \u00e9 necess\u00e1rio adicionar ao menos uma p\u00e1gina com <strong>NewPage<\/strong> antes de desenhar conte\u00fado no documento.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Configurando_o_cabecalho_e_o_rodape\"><\/span>Configurando o cabe\u00e7alho e o rodap\u00e9<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">As propriedades <strong>Header <\/strong>e <strong>Footer<\/strong> definem os textos exibidos no cabe\u00e7alho e no rodap\u00e9:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LPDF.Header := 'Criando PDF com Delphi';\nLPDF.Footer := 'Page 1\/1';\nLPDF.NewPage;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">LPDF.Header := <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">Criando PDF com Delphi<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">LPDF.Footer := <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">Page 1\/1<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">LPDF.NewPage;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A biblioteca tamb\u00e9m permite personalizar tamanho, margens, alinhamento e fonte dessas \u00e1reas.<br>Os m\u00e9todos <strong>GetHeaderRect <\/strong>e <strong>GetFooterRect <\/strong>retornam os ret\u00e2ngulos ocupados pelo cabe\u00e7alho e pelo rodap\u00e9. No exemplo, utilizamos o ret\u00e2ngulo do cabe\u00e7alho como refer\u00eancia para posicionar o conte\u00fado da p\u00e1gina:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LPageRect := LPDF.GetHeaderRect;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">LPageRect := LPDF.GetHeaderRect;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Assim, o texto e a imagem s\u00e3o desenhados abaixo do cabe\u00e7alho.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Adicionando_texto_ao_PDF\"><\/span>Adicionando texto ao PDF<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">O conte\u00fado \u00e9 desenhado por meio da propriedade <strong>Graphics<\/strong>. Para adicionar um texto, usamos o m\u00e9todo <strong>DrawText<\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LPDF.Graphics.DrawText('Corpo do PDF', PointF(LHeaderRect.Left, LHeaderRect.Bottom + 20));<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">LPDF.Graphics.DrawText(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">Corpo do PDF<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">, PointF(LHeaderRect.Left, LHeaderRect.Bottom + <\/span><span style=\"color: #BF9EEE\">20<\/span><span style=\"color: #F6F6F4\">));<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O m\u00e9todo <strong>PointF <\/strong>define a posi\u00e7\u00e3o inicial do texto:<br><strong>LPageRect.Left<\/strong> mant\u00e9m o alinhamento com a margem esquerda do cabe\u00e7alho;<br><strong>LPageRect.Bottom + 20<\/strong> posiciona o conte\u00fado 20 unidades abaixo do cabe\u00e7alho.<br>Al\u00e9m de texto simples, a biblioteca oferece suporte a <strong>textos formatados<\/strong>, Unicode, <strong>fontes incorporadas<\/strong> e <strong>conte\u00fado HTML<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Adicionando_uma_imagem\"><\/span>Adicionando uma imagem<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Para carregar uma imagem diretamente de um arquivo, usamos o m\u00e9todo <strong>DrawImageFromFile<\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LPDF.Graphics.DrawImageFromFile(\n  'C:\\Temp\\c4d_logo.png',\n  RectF(\n    LPageRect.Left,\n    LPageRect.Bottom + 40,\n    LPageRect.Left + 200,\n    LPageRect.Bottom + 120\n  )\n);<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">LPDF.Graphics.DrawImageFromFile(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">C:\\Temp\\c4d_logo.png<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  RectF(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPageRect.Left,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPageRect.Bottom + <\/span><span style=\"color: #BF9EEE\">40<\/span><span style=\"color: #F6F6F4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPageRect.Left + <\/span><span style=\"color: #BF9EEE\">200<\/span><span style=\"color: #F6F6F4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    LPageRect.Bottom + <\/span><span style=\"color: #BF9EEE\">120<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O RectF define os limites utilizados para desenhar a imagem:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>RectF(\n  Esquerda,\n  Superior,\n  Direita,\n  Inferior\n)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">RectF(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  Esquerda,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  Superior,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  Direita,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">  Inferior<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">No exemplo, a imagem come\u00e7a 40 unidades abaixo do cabe\u00e7alho e ocupa uma \u00e1rea com 200 unidades de largura e 80 unidades de altura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A biblioteca tamb\u00e9m permite desenhar imagens carregadas em mem\u00f3ria ou armazenadas em um <strong>BitmapContainer<\/strong>. Essas op\u00e7\u00f5es est\u00e3o descritas na se\u00e7\u00e3o de <a href=\"https:\/\/download.tmssoftware.com\/doc\/tmsfnccore\/components\/pdflibrary\/#images\" target=\"_blank\" rel=\"noreferrer noopener\">imagens da documenta\u00e7\u00e3o oficial<\/a>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Finalizando_o_documento\"><\/span>Finalizando o documento<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Ap\u00f3s adicionar todo o conte\u00fado, o PDF \u00e9 conclu\u00eddo com:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LPDF.EndDocument(True);<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">LPDF.EndDocument(<\/span><span style=\"color: #BF9EEE\">True<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O par\u00e2metro <strong>True <\/strong>solicita que o arquivo seja aberto no leitor de PDF padr\u00e3o ap\u00f3s sua gera\u00e7\u00e3o.<br>A abertura autom\u00e1tica acontece quando o arquivo foi criado corretamente e <strong>BeginDocument <\/strong>recebeu um nome de arquivo v\u00e1lido.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusao\"><\/span>Conclus\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Com poucas linhas de c\u00f3digo, podemos criar um arquivo PDF contendo cabe\u00e7alho, rodap\u00e9, textos e imagens.<br>A propriedade <strong>Graphics <\/strong>concentra os recursos utilizados para desenhar o conte\u00fado, enquanto <strong>BeginDocument<\/strong>, <strong>NewPage <\/strong>e <strong>EndDocument <\/strong>controlam o ciclo de cria\u00e7\u00e3o do arquivo.<br>A compatibilidade entre diferentes frameworks torna poss\u00edvel reaproveitar grande parte da implementa\u00e7\u00e3o em projetos VCL, FireMonkey, WEB Core e Lazarus.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%8F%B7%EF%B8%8F_Cupom_de_desconto\"><\/span>\ud83c\udff7\ufe0f Cupom de desconto<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use nosso cupom exclusivo e tenha 30% de desconto nos produtos da TMS Software: <strong>2026Code4Delphi30<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Links_uteis\"><\/span>Links \u00fateis<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/Code4Delphi\/TMS-FNC-PDF\" target=\"_blank\" rel=\"noreferrer noopener\">Reposit\u00f3rio com exemplos<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.tmssoftware.com\/site\/tmsfnccore-pdf.asp\" target=\"_blank\" rel=\"noreferrer noopener\">P\u00e1gina oficial do componente<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/download.tmssoftware.com\/doc\/tmsfnccore\/components\/pdflibrary\/\" target=\"_blank\" rel=\"noreferrer noopener\">Documenta\u00e7\u00e3o oficial da PDF Library<\/a><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/code4delphi.com.br\/blog\/wp-content\/uploads\/2026\/08\/pdf-com-delphi-blog-768x432-v2.png\" alt=\"\" class=\"wp-image-2129\" style=\"width:737px;height:auto\" srcset=\"https:\/\/code4delphi.com.br\/blog\/wp-content\/uploads\/2026\/08\/pdf-com-delphi-blog-768x432-v2.png 768w, https:\/\/code4delphi.com.br\/blog\/wp-content\/uploads\/2026\/08\/pdf-com-delphi-blog-768x432-v2-300x169.png 300w, https:\/\/code4delphi.com.br\/blog\/wp-content\/uploads\/2026\/08\/pdf-com-delphi-blog-768x432-v2-520x293.png 520w, https:\/\/code4delphi.com.br\/blog\/wp-content\/uploads\/2026\/08\/pdf-com-delphi-blog-768x432-v2-920x518.png 920w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Gerar PDFs diretamente pela aplica\u00e7\u00e3o \u00e9 \u00fatil para criar relat\u00f3rios, comprovantes, contratos e outros documentos. Neste&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"footnotes":""},"categories":[1,98],"tags":[176],"class_list":["post-2104","post","type-post","status-publish","format-standard","hentry","category-geral","category-tms","tag-delphi-pdf"],"_links":{"self":[{"href":"https:\/\/code4delphi.com.br\/blog\/wp-json\/wp\/v2\/posts\/2104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code4delphi.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/code4delphi.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/code4delphi.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/code4delphi.com.br\/blog\/wp-json\/wp\/v2\/comments?post=2104"}],"version-history":[{"count":24,"href":"https:\/\/code4delphi.com.br\/blog\/wp-json\/wp\/v2\/posts\/2104\/revisions"}],"predecessor-version":[{"id":2131,"href":"https:\/\/code4delphi.com.br\/blog\/wp-json\/wp\/v2\/posts\/2104\/revisions\/2131"}],"wp:attachment":[{"href":"https:\/\/code4delphi.com.br\/blog\/wp-json\/wp\/v2\/media?parent=2104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code4delphi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=2104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code4delphi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=2104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}