domingo, 29 de abril de 2012

ASP.NET - PRINT SCREEN DE UMA PÁGINA ASP.NET


Recentemente, deparei-me com a necessidade de retirar print screen de uma página em ASP.NET em um dado momento via código sem a interação do usuário.

Quem trabalha com o ASP.NET deve saber que todas as páginas visualizadas em um browser na verdade estão sendo executadas dentro do servidor.  Então retirar um print screen via código é uma tarefa mais complicada porque a execução do código irá em busca de uma página que está em execução no servidor ASP.NET onde a página se encontra e não realmente no browser ativo no momento.


Minha saída para este problema:  


Um aplicativo em separado estaria em execução na máquina cliente onde o browser está em execução.
Esse aplicativo se encarregaria de fazer um print screen da tela ativa salvando na página c:\temp, Em seguida, obteria esta imagem do diretório c:\temp e a salvaria em um arquivo pdf na própria pasta c:\temp. 
Quando houvesse a necessidade de realizar um print screen esse pequeno aplicativo seria acionado - executarservico seria setado em 1, fazendo o print screen da tela e gerando a imagem requisitada e salvando-a em arquivo pdf. Este pequeno aplicativo teria um timer que de 15 em 15 segundos verificaria
se o ExecutarServico na tabela está setado em 1 ou não. No momento em que o Executarservico estiver setado em 1 a imagem seria gerada e o arquivo pdf criado.

Utilizei o ASP.NET com o VB.Net para gerar o código.

Os imports associados a isso estão listados abaixo:

Imports System.IO
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms

Para gerar o print screen via código:

'Ler se ExecutarServico está setado em 1

 myCommand = New OleDbCommand("select ExecutarServico,linha from Parametros", myConnection)
ds = myCommand.ExecuteReader()

While ds.Read()

            sValor = ds.Item("ExecutarServico")
            sLinha = ds.Item("Linha")
         

End While

 'Se o valor padrão foi 1, dispara a cópia da imagem
 If sValor = "1" Then

            'Grava o nome do arquivo com a linha associada ao mesmo
            Dim sNomeArquivo = sLinha + "_" + DateTime.Now.ToString("yyMMddhhmmss") + ".jpg"
            arquivoWS.WriteLine("Captura de Tela iniciada... " & DateTime.Now)
            arquivoWS.Flush()

            Try


                Dim image As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb)
                Dim g As Graphics = Graphics.FromImage(image)
                g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy)
                image.Save("c:\temp\" + sNomeArquivo, ImageFormat.Jpeg)


            Catch ex As Exception
                arquivoWS.WriteLine("Erro na Captura de Tela efetuada... " & DateTime.Now)
                arquivoWS.Flush()
            End Try
End If

Caso um erro ocorra na geração da imagem, o mesmo será gerado no arquivo de log criado.
      
A geração do arquivo pdf com a imagem criada é mostrado abaixo:


 'Recuperar o nome do arquivo de imagem na base de dados
        sSQL = "select ExecutarServico,nomearquivo,diretorio from Parametros where linha = '" & sLinhaSelecionada & "' and ROTA =  '" & sRotaSelecionada & "' and computador = '" & shostname & "'"
        myCommand = New OleDbCommand(sSQL, myConnection)
        ds = myCommand.ExecuteReader()

        'Recuperar nome e caminho do arquivo na base de dadps
        While ds.Read()

            sLimpaArquivoJPG = ds.Item("nomearquivo")
            sDiretorioArquivo = ds.Item("diretorio")

        End While

        ds.Close()


'Gerar arquivo PDF com a imagem criada
        ''Gravar a imagem dentro do arquivo PDF
        ''baseado em : http://www.dotnetspark.com/kb/1364-add-image-to-pdf-document-using-itextsharp.aspx
        Dim imageFilePath As String = sDiretorioArquivo + sLimpaArquivoJPG
        Dim test As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(imageFilePath)


        'Resize image depend upon your need
        'logo.ScaleToFit(280.0F, 260.0F)
        test.ScaleToFit(600.0F, 600.0F)

        'Give space before image
        test.SpacingBefore = 30.0F

        'Give some space after the image
        test.SpacingAfter = 1.0F
        test.Alignment = Element.ALIGN_CENTER

        Dim hoje As DateTime = DateTime.Now
        Dim arquivoPDF = sLinhaSelecionada & "_" & sRotaSelecionada & "_" & DateTime.Now.ToString("yyMMddhhmmss") & ".pdf"


        'Grava o arquivo PDF no modo retrato
        Dim doc As New Document(iTextSharp.text.PageSize.A4_LANDSCAPE, 2, 2, 42, 42)
        PdfWriter.GetInstance(doc, New FileStream(sDiretorioArquivo + "\" & arquivoPDF, FileMode.Create))
        doc.Open()
        doc.Add(test)
        doc.Close()


Desse modo, teremos um arquivo pdf com a imagem da tela desejada em seu interior.


Sucesso a todos!

quinta-feira, 26 de abril de 2012

CONFIGURANDO IIS PARA O WINDOWS 7

Recentemente, ao trabalhar com o Windows 7 deparei com o problema relativo a se fazer o registro do IIS para o ASP gerando o seguinte erro:

An error has occurred: 0x8007b799
You must have administrative rights on this machine in order to run this tool.


O que ocorre: É necessário um novo tipo de configuração para o Windows 7. Para corrigir esse tipo de erro imediatamente, você precisa desativar o seu nível de UAC :

Start > Control Panel > System and Security > Action Center > Choose Your UAC Level - Set this to Never Notify;

Após alterar o nível, você deve reiniciar o computador e adentrar novamente com usuário e senha.

Após isso, ao tentar novamente registrar o IIS na máquina você terá sucesso:
 



Além disso, ao tentar se publicar uma página que tenha sido criada no Visual Studio 2010 com o ASP.NET em uma máquina com o Windows 7 será necessário antes de tentar publicar e após registrar o IIS com sucesso instalar o IIS 6 Metabase. 


O IIS 6 Metabase pode ser obtido na página da Microsoft.


DANFE EM VISUAL STUDIO 2010 E CRYSTAL REPORTS 2010



Olá, pessoal!


Venho através desta informar que a DANFE desenvolvida em VB.NET está agora atualizada para a versão mais nova do Visual Studio, o Visual Studio 2010.

Os relatórios da DANFE também foram atualizados para a nova versão do Crystal Reports.

A partir da versão 2010 do Visual Studio o Crystal Reports deixou de ser incluído com a aplicação. Para instalar o Crystal Reports você deve ir até a páginada SAP Bussines e baixar a versão disponível para integração com o Visual Studio 2010:

http://www.businessobjects.com/jump/xi/crvs2010/us2_default.asp

A opção a ser selecionada é a primeira da lista desta página e mostrada abaixo:

SAP Crystal Reports, version for Visual Studio 2010 - Standard
Standard EXE installation package which installs the software into the Visual Studio IDE.

O arquivo possui 295MB de tamanho e deve ser instalado a fim de que você possa criar relatório com o Crystal Reports no Visual Studio 2010.

O site oficial do Visual Studio 2010 é apresentado abaixo:

http://www.microsoft.com/visualstudio/pt-br/home-produtos



A DANFE possui a partir de agora uma função a mais que permite selecionar o modo de impressão da mesma, retrato ou paisagem. As versões antigas somente realizam a impressão em modo retrato e precisavam ter o relatório em Crystal Reports configurado a fim de que a impressão em paisagem pudesse ser possível. Com a nova funcionalidade um relatório no modo paisagem em Crystal Reports foi incluso ao código-fonte a fim de permitir que o mesmo seja impresso em modo paisagem.

Código que faz com que o relatório seja impresso em modo paisagem:


        'DESCOMENTAR AQUI PARA VER A DANFE INICIAL 07/11/2010 23:05
        'DANFE INICIAL
        Dim myRelatorio As New Danfe_paisagem()
        'Mudar formato para Paisagem
        myRelatorio.PrintOptions.PaperOrientation = PaperOrientation.Landscape
        myRelatorio.SetDataSource(myDs1)
        Me.CrvXml.ReportSource = myRelatorio
        Me.CrvXml.Visible = True

Danfe_paisagem(0 é o nome do novo relatório em Crystal Reports para impressão da DANFE em modo de paisagem.

Lembro a todos que o código-fonte desta DANFE continua a ser comercializado para os que necessitarem disto para o desenvolvimento da nota fiscal eletrônica.

Também vale ressaltar que a parte de leitura do XML deste aplicativo pode ser utilizado para se obter os dados de qualquer XML de nota fiscal eletrônica a fim de que os mesmos possam ser acrescentados em uma tabela de qualquer base de dados - SQL SERVER, MUSQL, ORACLE, INFORMIX, etc.

Sucesso a todos!!

By
Leonardo Metelys
Desenvolvedor ASP.NET / VB.NET / C#.NET / Delphi

UM APLICATIVO PARA LEITURA DEVOCIONAL ANUAL DA BIBLIA EM ANDROID

Olá, pessoal!  Este novo projeto foi criado em Visual Studio 2019 em C#.Net com o Xamarin. Já está disponível no Google Play para vocês baix...