http://tehospedo.com.br
Login/Novo Cadastro |
HomeArtigosSua ContaDownloadsPesquisar  


· Home
· Anunciantes
· Artigos
· Blog
· Conteúdo
· Conteúdo Antigo
· Downloads
· Enquetes
· Enviar Artigo
· Enviar Conteúdo
· Fale Conosco
· Fóruns
· Links
· Livro de Visitas
· Membros
· News
· Pesquisa
· Pontuações
· Recomende-nos
· Somente Texto
· Sua Conta
· TOP 10
· WebChat



 




Faça sua doação e ajude-nos a manter o site




Visite nossa loja.
E sempre que for comprar alguma coisa, compre por lá.

Assim você ajuda a manter o site.
Obrigado pela sua colaboração.

Visitar Loja OnLine

Abaixo algumas sessões:








Até o momento, recebemos
3948593
vizualizações de páginas (page views) desde 11/09/2004

Desenvolvedores.net: Fóruns

http://desenvolvedores.net :: Exibir tópico - Extrair imagem TIFF de um PDF
 FAQFAQ   PesquisarPesquisar   GruposGrupos   PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Extrair imagem TIFF de um PDF

 
Novo Tópico   Responder Mensagem    http://desenvolvedores.net - Índice do Fórum -> C#
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
rafaelcamara



Registrado em: Jun 15, 2010
Mensagens: 3

MensagemEnviada: Ter Jun 15, 2010 12:12 pm    Assunto: Extrair imagem TIFF de um PDF Responder com Citação

Estou desenvolvendo uma aplicação em C# (Asp.Net) onde existem pdfs salvos no servidor e os usuarios podem visualizá-los. tenho que dar a opção ao usuário de rotacionar o pdf que está sendo exibido, porém ele pode salvar a alteração no servidor, sem fazer download. Tentei rotacionar o pdf inteiro usando itextsharp, porém não tive sucesso. Então parti para a idéia de extrair a imagem de dentro do pdf, rotacioná-la e depois salvar em um outro pdf, que iria substituir o original. O problema neste caso foi quando o pdf contém uma imagem tiff dentro dele. Fiz o tratamento da tiff mas não funciona. Segue o código. Se alguém souber como resolver este problema da tiff, ou tiver alguma outra solução, agradeço desde já.

bytes - já são os bytes do arquivo que está dentro do pdf.

Código:

using (System.IO.MemoryStream memStream = new System.IO.MemoryStream(bytes))

{

TiffBitmapDecoder MyDecoder = new TiffBitmapDecoder(memStream, BitmapCreateOptions.PreservePixelFormat,         BitmapCacheOption.Default);

BitmapFrame MyFrame = MyDecoder.Frames[0];

InPlaceBitmapMetadataWriter MyInplace = MyFrame.CreateInPlaceBitmapMetadataWriter();

memStream.Position = 0;

System.Drawing.

Image img = System.Drawing.Image.FromStream(memStream);
img.RotateFlip(

RotateFlipType.Rotate90FlipNone);

}

Na linha - TiffBitmapDecoder MyDecoder = new TiffBitmapDecoder(memStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);

dá o erro "No imaging component suitable to complete this operation was found."
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Marcelo
Administradores
Administradores


Registrado em: 1093441569
Mensagens: 773
Localização: SP

MensagemEnviada: Ter Jun 15, 2010 5:35 pm    Assunto: Responder com Citação

antes de mais nada... vc já testou seu código com uma imagem TIFF pura (sem ser extraída) . pode ser que no momento da extração não esteja sendo enviado como base 64 (se nao me falha a memória esta e a codificação da imagem tiff, posso estar enganado)

Outra coisa... a muito tempo atrás eu fuz algo semelhante mas eu tinha o instalador do Componente Imaging da Kodak ... e instalava este componente antes de fazer qquer alteração em imagem do tipo Tiff.

Ele funciona bem, apesar de ser um componente antigo ..rs

[]'s
_________________
Marcelo de Souza
Site: http://desenvolvedores.net
Minha filhota: http://luninha.com
IRC: Rede: irc.desenvolvedores.net
Canal: desenvolvedores
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
rafaelcamara



Registrado em: Jun 15, 2010
Mensagens: 3

MensagemEnviada: Qua Jun 16, 2010 3:07 pm    Assunto: Responder com Citação

Quando eu uso uma tif direto dá certo. Só não dá certo quando é extraido do pdf.
Tentei fazer a conversão para a base 64 mas não funcionou. Vc tem algum exemplo que faz essa conversão ??

obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Marcelo
Administradores
Administradores


Registrado em: 1093441569
Mensagens: 773
Localização: SP

MensagemEnviada: Qua Jun 16, 2010 11:20 pm    Assunto: Responder com Citação

usa o método System.Convert.ToBase64String
_________________
Marcelo de Souza
Site: http://desenvolvedores.net
Minha filhota: http://luninha.com
IRC: Rede: irc.desenvolvedores.net
Canal: desenvolvedores
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
rafaelcamara



Registrado em: Jun 15, 2010
Mensagens: 3

MensagemEnviada: Qui Jun 17, 2010 1:41 pm    Assunto: Responder com Citação

Não deu certo converter, não sei se está faltando alguma coisa, já to sem ideias. Segue o código completo, é meio grande pq to usando o itextsharp.
Se vc conseguir identificar o que está faltando, eu agradeço muito

valeu.

Código:

public void carregaPDF(byte[] arrBytes)
        {

            MemoryStream s = new MemoryStream(arrBytes);



            String outputPath = "C:\\";
            PdfReader pdf = new PdfReader(arrBytes);
            RandomAccessFileOrArray raf = new iTextSharp.text.pdf.RandomAccessFileOrArray(arrBytes);

            try
            {
                for (int pageNumber = 1; pageNumber <= pdf.NumberOfPages; pageNumber++)
                {
                    PdfDictionary pg = pdf.GetPageN(pageNumber);
                    PdfDictionary res =
                      (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));


                    PdfDictionary xobj =
                      (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
                    if (xobj != null)
                    {
                        foreach (PdfName name in xobj.Keys)
                        {

                            PdfObject obj = xobj.Get(name);
                            if (obj.IsIndirect())
                            {
                                PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);

                                PdfName type =
                                  (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));

                                if (PdfName.IMAGE.Equals(type))
                                {

                                    int XrefIndex = Convert.ToInt32(((PRIndirectReference)obj).Number.ToString(System.Globalization.CultureInfo.InvariantCulture));
                                    PdfObject pdfObj = pdf.GetPdfObject(XrefIndex);
                                    PdfStream pdfStrem = (PdfStream)pdfObj;
                                    byte[] bytes = PdfReader.GetStreamBytesRaw((PRStream)pdfStrem);
                                    if ((bytes != null))
                                    {
                                        using (System.IO.MemoryStream memStream = new System.IO.MemoryStream(bytes))
                                        {

                                            String base64 = Convert.ToBase64String(bytes);
                                            MemoryStream ms = new MemoryStream(Convert.FromBase64String(base64));
                                            ms.Seek(0, SeekOrigin.Begin);
                                            StreamReader objStream = new StreamReader(ms);

                                            TiffBitmapDecoder MyDecoder = new TiffBitmapDecoder(objStream.BaseStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
                                            BitmapFrame MyFrame = MyDecoder.Frames[0];                                                                                       

                                            System.Drawing.Image img = System.Drawing.Image.FromStream(objStream.BaseStream);
                                            img.RotateFlip(RotateFlipType.Rotate90FlipNone);

                                            pdf.Close();
                                            raf.Close();

                                            String temp = @"\\10.1.1.7\intersap_tudo\mac_images\imagens\1\processos_new\20\temp";
                                            if (!Directory.Exists(temp))
                                                Directory.CreateDirectory(temp);

                                            iTextSharp.text.Document doc = new iTextSharp.text.Document();
                                            PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(temp + "\\00000000.pdf", FileMode.Create));

                                            doc.Open();
                                            PdfPTable table = new PdfPTable(1);
                                            table.AddCell(iTextSharp.text.Image.GetInstance(img, ImageFormat.Jpeg));
                                            doc.Add(table);
                                            doc.Close();


                                            // Mostra o pdf rotacionado na tela
                                            StreamReader reader = new StreamReader(temp + "\\00000000.pdf");

                                            BinaryReader binaryReader = new BinaryReader(reader.BaseStream);
                                            int x = (int)reader.BaseStream.Length;
                                            byte[] bytesPDF = binaryReader.ReadBytes(x);
                                            setImage(bytesPDF);
                                            reader.Dispose();



                                            //Exclui a pasta temporária
                                            //Directory.Delete(temp, true);

                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    http://desenvolvedores.net - Índice do Fórum -> C# Todos os horários são GMT
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibído.
Responder Tópicos Proibído
Editar Mensagens: Proibído.
Excluir Mensagens: Proibído.
Votar em Enquetes: Proibído.

Powered by phpBB © 2001, 2005 phpBB Group

PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Tempo para gerar esta página: 0.16 segundos