{"id":3003,"date":"2017-05-01T16:49:52","date_gmt":"2017-05-01T20:49:52","guid":{"rendered":"http:\/\/linguagemprisma.br4.biz\/blog\/?p=3003"},"modified":"2017-05-01T17:18:41","modified_gmt":"2017-05-01T21:18:41","slug":"simples-exemplo-de-pdf-em-prisma","status":"publish","type":"post","link":"https:\/\/linguagemprisma.br4.biz\/blog\/modo_texto\/simples-exemplo-de-pdf-em-prisma\/","title":{"rendered":"Simples exemplo de pdf em Prisma"},"content":{"rendered":"<p>Assim como o core Prisma e algumas libs este m\u00f3dulo de fun\u00e7\u00f5es eu modifiquei a partir de um m\u00f3dulo lua j\u00e1 existente, visto que sua licen\u00e7a permite isso:<\/p>\n<p><a href=\"https:\/\/github.com\/cpressey\/pdf.lua\/blob\/master\/UNLICENSE\" target=\"_blank\">https:\/\/github.com\/cpressey\/pdf.lua\/blob\/master\/UNLICENSE<\/a><\/p>\n<p>A vers\u00e3o lua pode ser encontrada aqui:<\/p>\n<p><a href=\"https:\/\/github.com\/cpressey\/pdf.lua\" target=\"_blank\">https:\/\/github.com\/cpressey\/pdf.lua<\/a><\/p>\n<p>No futuro, n\u00e3o t\u00e3o perto, quero desenvolver eu mesmo uma lib pdf com base em C mais completa, do mesmo modo que fiz com outras libs, incluindo a psqlite3, mysqlite, ig, pcgi etc.<\/p>\n<p>Bem, trata-se de uma lib b\u00e1sica que gera um arquivo pdf de texto na vers\u00e3o pdf-1.0 sem codifica\u00e7\u00e3o.<\/p>\n<p>A lib, se j\u00e1 n\u00e3o perceberam est\u00e1 inclusa na vers\u00e3o Prisma-1.0.100, inclusive nos exemplos.<\/p>\n<h3>Vamos ao exemplo b\u00e1sico:<\/h3>\n<pre class=\"lang:prisma decode:true\">local PDF = inclua \"pdf\"\r\n\r\npdf = PDF.novo()\r\n\r\nhelv = pdf:nova_fonte{ nome = \"Helvetica\" };\r\ntimes = pdf:nova_fonte{ nome = \"Times-Roman\" };\r\ncorrier = pdf:nova_fonte{ nome = \"Corrier\" };\r\n\r\npag = pdf:nova_pagina();\r\n\r\n\r\npag:inicio_texto();\r\npag:def_fonte(corrier, 23);\r\n\r\npag:def_texto_pos(10,700);\r\npag:mostre( \"Ola mundo em prisma pdf\" );\r\npag:fim_texto();\r\n\r\npag:ad();\r\npdf:escreva(\"minimo.pdf\");\r\n\r\n\r\n<\/pre>\n<p>Detalhes:<\/p>\n<pre class=\"lang:prisma decode:true\">local PDF = inclua \"pdf\"<\/pre>\n<p>Inclu\u00edmos a biblioteca pdf para usar suas fun\u00e7\u00f5es.<\/p>\n<pre class=\"lang:prisma decode:true\">pdf = PDF.novo()<\/pre>\n<p>Criamos um novo objeto pdf.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">helv = pdf:nova_fonte{ nome = \"Helvetica\" };\r\ntimes = pdf:nova_fonte{ nome = \"Times-Roman\" };\r\ncorrier = pdf:nova_fonte{ nome = \"Corrier\" };<\/pre>\n<p>Definimos algumas fontes. (S\u00f3 vamos usar uma no exemplo, \u00e9 apenas ilustrativo);<\/p>\n<pre class=\"lang:prisma decode:true\">pag = pdf:nova_pagina();\r\n<\/pre>\n<p>Criamos um objeto p\u00e1gina pdf.<\/p>\n<pre class=\"lang:prisma decode:true\">pag:inicio_texto();<\/pre>\n<p>Definimos que vamos come\u00e7ar a escrever na p\u00e1gina.<\/p>\n<pre class=\"lang:prisma decode:true\">pag:def_fonte(corrier, 23);<\/pre>\n<p>Antes de escrevermos, temos que definir a fonte a ser usada (criada acima). O segundo par\u00e2metro \u00e9 o tamanho, ok!<\/p>\n<pre class=\"lang:prisma decode:true\">pag:def_texto_pos(10,700);<\/pre>\n<p>Definindo a posi\u00e7\u00e3o do texto na p\u00e1gina (em coordenadas: col x lin);<\/p>\n<p><em>Obs.: a linha (700 \u00e9 de baixo para cima, isto \u00e9, se colocar &#8216;5&#8217; no segundo par\u00e2metro, o texto sair\u00e1 no rodap\u00e9 e n\u00e3o no topo, a coluna (10) \u00e9 normal);<\/em><\/p>\n<p><em>Obs.: se o valor for negativo ex.: <strong>-10<\/strong>, ent\u00e3o a posi\u00e7\u00e3o \u00e9 de cima para baixo, ou seja, -10 sai no topo e n\u00e3o no rodap\u00e9.<\/em><\/p>\n<pre class=\"lang:prisma decode:true\">pag:mostre( \"Ola mundo em prisma pdf\" );<\/pre>\n<p>Enfim, imprimimos na p\u00e1gina em pdf a string acima, note que usamos o m\u00e9todo &#8216;mostre&#8217;.<\/p>\n<p>Obs.: se quisesse escrever mais linhas no documento seria necess\u00e1rio definir nova posi\u00e7\u00e3o para a nova linha de modo a n\u00e3o escrever em cima da linha j\u00e1 escrita.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">pag:fim_texto();<\/pre>\n<p>Depois de colocar todo o texto desejado na p\u00e1gina, finalizamos com o m\u00e9todo &#8216;fim_texto()&#8217;;<\/p>\n<pre class=\"lang:prisma decode:true\">pag:ad();<\/pre>\n<p>Ainda temos que adicionar a p\u00e1gina escrita acima no documento com o m\u00e9todo &#8216;ad()&#8217;<\/p>\n<pre class=\"lang:prisma decode:true\">pdf:escreva(\"minimo.pdf\");<\/pre>\n<p>E, no fim, basta salvar em um arquivo usando o m\u00e9todo &#8216;escreva()&#8217;;<\/p>\n<p>Pronto, tente abrir o arquivo gerado minimo.pdf e ver\u00e1 algo do tipo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3004\" src=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2017\/05\/pdf_prisma1-300x152.png\" alt=\"pdf_prisma1\" width=\"300\" height=\"152\" srcset=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2017\/05\/pdf_prisma1-300x152.png 300w, https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2017\/05\/pdf_prisma1.png 659w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Veja mais exemplos de pdf que est\u00e3o inclusos nos\u00a0exemplos prisma:<\/p>\n<p><a href=\"http:\/\/www.mediafire.com\/file\/0t003qn58o4itjl\/exemplos_prisma.7z\" target=\"_blank\">http:\/\/www.mediafire.com\/file\/0t003qn58o4itjl\/exemplos_prisma.7z<\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>Eis um exemplo que escreve v\u00e1rias linhas e cria v\u00e1rias p\u00e1ginas usando la\u00e7os de repeti\u00e7\u00e3o:<\/h3>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">local PDF = inclua \"pdf\"\r\n\r\npdf = PDF.novo()\r\n\r\ntimes = pdf:nova_fonte{ name = \"Times-Roman\" }\r\npag = {}\r\npara i = 1 , 5 inicio \r\n pag[i] = pdf:nova_pagina()\r\n\r\n\/\/escrevendo \r\n\r\n para k = 20 , 780,20 inicio\r\n   pag[i]:inicio_texto()\r\n   pag[i]:def_fonte(times, 12)\r\n   pag[i]:defrgbcor(pag[i].CORLETRA,0,0,1);\r\n   pag[i]:def_texto_pos(20, -1 * k);\r\n   \/\/(col,lin) se lin for positivo \u00e9 de baixo para cima, se negativo de cima para baixo\r\n   \/\/ou seja -10 \u00e9 = a 10 do topo da p\u00e1gina, 10 \u00e9 10 do rodap\u00e9 da p\u00e1gina.\r\n   pag[i]:mostre( k .. ' - Ola mundo em prisma pdf || Ola mundo em prisma pdf');\r\n   pag[i]:fim_texto();\r\n fim \/\/fim para i = 20\r\n\r\nfim\/\/fim para i = 1 \r\n\r\npara i = 1 , #pag inicio\r\n    pag[i]:ad(); \/\/adiciona todas as paginas\r\nfim\r\n\r\n\r\n\r\npdf:escreva(\"nova_lin.pdf\")\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>Desenhando linhas<\/h3>\n<pre class=\"lang:prisma decode:true\">local PDF = inclua \"pdf\"\r\n\r\npdf = PDF.novo()\r\n\r\ntimes = pdf:nova_fonte{ name = \"Times-Roman\" }\r\n\r\npag = pdf:nova_pagina()\r\n\r\n\/\/desenhando reta\r\npag:defrgbcor(pag.CORTRACO, 0.5, 0, 1)\r\npag:deflinhalargura(5);\r\npag:movapara(50,650)\/\/inicio \r\npag:linhapara(500,650)\/\/direcao da reta\r\n\r\npag:desenhe()\r\n\r\n\/\/desenhando reta\r\npag:defrgbcor(pag.CORTRACO, 1 , 0.4, 1)\r\npag:deflinhalargura(10);\r\npag:movapara(50,550)\/\/inicio \r\npag:linhapara(500,550)\/\/direcao da reta\r\npag:desenhe()\r\n\r\n\/\/desenhando reta\r\npag:defrgbcor(pag.CORTRACO, 0.5, 1, 1)\r\npag:deflinhalargura(20);\r\npag:movapara(50,450)\/\/inicio \r\npag:linhapara(500,450)\/\/direcao da reta\r\npag:desenhe()\r\n\r\n\r\n\/\/desenhando reta\r\npag:defrgbcor(pag.CORTRACO, 1, 0, 0.6)\r\npag:movapara(50,350)\/\/inicio \r\npag:linhapara(500,350)\/\/direcao da reta\r\npag:desenhe()\r\n\r\n\/\/escrevendo\r\npag:inicio_texto()\r\npag:def_fonte(times, 12)\r\npag:def_texto_pos(12,-30);\/\/680);\r\npag:defrgbcor(pag.CORLETRA,0,0,1);\r\npag:mostre( 'Ola mundo em prisma pdf');\r\npag:fim_texto();\r\n\r\npag:inicio_texto()\r\npag:def_fonte(times, 12)\r\npag:def_texto_pos(100,600);\r\npag:defrgbcor(pag.CORLETRA,1,0,0);\r\npag:mostre( 'mais um linha no pdf');\r\npag:fim_texto();\r\n\r\npag:ad();\r\npdf:escreva(\"linhas.pdf\")\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>Desenhando c\u00edrculos e ret\u00e2ngulos:<\/h3>\n<pre class=\"lang:prisma decode:true\">\/\/retangulos e circulos\r\n\r\nlocal PDF = inclua \"pdf\"\r\n\r\npdf = PDF.novo()\r\n\r\npag = pdf:nova_pagina()\r\n\/\/         retangulo   col,lin,larg,alt\r\npag:defrgbcor(pag.CORTRACO,0,1,0);\/\/rgb( 0.0-1.0, 0.0-1.0, 0.0-1.0) =&gt; 1.0 = 100%(255) e 0. = 50%(125);\r\npag:deflinhalargura(50);\r\npag:retangulo(50,400,300,300);\r\npag:desenhe();\r\n\r\n\/\/           retangulo col,lin,larg,alt\r\npag:defrgbcor(pag.CORPREENCH,0,1,1);\r\npag:deflinhalargura(20);\r\npag:retangulo(100,450,200,200);\r\npag:preencha();\r\npag:desenhe();\r\n\r\n\/\/           retangulo col,lin,larg,alt\r\n\r\npag:defrgbcor(pag.CORPREENCH, 1,0,1);\r\npag:deflinhalargura(12);\r\npag:retangulo(400,450,160,200);\r\npag:preencha();\r\npag:desenhe();\r\npag:ad(); \/\/adicionando pagina 1\r\n\r\n\/\/------------------------------ circulos:\r\npag2 = pdf:nova_pagina()\r\n\/\/          circulo(col,lin,diam\r\npag2:defrgbcor(pag2.CORPREENCH,0,0,1);\r\npag2:circulo( 200, 600, 100)\r\npag2:preencha();\r\npag2:desenhe()\r\n\r\npag2:defrgbcor(pag2.CORTRACO,1,1,0);\r\npag2:deflinhalargura(20);\r\npag2:circulo( 300, 500, 150)\r\npag2:desenhe()\r\n\r\n\r\n\r\npag2:ad();\/\/ adicionando pagina 2\r\n\r\npag3 = pdf:nova_pagina();\r\n\r\npag3:defcmykcor(pag3.CORPREENCH,0,1,1,0);\r\n\/\/----------  (x,y,lados);\r\npag3:quadrado(200,400, 200);\r\npag3:preencha();\r\npag3:desenhe();\r\n\r\npag3:ad();\r\n\r\npdf:escreva(\"ret_circ.pdf\") \/\/por fim escrever o resultado num arquivo .pdf\r\n\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>At\u00e9 mais &#8230;<\/p>\n<p>Att. Adalberto<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Assim como o core Prisma e algumas libs este m\u00f3dulo de fun\u00e7\u00f5es eu modifiquei a partir de um m\u00f3dulo lua j\u00e1 existente, visto que sua licen\u00e7a permite isso: https:\/\/github.com\/cpressey\/pdf.lua\/blob\/master\/UNLICENSE A vers\u00e3o lua pode ser encontrada aqui: https:\/\/github.com\/cpressey\/pdf.lua No futuro, n\u00e3o t\u00e3o perto, quero desenvolver eu mesmo uma lib pdf com base em C mais completa,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,7],"tags":[],"class_list":["post-3003","post","type-post","status-publish","format-standard","hentry","category-modo_texto","category-prisma"],"_links":{"self":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/3003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/comments?post=3003"}],"version-history":[{"count":7,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/3003\/revisions"}],"predecessor-version":[{"id":3011,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/3003\/revisions\/3011"}],"wp:attachment":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/media?parent=3003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/categories?post=3003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/tags?post=3003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}