Arquivo

Posts Tagged ‘asp.net’

Exportando ASP.NET para PDF

02 - 12 2 comentários

Num projeto pessoal foi preciso exportar o conteúdo de 1 página ASP.NET para PDF. Pode ser facilmente feito com VB.NET ou C#.

Procurando uma biblioteca pronta para executar esta tarefa encontrei a iText.

Link para download: http://itextpdf.com/download.php

Leia a licença de uso: http://itextpdf.com/terms-of-use/agpl.php

1º.  Fazer referência a biblioteca iTextSharp.dll

2º. Na página que será exportada para PDF, englobei todo o conteúdo que será exportado em uma <div>:

</pre>
<div id="dvText">
//Conteúdo que será exportado</div>
<pre>

3º. Criei um botão com nome: btnExportaPDF, e implementei o seu evento onClick:

Protected Sub btnExportarPDF_Click(sender As Object, e As EventArgs) Handles btnExportarPDF.Click
        Dim attachment As String = "attachment; filename=Article.pdf"

        Response.ClearContent()
        Response.AddHeader("content-disposition", attachment)
        Response.ContentType = "application/pdf"

        Dim stw As StringWriter = New StringWriter()
        Dim htextw As HtmlTextWriter = New HtmlTextWriter(stw)

        Dim imageUrlAntigo As String
        imageUrlAntigo = imgTopo.ImageUrl

        imgTopo.ImageUrl = Server.MapPath("~/Assets/TopoRelatorio.jpg")

        Dim url As String = imgTopo.ImageUrl
        Dim uriImagemAdd As Uri = New Uri(url)

        Dim paragrafoImagem As Paragraph = New Paragraph()

        Dim imagem As Image = Image.GetInstance(uriImagemAdd)
        imagem.ScaleAbsolute(500, 200)

        ConteudoRelatorio.RenderControl(htextw)

        imgTopo.ImageUrl = imageUrlAntigo

        Dim document As Text.Document = New Text.Document()
        PdfWriter.GetInstance(document, Response.OutputStream)
        document.Open()

        document.Add(paragrafoImagem)
        document.Add(imagem)

        document.SetPageSize(PageSize.A4)

        Dim str As StringReader = New StringReader(stw.ToString())
        Dim htmlworker As HTMLWorker = New HTMLWorker(document)
        htmlworker.Parse(str)

        document.Close()
        Response.Write(document)
        Response.End()
    End Sub

4º: Para evitar erros do tipo: “Could not find a part of the path ‘c:\windows\…….”, tive que adicionar uma imagem do topo da página manualmente, via código, criei manualmente 1 objeto do tipo parágrafo e adicionei uma imagem, e posteriormente adicionei ao documento.

5º: Para evitar erros do tipo: “RegisterForEventValidation can only be called during Render()” deve-se adicionar a diretiva de página:

<%@ Page Title="" EnableEventValidation="false" Language="vb" AutoEventWireup="false" ... >

adicionei o atributo: EnableEventValidation=”false” setando como false.

6º: Para evitar erros do tipo: “Control ‘gridView1’ of type ‘GridView’ must be placed inside a form tag with runat=server.”, é só fazer um override do método VerifyRenderingInServerForm da página.

Em VB.NET:

Public Overloads Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)

End Sub

Em C#:

public override void VerifyRenderingInServerForm(Control control){

/* Confirms that an HtmlForm control is rendered for the specified ASP.NET
   server control at run time. */

}

Fica a dica.

Referências:
http://www.codedigest.com/Articles/ASPNET/344_Export_to_PDF_file_in_ASPNet-Gridview_to_PDF_ASPX_Page_Content_to_PDF.aspx

Create PDFs in ASP.NET – getting started with iTextSharp

Renderizando uma Partial View com Ajax e jQuery MVC 3

11 - 11 3 comentários

Renderizar Partial Views com Ajax é útil pra acelerar e otimizar o carregamento da sua página.

No exemplo temos:

1 controller Home

1 view Mensagem

 

  • Código do Controller:
public class HomeController : Controller {
public ActionResult Mensagem() {
ViewBag.MensagemRenderizar = "Esta mensagem é renderizada na view parcial";
return PartialView();
}

 

  • Código da View:

<h2>@ViewBag.MensagemRenderizar</h2>

  • Código no _Layout.cshtml

<div id = “result”> </div>

<script type="text/javascript">
$(function () {
$('#result').load('/Home/Mensagem');
});
</script>

Utilizando o método Load do jQuery,  é feita uma requisição ajax e retornado o conteúdo da view especificada.

Mais informações: http://api.jquery.com/load/

Evitando Java Script Injection ou HTML injection ASP.NET MVC 3

11 - 11 2 comentários

Evitando cross-site script injection XSS utilizando Html Encoding:

Segue um exemplo:

Controller: Cliente

public string Buscar(string Nome)
{
string nomeBuscado = HttpUtility.HtmlEncode("Nome buscado: " + Nome);
return nomeBuscado;
}

Utilizando o método HttpUtility.HtmlEncode, evita que código do tipo: /Cliente/Buscar?Nome=<script>alert(‘Hacker’)</script> seja passado via parâmetro.

Observação: Por padrão, expressões na view engine Razor são automaticamente HTML encoded.

Ex:
@{
var mensagem = “<script>alert(‘hackeado’)</script>”;
}
<span>@mensagem</span>

resultado:
<span>&lt;script&gt;alert(‘hackeado’);&lt;script&gt;</span>

O Script não será executado.

para permitir a incorporação de texto com código/marcação na view, utilize o método:
<span>@Html.Raw(mensagem)</span>
Nesse caso o alert javascript será exibido.

Ao escrever dentro de código javascript, utilize uma segunda proteção contra XSS, um Encode específico para Javascript:

<script type=”text/javascript”>
$(function () {
var boasvindas = ‘Ola @Ajax.JavaScriptStringEncode(ViewBag.LoginUsuario)’;
$(“#mensagem”).html(boasvindas).show(‘slow’);
});
</script>

Publicando site ASP.NET MVC 3 em sua Hospedagem

11 - 11 2 comentários

Publicar um site em ASP.NET MVC 3 na sua hospedagem pode gerar alguma exceção, caso as dll´s do MVC3 não tenham sido encontradas no servidor.

Ex:  Could not load file or assembly ‘System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.

Isso acontece pelo MVC3 ser recente, e não ser distribuído na última versão do .NET Framework. Para satisfazer essas dependências as seguintes DLL´s devem ser enviadas para a pasta BIN do seu site:

  • Microsoft.Web.Infrastructure.dll
  • System.Web.Helpers.dll
  • System.Web.Mvc.dll
  • System.Web.Razor.dll
  • System.Web.Routing.dll
  • System.Web.WebPages.dll
  • System.Web.WebPages.Razor.dll

Uma forma fácil de enviar estas dll´s junto com seu build, é nas referências do seu projeto, clicar nestas referências e alterar a propriedade CopyLocal = true. Isso evita que sejam enviadas DLL´s diferentes das utilizadas no projeto.

Saiba mais sobre a tecnologia ASP.NET MVC: http://www.asp.net/mvc
Dependência de referências para publicar sites em ASP.NET MVC3 – http://joselino.net/2012/01/14/dependencia-de-referencias-para-publicar-sites-em-asp-net-mvc3/

guiaecologico.wordpress.com/

Despertando a consciência que preserva!

Viagem e Voo

Dicas para viagens, férias e voos nacionais e internacionais

Ivan Guimarães Meirelles

Analista Desenvolvedor

Void Podcast

Vazio e sem retorno de valor

Elemar DEV

Negócios, tecnologia e desenvolvimento

2,000 Things You Should Know About WPF

Everything a WPF Developer Needs to Know, in Bite-Sized Chunks

Gabriel RB.net

Blog técnico, com dicas, códigos, novidades e problemas do dia-a-dia programando.

Alexandre Valente's Blog

Experiências em tecnologia e assuntos diversos

%d blogueiros gostam disto: