Notícias:

SMF - Just Installed!

Menu principal

Postagens recentes

#21
Lista de Bugs / Re:Classe fpdf não escreve dua...
Última postagem por adalberto - Março 13, 2018, 04:51:18 PM
Teria que ver o seu código, e estou até sem muito tempo.

Se as imagens acabam ficando sobrepostas, será que não é um erro de calcular as posições delas?

Olha, há um tempo, quando estava fazendo as libs jpeginfo e outras eu consegui colocar imagens jpg e tenho até um exemplo, o problema é que a lib fpdf que tenho aqui não vai ser igual a sua, fiz umas modificações e ainda nem traduzi os comando ainda.

Veja o exemplo: (segue em anexo para baixar!)


//basico

local fpdf = inclua'fpdf';
local jpg = inclua'jpginfo';

local pdf = fpdf:novo();

pdf:AdPagina();

pdf:SetFont('Arial','B',12)
    // Background color
pdf:SetFillColor(200,220,255)
    // Title
pdf:Cell(0,6,"Exemplo de imagem",0,1,'C',verdadeiro)
    // Line quebre
pdf:Ln(4)
pdf:Cell(4,10,'Olá como vai você?');
pdf:Imagem("casal.jpeg",5,30,100,100);//insere a imagem

pdf:AdPagina();
local info = jpg.info('prisma.jpg');
pdf:SetFont('Arial','B',12)
pdf:SetFillColor(200,220,255);
pdf:Cell(0,6,"prisma.jpg " .. info.larg ..'x'.. info.alt,0,1,'L',verdadeiro);
pdf:Imagem('prisma.jpg',5,22,info.larg/6, info.alt/6);

//--------------------------------------------
pdf:AdPagina();

pdf:SetFont('Arial','B',12)
    // Background color
pdf:SetFillColor(200,220,255)
    // Title
pdf:Cell(0,6,"Exemplo de imagem",0,1,'C',verdadeiro)
    // Line quebre
pdf:Ln(4)
pdf:Cell(4,10,'Olá como vai você?');
pdf:Imagem("logo.png",5,30,100,100);//insere a imagem


pdf:Output("zzbasico.pdf"); //salva o arquivo pdf




Obs.: Nem toda imagem png dá certo, imagens jpg e ppm tem mais compatibilidade.

Tenta adaptar aí, depois retorna aqui se não der certo ok.

(Baixe os arquivos em anexo)
#22
Lista de Bugs / Re:compilador pric não esconde...
Última postagem por adalberto - Março 13, 2018, 04:23:45 PM
Bom dia,

O pric assim como o prismac não ofusca as constantes, acredito que nem em C isso seja possível.

Há um conjunto de funções de encriptação aes que peguei de uma biblioteca em Lua, com ele você pode encriptar os dados (strings) antes de inserir no código fonte do programa e para usar esse dado basta decriptá-lo antes de imprimi-lo.

Ou você pode simplesmente usar a base 64 ou hex se não exigir muita segurança.

Então esses são os passos:

1 - Codifique o dado com um programa ou função separado.
2 - cole a saída entre duplos colchetes atribuindo em uma variável no seu código fonte.
3 - ao imprimir essa variável apenas decripte antes.

Estou meio tumultuado de serviço, mas é uma boa ideia acrescentar uma forma de encriptar strings e constantes.

AES:  http://linguagemprisma.br4.biz/blog/modo_texto/aes-encriptacao-e-decriptacao-de-dados/

use base64    string.base64()  /  string.dec_base64();

use hexadecimal string.hex() / string.dec_hex();

exemplos:


local aes = inclua("aes");

//modos de encriptacao: aes.MODOECB, aes.MODOCBC, aes.MODOOFB, aes.MODOCFB
//tamanho senhas: aes.AES128, aes.AES192, aes.AES256

local senha =  "asdfadsfaljaASDFASDFAsdfasd";
local txt =  "Linguagem Prisma!!!";

local enc = aes.encripte(senha,txt, aes.AES256, aes.MODOCFB);

poe'---------------------------------\n\n';

imprima("ENC:", enc);

imprima("DEC:", aes.decripte(senha,enc,aes.AES256,aes.MODOCFB) );




Prisma 1.0.104  linguagemprisma.br4.biz (jul 2017)
> a = string.hex('olá');
> imprima(a)
6f6cc3a1
> b = string.dec_hex(a);
> imprima(b);
olá
> a = string.base64('olá');
> imprima(a);
b2zDoQ==
> b = string.dec_base64(a);
> imprima(b);
olá
>



Espero ter dado um caminho, até mais.


#23
Lista de Bugs / Classe fpdf não escreve duas i...
Última postagem por rafael - Março 13, 2018, 12:23:07 AM
Oi Adalberto

Vê se você me ajuda:

Tentei usar o fpdf pra gerar um arquivo de várias páginas com o mesmo cabeçalho e o mesmo rodapé.
No cabeçalho uma imagem o no rodapé outra.

Se for uma página funciona, mas se for mais as imagens repetem ou ficam cruzadas, as vezes nem aparece, as vezes só aparece uma.

Tem uma noção do que pode ser ?
#24
Lista de Bugs / compilador pric não esconde pa...
Última postagem por rafael - Março 12, 2018, 10:10:29 AM
Bom dia,

Estava querendo esconder o meu código fonte incluindo a parte textual do html.

Mas o compilador só compila a parte da linguagem.

Existe a possibilidade de descaracterizar o restante do código?

anexo uma imagem como o exemplo.


#25
Publique aqui / Re:html.PasseFormularioWebKit(...
Última postagem por adalberto - Março 08, 2018, 03:54:45 PM
Isso aí, Rafael, excelente!
#26
Publique aqui / html.PasseFormularioWebKit()
Última postagem por rafael - Março 07, 2018, 04:16:13 AM
Bom dia!

fiz uma biblioteca pra passar o formulário "boundary" do método POST.

Como ele pode receber vários conteúdos ao mesmo tempo fiz um laço contando as posições.

O retorno pode ser uma tabela ou pegar diretamente um par: chave = valor

Se quiser pode incluir ela no html ou no cgi



funcao PasseFormularioWebKit(cadeia,chave)
cadeia = [[------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="ArquivoDeRetorno"; filename="4155_00154695_20180220_C240_00.ret"
Content-Type: application/octet-stream

                           rafael
------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="arquivo1"; filename="arquivo1.txt"
Content-Type: text/plain

Conteúdo do texto

------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="arquivo2"; filename="arquivo2.html"
Content-Type: text/html

<!DOCTYPE html><title>Conteúdo do html</title>

------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="conteudoJSON"
Content-Type: application/json

{"Objeto":"objetoJSON","chave":"Isso é uma tabela em prisma"}

------WebKitFormBoundaryDCkEyCJwVlL5BGuC--]]

 
  pi = {};
  pf = {};
  x = 1;
  pos_busca = 1; //ponto inicial da busca

  se Metodo == 'GET' entao erro('____________________Metodo suportado somente: POST____________________') fim




  enquanto 1 inicio //cria um laço infinito
      linha = cadeia:separe('^(.-)[\r\n].*$') ou ''
      se pos_busca ==1 e linha:procure('WebKitFormBoundary') entao
        codigoinicial = linha
      fim
      se nao codigoinicial  entao
        quebre erro('____________________NÃO É WebKitFormBoundary____________________')
      fim
      pi[ x ] , pf [ x ] = string.procure ( cadeia , codigoinicial , pos_busca );
      se pi[x] == nulo entao 
    //se o retorno de pi for nulo entao interrompe o laço
      quebre
      senao //senao salva uma nova posicao de busca
          pos_busca = pf [ x ] + 1;
      fim;
  x = x + 1;
  //fazendo o incremento de x
  fim


  Matriz = {}

  para i = 1 , #pi-1  inicio
        //imprima( 'Busca numero ' .. i .. ' : ' .. pi[ i ]  .. ' - ' .. pf [ i ] );
    conteudo = string.corte(cadeia,pf[i]+2,pi[i+1]-2)
    linha = conteudo:separe('^(.-)[\r?\n].*$') ou ''
      nome = conteudo:separe('name=["](.-)[";].*$') ou ''
      nomedoarquivo = conteudo:separe('filename=["](.-)[";].*$') ou ''
      disposicao = conteudo:separe('Content%-Disposition: (.-[^;\r?\n]+).*$') ou ''
      conteudo = conteudo:corte(#linha+2,#conteudo)
      linha = conteudo:separe('^(.-)[\r?\n].*$') ou ''
      tipo_conteudo = conteudo:separe('Content%-Type: (.-[^;\r?\n]+).*$') ou ''
      conteudo = conteudo:corte(#linha+2,#conteudo):apare()
      linha = conteudo:separe('^(.-)[\r?\n?].*$')
      se linha == ('') entao
        conteudo = conteudo:corte(#linha+2,#conteudo):apare()
      fim
      Matriz[i] = {}
      Matriz[i]['Nome'] = nome
      Matriz[i]['NomeDoArquivo'] = nomedoarquivo
      Matriz[i]['Disposicao'] = disposicao
      Matriz[i]['TipoDeConteudo'] = tipo_conteudo
      Matriz[i]['Conteudo'] = conteudo
  fim

  se chave entao
    local valor = nulo
    para i,v em pares(Matriz) inicio
          se nao valor entao
            valor = v.Nome == chave
            se valor entao valor = v.Conteudo fim
          fim
        fim
        retorne valor
  senao
    retorne Matriz
  fim

fim


ArquivoDeRetorno  = PasseFormularioWebKit(Formularios,'ArquivoDeRetorno')
conteudoJSON  = PasseFormularioWebKit(Formularios,'conteudoJSON')
arquivo1  = PasseFormularioWebKit(Formularios,'arquivo1')
imprima(ArquivoDeRetorno)
imprima(conteudoJSON)
imprima(arquivo1)

#27
Lista de Bugs / Re:sis.relogio() não funciona ...
Última postagem por adalberto - Fevereiro 09, 2018, 03:15:23 PM
Criei uma função aleatorio(), ela é bem simples mas garante que não haja repetições em ocorrências em menos de um segundo, veja:



local mat = mat;
local x = 0;
local funcao aleatorio()     
  x = x + 1;
  local z = sis.tempo()+x;
  mat.xrandonico(z);
fim


//teste:
para i = 1, 10 inicio
  aleatorio(); //cria uma chave randômica.
  imprima(mat.randonico()); //retorna o número aleatório baseado na chave randômica.
fim
 


Obs.: só agora vi que cometi um erro ortográfico, o certo é randômico e não randônico, vou modificar esta função na próxima versão, possivelmente vou mudar de mat.randonico e mat.xrandonico para mat.aleatorio e mat.xaleatorio;

Vou manter a nomenclatura errada para garantir compatibilidade com quem já usou estas funções.

#28
Lista de Bugs / Re:sis.relogio() não funciona ...
Última postagem por adalberto - Fevereiro 09, 2018, 09:15:32 AM
Vou ter que instalar o CentOS em uma máquina virtual para testar. Qual é a versão que vc usa? 32 ou 64?

Pelo que andei vendo esta função vem do C clock() e seu resultado e significado é dependente de plataforma.

No momento sugiro a você usar a função sis.tempo(), ela retorna em segundos o tempo atual.

Ex.:

mat.xrandonico( sis.tempo() );
  local a1 = mat.randonico();
  local a2 = mat.randonico(); 
  imprima(a1,a2);


#29
Lista de Bugs / sis.relogio() não funciona no ...
Última postagem por rafael - Fevereiro 07, 2018, 11:55:03 AM
Essa função é fundamental pra gerar números aleatórios porque ela pega o tempo em milissegundos.

quando eu uso no ubuntu ela retorna o tempo em milissegundos, mas no CentOS retorna sempre 0

http://ap.imagensbrasil.org/image/d93qUP
#30
Lista de Bugs / Re:too many C levels (limit is...
Última postagem por adalberto - Janeiro 25, 2018, 08:42:22 PM
Há uma outra forma também, criei uma função que concatena valores e não gera o erro de limite de 200 níveis C.

É necessário passar os valores a serem concatenados em forma de tabela (separados por vírgulas entre chaves):

local valor = 200;
local  result, err = concat { [[ <minha tag>]] , valor , [[</minha tag>]] }  ;
se nao result entao imprima(err); sis.saia(1); fim
imprima(result);
//saída-->   <minha tag>200</minha tag>


Veja o código da função logo abaixo:


local funcao concat(t)
  se tipo(t)<>'tabela' entao retorne falso, 'Espera-se uma tabela em vez de ' .. tipo(t) fim;
  local convstring = convstring;
  local s = '';
  para i,v em pares(t) inicio
    s = s .. convstring(v);
  fim
  retorne s;
fim