Categorias
componentes dll ghostscript imagem pdf upload winform

Converter PDF em Imagem em C# com GhostScript

Esse ?? um artigo bem old, mas que muita gente me enviou e-mails pedindo como fazer isso. Ent??o criei um artigo bem resumido baseado no de Lord TaGoH. Primeiramente, voc?? precisa ter a DLL do GhostScript em seu projeto: ou voc?? instala ou pega de algu??m que j?? tenha instalado. O arquivo que me refiro ?? o gsdll32.dll. Obs: a convers??o s?? funciona para as vers??es mais recentes ent??o pegue alguma a partir da vers??o 9 como garantia.

Lembra do meu ??ltimo post de scaneamento? Adicionei um bot??o de anexar um PDF e converter em imagem, ent??o irei aproveitar a mesma aplica????o adicionando essa funcionalidade. Copie a DLL para seu projeto e, em Propriedades, deixe configurado o atributo Copiar sempre para quando for compil??-la caso seja um Windows Form. Se for um Web Form, adicione em algum local onde a classe conversora possa encontr??-la.

Na p??gina do CodeProject disp??e de uma classe (bin??ria) j?? pronta para uso uso da DLL chamada de PdfToImage. Ent??o voc?? podem baixar de l?? ou aqui. Baixado a DLL, voc?? pode adicionar como refer??ncia ao seu projeto/p??gina. Agora ?? s?? c??digo…

using PdfToImage;

// Objeto de convers??o
PDFConvert converter = new PDFConvert();

// Arquivo PDF selecionado de um OpenFileDialog
string arquivo = FileUploadSelect.FileName;

// Local de sa??da do arquivo convertido
string output = _directoryForImages + “LJ_” + _loja + “_Scan_” + DateTime.Now.ToString(“yyyy_MM_dd_HH_mm_ss”) + “.jpg”;

// Configura????es de convers??o
converter.OutputToMultipleFile = false;
converter.TextAlphaBit = 4;
converter.FirstPageToConvert = 1;
converter.LastPageToConvert = 1;
converter.FitPage = false;
converter.JPEGQuality = 10;
converter.OutputFormat = “png16m”;

// Faz a convers??o e retorna true se estiver tudo OK
bool resultado = converter.Convert(arquivo, output);

Pronto! Mais f??cil do que isso imposs??vel. Fique atento ??s configura????es de convers??o, sen??o n??o funciona.

Categorias
componentes dicas dll imagem pdf thumbnail

Convertendo HTML em PDF

Nesse artigo veremos como converter um HTML em PDF. O HTML pode vir de uma p??gina externa quanto ser criado em tempo de execu????o. N??o haver?? muito o que explicar pois o c??digo em si, voc?? encontra a rodo pela net. Usaremos o componente iTextSharp.

Baixe o bin??rio e adicione em seu aplicativo (pasta Bin). Utilize o c??digo abaixo para fazer o processo de convers??o e exibi????o do PDF na tela:

using System;
using System.Web;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html.simpleparser;

            // Captura ou atribui o HTML a ser convertido – no caso estou baixando de uma URL
            string html = new System.Net.WebClient().DownloadString(“http://thiagomarcal.blogspot.com/”);
            //string html = “Convertendo o HTML em PDF – Thiago Mar??al”;
            // Cria o documento aplicando o tamanho e margens
            Document documento = new Document(PageSize.A4, 80, 50, 30, 65);
            // Memory Stream para ser usado na convers??o e emiss??o
            MemoryStream ms = new MemoryStream();
            // Inicializa o gravador
            PdfWriter writer = PdfWriter.GetInstance(documento, ms);
            // L?? o HTML e atribui
            StringReader conteudo = new StringReader(html);
            // Objeto de convers??o do HTML
            HTMLWorker objeto = new HTMLWorker(documento);
            // Abre o documento
            documento.Open();
            // Aplica o parser para an??lise de convers??o
            // Geralmente aqui ocasiona muitos erros – irei explicar no post
            objeto.Parse(conteudo);
            // Fecha o documento
            documento.Close();
            // For??a o download do PDF gerado – se desej??vel voc?? pode salvar em disco tamb??m
            Response.Clear();
            Response.AddHeader(“content-disposition”, “attachment; filename=Documento_HTML.pdf”);
            Response.ContentType = “application/pdf”;
            Response.Buffer = true;
            Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
            Response.OutputStream.Flush();
            Response.End();

Veja que a vari??vel html eu atribuo o HTML que desejo converter. O seu conte??do pode vir externamente ou posso atribuir um valor desejado.

Vamos aos problemas! Muitos v??o encontrar erro quando o objeto estiver fazendo o parser do HTML e muitos ir??o falhar. Acontece que, devido ?? complexidade do HTML que estiver trabalhando, o componente n??o consegue converter para o formato adequado ao que ele usa internamente. Por exemplo, o TABLE do HTML que usamos ?? “meio” diferente do TABLE que o componente usa. Esse ?? um dos exemplos… Ent??o prepara-se para fazer um tratamento adequado antes de fazer o parser. Eu sugiro o seguinte:

  1. Use express??o regular para validar seu HTML;
  2. Use express??o regular e/ou o HtmlAgilityPack para remover os JavaScripts;
  3. O conte??do a ser convertido deve ser apenas o que est?? dentro do body;
  4. Imagens, CSS e links devem conter o caminho completo (exemplo: http://thiagomarcal.blogspot.com/imgs/logo.png ao inv??s de ../imgs/logo.png), etc.
Ou seja, quanto mais simplificado for seu HTML mais r??pido e f??cil ser?? convertido em PDF. Uma observa????o bem clara ??: nem sempre ficar?? 100% que o esperado.
Uma dica que pode ser usada (e um armengue, claro!) ?? fazer o seguinte:
  1. Gere um thumb (imagem) do HTML que deseja converter (saiba como gerar um thumb de um HTML nesse post) e salve em disco;
  2. Atribua a vari??vel html com o conte??do <img src=”http://thiagomarcal.blogspot.com/imgs/thumb.png” />;
  3. Coloque o width e height na tag IMG o tamanho desejado (pode ser at?? o tamanho do papel).
Pronto! O parser ir?? identificar apenas uma imagem no HTML e gerar?? o PDF com ela. Mole-mole…