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!
Assinar:
Postar comentários (Atom)
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...
-
As funções abaixo ajudam na leitura de um arquivo XML da NF-e. Você só precisa fazer a leitura das tags corretas e lançá-las na base de dado...
-
Olá, pessoal! Esse projeto foi criado em 2017 e aprimorado agora em 2018. Foi também criado com o Visual Studio 2015 em C#.NET com o Xa...
-
O GLPI é um dos muitos tipos de aplicativos helpdesk free existentes na internet. O fórum do mesmo pode ser encontrado neste link: ...
Nenhum comentário:
Postar um comentário