De docx para pdf. Como?
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.
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.
Pjava
Curtidas 0
Respostas
Moisés Gonçalves
09/07/2012
Utilize o interop do Word.
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 = @C:\Documento.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 = <Valor>
tmpRange.Find.Replacement.Text = Valor a substituir;
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);
}
GOSTEI 0
Moisés Gonçalves
09/07/2012
No caso, para salvar no formato word utilize a lógica abaixo no lugar do
doc.Save();
doc.Save();
// Arquivo de Destino
object newFileName = c:\\Arquivo.pdf;
// 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.wdPaperA4;
// 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);
GOSTEI 0
Pjava
09/07/2012
Ok, mas como eu faço para salvar em PDF e não abrir em modo leitura? Vou testar esse código agora, mas tenho essa dificuldade
GOSTEI 0
Pjava
09/07/2012
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();
........
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();
........
GOSTEI 0
Pjava
09/07/2012
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();
........
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();
........
GOSTEI 0
Pjava
09/07/2012
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);
}
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);
}
GOSTEI 0
Pjava
09/07/2012
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();
}
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();
}
GOSTEI 0
Pjava
09/07/2012
Fiz isso dentro do for acima e vem vazio o pdf:
document.Add(new Chunk(doc.Words[i].Text.ToString()));
document.Add(new Chunk(doc.Words[i].Text.ToString()));
GOSTEI 0
Moisés Gonçalves
09/07/2012
Você não vai usar uma biblioteca para o PDF.
Veja a lógica do meu segundo post.
Nela o próprio Word irá exportar o PDF.
Veja a lógica do meu segundo post.
Nela o próprio Word irá exportar o PDF.
GOSTEI 0
Pjava
09/07/2012
Então Moisés, no se código, dá esse erro e não sei como resolver.
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Aí tentei um segundo e que é esse postado(após o seu), eu abro o docx, mas ao gerar o PDF vem vazio.
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Aí tentei um segundo e que é esse postado(após o seu), eu abro o docx, mas ao gerar o PDF vem vazio.
GOSTEI 0
Pjava
09/07/2012
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;
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;
GOSTEI 0
Pjava
09/07/2012
Moisés, tentei mesclar o meu código para renomear com seu para gerar o PDF e deu esse erro:
ERRO: Comando Falhou(na linha abaixo)
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);
ERRO: Comando Falhou(na linha abaixo)
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);
GOSTEI 0
Pjava
09/07/2012
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);GOSTEI 0
Pjava
09/07/2012
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);
Responder Citação Marcar como Resposta Editar Excluir
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);
Responder Citação Marcar como Resposta Editar Excluir
GOSTEI 0
Pjava
09/07/2012
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();
}
}
GOSTEI 0
Moisés Gonçalves
09/07/2012
Tente escrever o código ao invés de colar, pois aqui no fórum do devmedia alguns caracteres especiais são perdidos entre as tags code.
GOSTEI 0
Pjava
09/07/2012
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();
}
}
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();
}
}
GOSTEI 0