Ir para conteúdo
  • Cadastre-se

JOSE CHAO

Membros Pro
  • Total de ítens

    11
  • Registro em

  • Última visita

Sobre JOSE CHAO

JOSE CHAO's Achievements

Rookie

Rookie (2/14)

  • Collaborator Rare
  • Conversation Starter
  • Dedicated Rare
  • First Post
  • Reacting Well Rare

Recent Badges

3

Reputação

  1. Os FDICs são Fundos de Investimento em Direitos Creditórios (também conhecido simplesmente pela sigla FIDC ) constituindo-se em veículo de securitização de recebíveis e um tipo de fundo de investimento caracterizado pela aquisição de direitos creditórios (Wikipedia). Dessa forma e sendo esses créditos fiduciários, cujo valor depende somente da confiança a ele dispensada, tais recebíveis devem ser lastreados em transações fiáveis, que podem ser comprovadas através de documentos legalmente aceitos para aquele tipo de transação, como por exemplo uma nota fiscal, no caso de uma transação mercantil. No caso em questão IMAGINO que se trate de uma transação ao estilo "factoring". Através da chave da NFe o FDIC consulta se o cedente confere, se o sacado confere e se o valor da transação confere, aprovando "on-line" a operação ... pura especulação da minha parte...
  2. Olá, boa tarde, Daniel. O tópico é "classificados", então creio que não esteja muito errado o local do post. Por gentileza, poderia detalhar um pouco mais a necessidade de vocês? Aparentemente vocês têm os arquivos de extratos, certo? Como uma empresa de solução de terceirização de gestão financeira acredito que tenham também os arquivos do SISPAG Itaú? Correto? Tendo esses arquivos acredito que não seria necessário a integração com o Itaú. Procede? Possuindo tais arquivos, no layout sispag itaú consta o campo "inscrição número", que seria referente ao CNPJ EMPRESA DEBITADA, seria apenas isso que gostariam que aparecesse nos extratos? Talvez um de/para CNPJ/Razão Social? Com essas informações poderíamos ajudá-lo melhor, e com certeza se ainda precisar de alguém, essa pessoa será mais facilmente encontrada. Grato,
  3. https://pt.wikipedia.org/wiki/Niklaus_Wirth Niklaus Emil Wirth (Winterthur, 15 de fevereiro de 1934 – 1 de janeiro de 2024) foi um professor e cientista da computação suíço. Ele projetou várias linguagens de programação, incluindo Pascal, e foi pioneiro em vários outros tópicos clássicos em engenharia de software. Em 1984, ele ganhou o Prêmio de Turing, geralmente reconhecido como a maior distinção em ciência da computação, por desenvolver uma sequência de linguagens de computador inovadoras. Criador das linguagens de programação Pascal, Modula-2 e Oberon.
  4. https://forum.lazarus.freepascal.org/index.php?topic=30454.0
  5. Obrigado, Daniel. Acabo de descobrir que estou sem a versão de produção na minha máquina, ficaram faltando algumas rotinas bastante úteis, vou pedir pro pessoal e posto novamente. No código anteriormente publicado o nome dos arquivos a serem gerados estão hard coded, e já vi que na função ConvertMultPDFToBMP a TStringList criada não foi destruída aí ... mem leak ..., mas os arquivos estão sendo gerados normalmente. O código foi desenvolvido no FPC/Lazarus, mas não deve ter grandes problemas para compilar no Delphi, infelizmente não tenho instalado na minha máquina para testar. Para quem teve interesse no código, a resolução do arquivo pode ser alterada, podendo gerar arquivos mais leves, já que arquivos BMPs com boa resolução ou de imagems grandes como uma folha A4 podem ficar pesados. Usamos as dlls do ghostscript nos servidores para manipular arquivos e distribuir (boletos que precisam ser gerados como imagens, ...), o projeto ghostscript é bastante ativo e sempre está atualizado, o que é bom pela questão de segurança. Mesmo em grandes mudanças de versão não recordo de grandes contratempos para usar as novas DLLs... procuramos sempre usar as mais recentes. Há algum tempo houve uma alteração que obrigou o uso da seguinte linha: minst := Nil;
  6. Aparentemente o TStringList não está sendo liberada na rotina ConvertMultPDFToBMP Ok, perdão.
  7. Os códigos acima funcionam com as dlls de 64 e 32 bits. Verifiquei que o arquivo do Wrapper está incompleto, mas funcionando para todas as rotinas implementadas, vou pedir o código do nosso arquivo de produção onde outras funcionalidades estão implementadas (conversão para jpg, tiff, postscript, dxf, ... realização de OCR em PDFs, ...).
  8. Abaixo segue código que usamos, mas é trabalho em andamento... inspirado em pedaços de códigos diversos stackoverflow, sites gringos, ... (implementamos em FPC/Lazarus, OK?) unit GhostScriptDLLWrapper; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils; const GS_ARG_ENCODING_LOCAL = 0; GS_ARG_ENCODING_UTF8 = 1; e_Quit = -990; type TGSAPIrevision = packed record product: PChar; copyright: PChar; revision: longint; revisiondat: longint; end; PGSAPIrevision = ^TGSAPIrevision; Pgs_main_instance = Pointer; PPChar = array of PChar; {$IFDEF WINDOWS} {$IFDEF WIN32} { gsdll32.dll } function gsapi_new_instance(pinstance: Pgs_main_instance; caller_handle: Pointer): Integer; stdcall; external 'gsdll32.dll'; function gsapi_init_with_args(pinstance: Pgs_main_instance; argc: Integer; argv: PPChar): Integer; stdcall; external 'gsdll32.dll'; function gsapi_exit(pinstance: Pgs_main_instance): Integer; stdcall; external 'gsdll32.dll'; procedure gsapi_delete_instance(pinstance: Pgs_main_instance); stdcall; external 'gsdll32.dll'; function gsapi_set_arg_encoding(pinstance: Pgs_main_instance; ENCODING: Integer) : Integer; stdcall; external 'gsdll32.dll'; {$ENDIF} {$IFDEF WIN64} { gsdll64.dll } function gsapi_new_instance(pinstance: Pgs_main_instance; caller_handle: Pointer): Integer; stdcall; external 'gsdll64.dll'; function gsapi_init_with_args(pinstance: Pgs_main_instance; argc: Integer; argv: PPChar): Integer; stdcall; external 'gsdll64.dll'; function gsapi_exit(pinstance: Pgs_main_instance): Integer; stdcall; external 'gsdll64.dll'; procedure gsapi_delete_instance(pinstance: Pgs_main_instance); stdcall; external 'gsdll64.dll'; function gsapi_set_arg_encoding(pinstance: Pgs_main_instance; ENCODING: Integer) : Integer; stdcall; external 'gsdll64.dll'; {$ENDIF} {$ENDIF} function MergePdfsFiles(outPdf: ansistring; files: array of ansistring): Integer; function SplitPDFFile(AInFile, AOutPDF: AnsiString; AIniPage, AEndPage: Integer): Integer; function ConvertPDFToPNG(AResolution: AnsiString; AInFile: AnsiString): Integer; function ConvertMultPDFToPNG(AResolution: AnsiString; AInFiles: Array of AnsiString): Integer; function ConvertPSToPDF(): Integer; function ConvertPDFToBMP(AResolution: AnsiString; AInFile: AnsiString): Integer; function ConvertMultPDFToBMP(AResolution: AnsiString; AInFiles: Array of AnsiString): Integer; implementation function MergePdfsFiles(outPdf: ansistring; files: array of ansistring): Integer; var code, code1, gsargc, i: Integer; gsargv: array of pansichar; minst: PGSAPIrevision; //minst: Pointer; begin setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := 'gs'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dBATCH'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dNOPAUSE'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-q'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-sDEVICE=pdfwrite'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-sOutputFile=' + outPdf); for i := Low(files) to High(files) do begin setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar(files[i]); end; gsargc := length(gsargv); minst := Nil; code := gsapi_new_instance(@minst, Nil); if (code < 0) then begin result := 1; exit; end; code := gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8); if (code = 0) then code := gsapi_init_with_args(minst, gsargc, @gsargv[0]); code1 := gsapi_exit(minst); if ((code = 0) or (code = e_Quit)) then code := code1; gsapi_delete_instance(minst); if ((code = 0) or (code = e_Quit)) then begin result := 0; exit; end; result := 1; end; function SplitPDFFile(AInFile, AOutPDF: AnsiString; AIniPage, AEndPage: Integer Integer; var code, code1, gsargc, i: Integer; gsargv: array of pansichar; minst: PGSAPIrevision; //minst: Pointer; begin setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := 'gs'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dNOPAUSE'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dQUIET'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dBATCH'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-q'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-sOutputFile=' + AOutPDF); setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-dFirstPage=' + IntToStr(AIniPage)); setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-dLastPage=' + IntToStr(AEndPage)); setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-sDEVICE=pdfwrite'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar(AInFile); gsargc := length(gsargv); minst := Nil; code := gsapi_new_instance(@minst, Nil); if (code < 0) then begin result := 1; exit; end; code := gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8); if (code = 0) then code := gsapi_init_with_args(minst, gsargc, @gsargv[0]); code1 := gsapi_exit(minst); if ((code = 0) or (code = e_Quit)) then code := code1; gsapi_delete_instance(minst); if ((code = 0) or (code = e_Quit)) then begin result := 0; exit; end; result := 1; end; function ConvertPDFToPNG(AResolution: AnsiString; AInFile: AnsiString): Integer; var code, code1, gsargc, i: Integer; gsargv: array of pansichar; minst: PGSAPIrevision; begin setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := 'gs'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dNOPAUSE'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dQUIET'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dBATCH'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-sDEVICE=png16m'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-q'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-sOutputFile=ProgramPage-%03d.png'); setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-r' + AResolution); setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar(AInFile); gsargc := length(gsargv); minst := Nil; code := gsapi_new_instance(@minst, Nil); if (code < 0) then begin result := 1; exit; end; code := gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8); if (code = 0) then code := gsapi_init_with_args(minst, gsargc, @gsargv[0]); code1 := gsapi_exit(minst); if ((code = 0) or (code = e_Quit)) then code := code1; gsapi_delete_instance(minst); if ((code = 0) or (code = e_Quit)) then begin result := 0; exit; end; result := 1; end; function ConvertMultPDFToPNG(AResolution: AnsiString; AInFiles: Array of AnsiString): Integer; var code, code1, gsargc, i, llow, lhigh: Integer; nome1, nome2, nome3: PChar; lStrLstFileNames: TStringList; gsargv: array of pansichar; minst: PGSAPIrevision; begin setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := 'gs'; llow := Low(AInFiles); //WriteLn('Arquivo inicial, posicao: ' + IntToStr(llow)); lhigh := High(AInFiles); //WriteLn('Arquivo final, posicao: ' + IntToStr(lhigh)); //WriteLn('Posicoes do array(iniciando em zero): ' + IntToStr(High(gsargv))); setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dNOPAUSE'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dQUIET'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dBATCH'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-sDEVICE=png16m'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-q'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-sOutputFile=ProgramMultPage-%03d.png'); setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-r' + AResolution); lStrLstFileNames := TStringList.Create; for i := Low(AInFiles) to High(AInFiles) do begin lStrLstFileNames.Add('-f' + String(AInFiles[i])); //WriteLn('Conteudo da StringList na posicao ' + IntToStr(i) + ' ' + lStrLstFileNames[i]); end; lhigh := High(gsargv); //WriteLn('Tamanho do array antes de receber as strings: ' + IntToStr(lhigh)); setlength(gsargv, length(gsargv) + lStrLstFileNames.Count - 1); //WriteLn('Novo tamanho do array antes de receber as strings: ' + IntToStr(length(gsargv))); for i := 0 to (lStrLstFileNames.Count - 1) do begin gsargv[lhigh + i] := PChar(lStrLstFileNames[i]); //WriteLn('Conteudo da posicao ' + IntToStr(lhigh + i) + ' do array: ' + gsargv[lhigh + i]); end; {for i := Low(gsargv) to High(gsargv) do begin WriteLn('Conteudo da posicao ' + IntToStr(i) + ' do array: ' + gsargv[i]); end;} {for i := Low(gsargv) to High(gsargv) do begin Write(IntToStr(i) + ' - '); WriteLn(gsargv[i]); end;} gsargc := length(gsargv); minst := Nil; code := gsapi_new_instance(@minst, Nil); if (code < 0) then begin result := 1; exit; end; code := gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8); if (code = 0) then code := gsapi_init_with_args(minst, gsargc, @gsargv[0]); code1 := gsapi_exit(minst); if ((code = 0) or (code = e_Quit)) then code := code1; gsapi_delete_instance(minst); if ((code = 0) or (code = e_Quit)) then begin result := 0; exit; end; result := 1; end; function ConvertPSToPDF: Integer; begin end; function ConvertPDFToBMP(AResolution: AnsiString; AInFile: AnsiString): Integer; var code, code1, gsargc, i: Integer; gsargv: array of pansichar; minst: PGSAPIrevision; begin setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := 'gs'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dNOPAUSE'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dQUIET'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dBATCH'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-sDEVICE=bmp256'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dTextAlphaBits=4'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dGraphicsAlphaBits=4'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-q'; setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-sOutputFile=ProgramPage-%03d.bmp'); setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-r' + AResolution); setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar(AInFile); gsargc := length(gsargv); minst := Nil; code := gsapi_new_instance(@minst, Nil); if (code < 0) then begin result := 1; exit; end; code := gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8); if (code = 0) then code := gsapi_init_with_args(minst, gsargc, @gsargv[0]); code1 := gsapi_exit(minst); if ((code = 0) or (code = e_Quit)) then code := code1; gsapi_delete_instance(minst); if ((code = 0) or (code = e_Quit)) then begin result := 0; exit; end; result := 1; end; function ConvertMultPDFToBMP(AResolution: AnsiString; AInFiles: array of AnsiString): Integer; var code, code1, gsargc, i, lhigh: Integer; lStr: PChar; lStrLstFileNames: TStringList; gsargv: array of pansichar; minst: PGSAPIrevision; begin (*0*) setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := 'gs'; (*1*) setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dNOPAUSE'; (*2*) setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dQUIET'; (*3*) setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dBATCH'; (*4*) setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-sDEVICE=bmp256'; (*5*) setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dTextAlphaBits=4'; (*6*) setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-dGraphicsAlphaBits=4'; (*7*) setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := '-q'; (*8*) setlength(gsargv, length(gsargv) + 1); lStr := PChar('-r' + String(AResolution)); gsargv[high(gsargv)] := pansichar(lStr); (*9*) setlength(gsargv, length(gsargv) + 1); gsargv[high(gsargv)] := pansichar('-sOutputFile=ProgramMultPage-%03d.bmp'); lStrLstFileNames := TStringList.Create; for i := Low(AInFiles) to High(AInFiles) do begin lStrLstFileNames.Add('-f' + String(AInFiles[i])); end; lhigh := High(gsargv) + 1; setlength(gsargv, length(gsargv) + lStrLstFileNames.Count); for i := 0 to (lStrLstFileNames.Count - 1) do begin gsargv[lhigh + i] := PChar(lStrLstFileNames[i]); end; gsargc := length(gsargv); minst := Nil; code := gsapi_new_instance(@minst, Nil); if (code < 0) then begin result := 1; exit; end; code := gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8); if (code = 0) then code := gsapi_init_with_args(minst, gsargc, @gsargv[0]); code1 := gsapi_exit(minst); if ((code = 0) or (code = e_Quit)) then code := code1; gsapi_delete_instance(minst); if ((code = 0) or (code = e_Quit)) then begin result := 0; exit; end; result := 1; end; end. Exemplo de uso, conversão PDF p/ BMP... (código FPC/Lazarus ... SEMPRE, CLARO...) program project1; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, {$ENDIF} Classes , SysUtils , GhostScriptDLLWrapper { you can add units after this }; var gPath: String; gReturnCode: Integer; begin gReturnCode := 0; gPath := ExtractFilePath(ParamStr(0)); gReturnCode := ConvertPDFToBMP('300', 'Arquivo1.pdf');//<-- apenas 1 arquivo gReturnCode := ConvertMultPDFToBMP('300', [gPath + 'Arquivo1.pdf' , gPath + 'Arquivo2.pdf' , gPath + 'Arquivo3.pdf']);//<-- mais de um arquivo if gReturnCode <> 0 then begin WriteLn('Returning Code: ' + IntToStr(gReturnCode)); ReadLn(); end; end.
  9. Olá, Alisson, tudo bem? Fiquei com dúvidas sobre o seu questionamento: 1 - O arquivo PDF é gerado no próprio POS android? 2 - Caso não seja, ele acessa/recebe ou "baixa" esse arquivo de um servidor? 3 - Caso a resposta ao item anterior seja positiva: o servidor poderia fazer a conversão? Em sendo as respostas aos itens 2 e 3 positivas, como sugestão, você poderia usar o ghostscript (através de linha de comando, batch ou dll acessada diretamente por uma aplicação sua) para fazer a conversão de PDF p/ BMP e enviar o arquivo para o POS. Usamos o ghost para converter PDFs para jpg, png, bmp, ... e sempre nos atendeu muito bem, com um ótimo desempenho, mas nunca precisamos usá-lo diretamente no android. Fiz algumas pesquisas ontem a noite e parece que dá um trabalhão para compilar o ghostscript para android diretamente dos fontes, pois não há distro oficial para o android. Abaixo segue um script para linha de comando (também sugestão) testei com três arquivos PDFs multipaginados e funcionou com sucesso, gerando um PDF para cada página de cada arquivo: "C:\Program Files\gs\gs10.01.2\bin\gswin64c.exe" -dNOPAUSE -dQUIET -dBATCH -sDEVICE=bmp256 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=Pagina-%03d.bmp -r300 -f "arquivo1.pdf" -f "arquivo2.pdf" -f "arquivo3.pdf" O comando foi testado no Windows 10, com a última versão do ghostscript - 64 bits. (substituir o trecho: "C:\Program Files\gs\gs10.01.2\bin\gswin64c.exe" pelo caminho do executável do ghostscript instalado na sua máquina). Caso meu entendimento não tenha sido correto, antecipadamente peço desculpas.
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...