none
De docx para pdf. Como? RRS feed

  • Pergunta

  • Tenho um arquivo:
    D:\Documentos\Cobranca_Itau.docx

    Como faço para salvar esse cara em pdf usando C# e WindowsApplication?

    Esse documento ele vaientrar em um loop(semelhante a uma mala direta) e algumas variáveis serão substituida pelos valores vindos de um BD(MySql) e depois salvar com um determinado nome em pdf. Tenho o iText já, mas ainda não conseguir fazer. Abrir o docx e substituir as variáveis, já fiz, mas o PDF é que tá osso. Tentei instalar o Report.dll, para fazer um exemplo que peguei na net, mas não consigo instalar e até pq não sei se é Report ou Reports. Qualquer ajuda é bem-vinda. Obrigado.
    segunda-feira, 9 de julho de 2012 20:42

Todas as Respostas

  • Amigo, bom dia

    este artigo abaixo explica como, através da API do word você pode salvar seu documento como .PDF

    http://msdn.microsoft.com/en-us/library/bb412305(v=office.12).aspx


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    terça-feira, 10 de julho de 2012 12:07
    Moderador
  • Com esse código, dá esse erro:

    Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

    Com o código abaixo eu consigo abrir e alterar, mas está muito lento e não consigo salvar em PDF que é o meu objetivo também

    string nome = "NOMEVAR";
    int count = documento.Words.Count;
                for (int i = 1; i <= count; i++)
                {
                    if (nome == documento.Words[i].Text)
                    {
                        documento.Words[i].Text = "Paulo";
                    }
                    documento.Save();

    .........

    terça-feira, 10 de julho de 2012 12:40
  • Esse é meu código:

    Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
                Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document();

                object missing = System.Type.Missing;

                try
                {
                    object fileName = @"D:\CLS Documentos\NOTIFICAÇÃO_EXTRAJUDICIAL_MODELO_ITAU2.docx";
                    doc = word.Documents.Open(ref fileName,
                    ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing);

                    doc.Activate();

                    foreach (Microsoft.Office.Interop.Word.Range tmpRange in doc.StoryRanges)
                    {
                        tmpRange.Find.Text = "NOMEVAR"; ====>>>> Aqui dá o erro
                        tmpRange.Find.Replacement.Text = "Paulo";
                        tmpRange.Find.Replacement.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphJustify;

                        tmpRange.Find.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;
                        object replaceAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;

                        tmpRange.Find.Execute(ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref replaceAll,
                        ref missing, ref missing, ref missing, ref missing);
                    }

                        doc.Save();

                        doc.Close(ref missing, ref missing, ref missing);
                        word.Application.Quit(ref missing, ref missing, ref missing);
                    }
                        catch (Exception ex)
                    {
                    doc.Close(ref missing, ref missing, ref missing);
                    word.Application.Quit(ref missing, ref missing, ref missing);
                }

    terça-feira, 10 de julho de 2012 12:44
  • Com esse código, gera o PDF, mas não carrega o conteúdo do documento DOCX, apenas o título que vai no Chunck, pois ele grava apenas o título. Como eu gero o conteúdo do docx dentro do pdf? Pelo visto, eu preciso abrir o documento e gravar o conteúdo. Abaixo meu código:
    string nome = "NOMEVAR";
                int count = doc.Words.Count;
                for (int i = 1; i <= count; i++)
                {
                    if (nome == doc.Words[i].Text)
                    {
                        doc.Words[i].Text = "Paulo";
                    }
                    doc.Save();

                    iTextSharp.text.Document document = new iTextSharp.text.Document();
                    PdfWriter.GetInstance(document, new FileStream(@"D:\CLS Documentos\TESTE.pdf", FileMode.Create));
                    document.Open();
                    //Insere conteúdo no arquivo 
                    document.Add(new Chunk("D:\\CLS Documentos\\NOTIFICAÇÃO_EXTRAJUDICIAL_MODELO_ITAU1.docx"));
                    document.Close();

                }
    terça-feira, 10 de julho de 2012 13:16
  • Fiz isso dentro do for acima e vem vazio o pdf:

    document.Add(new Chunk(doc.Words[i].Text.ToString()));

    terça-feira, 10 de julho de 2012 13:27
  • se faço assim:

    string texto = "";

    for(....)

    texto = doc.Words[i].Text.ToString();

    document.Add(new Chunk(texto);

    Não vem nada, mas se coloco assim:

    for(...)

    texto = "Testando aplicação";

    document.Add(new Chunk(texto);

    Aí o pdf vem: "Testando a aplicação";

    terça-feira, 10 de julho de 2012 14:14
  • Esse codigo dá erro no ApplicationClass()
    Microsoft.Office.Interop.Word.ApplicationClass wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
                object filename = "nomeDoArquivo.doc";
                object newFileName = "nomeDoArquivo.pdf";

                object missing = System.Type.Missing;

                // Abrir documento
                Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref filename, ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing);

                // Formato para Salvar o Arquivo – Destino  - No caso, PDF
                object formatoArquivo = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;

                // Alterações no tamanho do Papel – No caso, utilizando o formato A5
                doc.PageSetup.PaperSize = Microsoft.Office.Interop.Word.WdPaperSize.wdPaperA5;

                // Alterações na Orientação do Papel
                doc.PageSetup.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientLandscape;

                // Salvar Arquivo
                doc.SaveAs(ref newFileName, ref formatoArquivo, ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

                // Não salvar alterações no arquivo original
                object salvarAlteracoesArqOriginal = false;
                wordApp.Quit(ref salvarAlteracoesArqOriginal, ref missing, ref missing);
    • Editado pnet terça-feira, 10 de julho de 2012 17:49
    terça-feira, 10 de julho de 2012 17:49
  • Nessa linha o erro é: Comando Falhou.

    doc.SaveAs(ref newFileName, ref formatoArquivo, ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

    terça-feira, 10 de julho de 2012 17:53
  • O que está errado nesse código:
    Microsoft.Office.Interop.Word.Application wordApplication = new Microsoft.Office.Interop.Word.Application();
                Microsoft.Office.Interop.Word.Document wordDocument = null;

                object paramSourceDocPath = @"D:\CLS Documentos\NOTIFICAÇÃO_EXTRAJUDICIAL_MODELO_ITAU1.docx";
                //object newFileName = @"D:\CLS Documentos\nomeDoArquivo.pdf";

                object paramMissing = System.Type.Missing;

                string paramExportFilePath = @"D:\CLS Documentos\Test.pdf";

                WdExportFormat paramExportFormat = WdExportFormat.wdExportFormatPDF;
                bool paramOpenAfterExport = false;
                WdExportOptimizeFor paramExportOptimizeFor =
                    WdExportOptimizeFor.wdExportOptimizeForPrint;
                WdExportRange paramExportRange = WdExportRange.wdExportAllDocument;
                int paramStartPage = 0;
                int paramEndPage = 0;
                WdExportItem paramExportItem = WdExportItem.wdExportDocumentContent;
                bool paramIncludeDocProps = true;
                bool paramKeepIRM = true;
                WdExportCreateBookmarks paramCreateBookmarks =
                    WdExportCreateBookmarks.wdExportCreateWordBookmarks;
                bool paramDocStructureTags = true;
                bool paramBitmapMissingFonts = true;
                bool paramUseISO19005_1 = false;

                try
                {
                    // Open the source document.
                    wordDocument = wordApplication.Documents.Open(
                        ref paramSourceDocPath, ref paramMissing, ref paramMissing,
                        ref paramMissing, ref paramMissing, ref paramMissing,
                        ref paramMissing, ref paramMissing, ref paramMissing,
                        ref paramMissing, ref paramMissing, ref paramMissing,
                        ref paramMissing, ref paramMissing, ref paramMissing,
                        ref paramMissing);

                    // Export it in the specified format.
                    if (wordApplication != null)
                        wordDocument.ExportAsFixedFormat(paramExportFilePath,
                            paramExportFormat, paramOpenAfterExport,
                            paramExportOptimizeFor, paramExportRange, paramStartPage,
                            paramEndPage, paramExportItem, paramIncludeDocProps,
                            paramKeepIRM, paramCreateBookmarks, paramDocStructureTags,
                            paramBitmapMissingFonts, paramUseISO19005_1,
                            ref paramMissing);
                }
                catch (Exception ex)
                {
                    Erro = ex.Message;
                }
                finally
                {
                    // Close and release the Document object.
                    if (wordDocument != null)
                    {
                        wordDocument.Close(ref paramMissing, ref paramMissing,
                            ref paramMissing);
                        wordDocument = null;
                    }

                    // Quit Word and release the ApplicationClass object.
                    if (wordApplication != null)
                    {
                        wordApplication.Quit(ref paramMissing, ref paramMissing,
                            ref paramMissing);
                        wordApplication = null;
                    }

                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }
                   
            }
    terça-feira, 10 de julho de 2012 21:56
  • Tá osso. Hoje é meu último dia, vou tentar negociar, mas hj é meu último dia e já comecei errado. Que coisa.
    quinta-feira, 12 de julho de 2012 10:52
  • Pessoaol, não sabia que C#,DOCX e PDF fossem tão incompatíveis assim. Falei com 4 programadores mais experientes que eu e nenhum deles conseguiu fazer funcionar. Resolvi, fazendo em Delphi, o velho e bom Delphi. Gostaria de fazer com C# até para uma questão de honra, mas ainda não consegui nada. Ainda estou pesquisando uma forma de salvar arquivos docx em pdf.
    sexta-feira, 13 de julho de 2012 14:54
  • Pessoaol, não sabia que C#,DOCX e PDF fossem tão incompatíveis assim. Falei com 4 programadores mais experientes que eu e nenhum deles conseguiu fazer funcionar. Resolvi, fazendo em Delphi, o velho e bom Delphi. Gostaria de fazer com C# até para uma questão de honra, mas ainda não consegui nada. Ainda estou pesquisando uma forma de salvar arquivos docx em pdf.
    sexta-feira, 13 de julho de 2012 14:55