Pergunta

No meu projeto da web, uso o tipo de arquivo DOCX para conter modelo de relatório. Preciso converter o tipo de arquivo docx em pdf. Você tem algum código gerenciado .NET para fazer isso?

Conheço várias maneiras de resolver essa pergunta. Mas ele não é gerenciado e gratuitamente, como os seguintes itens.

  • Palavra 12.0 Biblioteca de objetos Para salvar programaticamente um documento do Word 2007 como um documento PDF ou um documento XPS. Mas exige a instalação do Office 2007 no servidor.

  • Imprima usando uma impressora PDF gratuita como Criador de PDF. Mas preciso de algum programa para o DOCX aberto no servidor, como o Office 2007. É uma ideia muito ruim.

  • Converta pelo programa de conversor gratuito. Mas o resultado não é perfeito.

  • Use a estrutura como Servidor de renderização XF. É uma boa ideia, mas não é gratuita.

  • Crie todo o conteúdo do documento na API PDF como ITEXTSHARP. Mas devo tentar criar um bom documento.

  • Ou crie documento de modelo com outro formato de arquivo que pode exportá -lo para o formato de arquivo DOCX e PDF. Além disso, os usuários finais devem editar facilmente este arquivo. Se você sabe, por favor me diga.

Obrigado,

Foi útil?

Solução

Não tenho código para converter o DOCX em PDF, mas parece que seu requisito para o DOCX não é firme. Sua última bala diz:

Ou crie documento de modelo com outro formato de arquivo que pode exportá -lo para o formato de arquivo DOCX e PDF. Além disso, os usuários finais devem editar facilmente este arquivo. Se você sabe, por favor me diga.

Eu li isso para significar que você deseja criar um documento de modelo, preencher -o com dados e encobrir -o para PDF, mas permita que o modelo seja mantido, certo?

Solução: XSL-Fo

O XSL-FO é um padrão W3C como HTML e pode ser transformado por vários produtos de código aberto e comerciais em PDF, WordML, XPS, PS, PCL, SVG, TIFF, etc. Eu usei isso para entregar centenas de milhares de documentos por mês, on -line como PDFs e offline (coisas como impressão em massa de verificação).

Para começar, aqui está o Página W3C para XML-FO. Há muitas informações boas por lá, incluindo uma lista de software (de código aberto e Commcial) no lado esquerdo. Eu pessoalmente usei dois produtos comerciais chamados Criador do IBEX PDF e Xep por renderx. Ambos são excelentes produtos, e há uma implementação de 100% gerenciada para chegar ao PDF chamada Fo.net no codeplex. Eu não tentei isso, mas deve satisfazer seu critério "gratuito".

Existem várias maneiras pelas quais você pode editar o modelo para os documentos a serem criados no XSL-FO. Normalmente, esse modelo é XSLT que você aplica aos seus dados XML, mas esse não é um requisito. Eu os construí à mão, mas é uma curva de aprendizado. Você pode começar com um documento no XSL-FO e preencher seções dele com código, assim como você pode HTML. A boa notícia é que são um número de Editores XSL-Fo lá fora. A má notícia é que ninguém que eu conheço é gratuito, mas vários deles são baratos e você pode encontrar algo que atenda ao critério gratuito com um pouco de pesquisas no Google. No entanto, uma opção é que você pode converter do Word usando uma folha de estilo (comercial & gratuitamente).

Outras dicas

Instalar o Office 2007 e usar a Word 12 Object Library é definitivamente a opção que eu optaria (e o fiz em alguns de meus próprios projetos).

Se você não deseja instalar o Word em um servidor da Web de produção, por que não o possui em um servidor secundário. Você pode fazer com que este segundo servidor se comunique com o primeiro (usando um serviço da Web ou algo assim) - ele pode solicitar o próximo documento do Word que precisa de exportação, fazer a conversão e retornar os dados do PDF.

Deixe -me saber se você deseja um exemplo C# da automação de palavras que faz essa conversão (é muito trivial).

Adrian


Aqui está o meu código, publicado para Jason. Isso funciona com o Word 2007. Você precisa baixar e instalar o exportador de PDF no site do Office:

using Microsoft.Office.Interop.Word;

...

object _read_only = false;
object _visible = true;
object _false = false;
object _true = true;
object _dynamic = 2;
object  _missing = System.Reflection.Missing.Value;

object _htmlFormat = 8;        
object _pdfFormat = 17;
object _xpsFormat = 18;

object fileName = "C:\\Test.docx";

ApplicationClass ac = new ApplicationClass();
//ac.Visible = true; // Uncomment to see Word as it opens and converts the document
//ac.Activate();

Document d = ac.Documents.Open(ref fileName, ref _missing, ref _true, ref _read_only, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _visible, ref _missing, ref _missing, ref _missing, ref _missing);

object newFileName = ((string)fileName).Substring(0, ((string)fileName).LastIndexOf(".")) + ".pdf";

d.SaveAs(ref newFileName, ref _pdfFormat, 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);

d.Close(ref _false, ref _missing, ref _missing);
ac.Quit(ref _false, ref _missing, ref _missing);

ac = null;

Então, soul_master, o que você está dizendo é que não quer usar a interop (embora você não diga por que, o que eu estaria interessado em saber), você não quer pagar por um exportador comercial e Você quer resultados perfeitos?

Eu não posso te ajudar, tenho medo. A interop fornecerá resultados perfeitos, sempre, e você já tem o software. Se você não usar isso, precisará fazer um sacrifício - custo ou qualidade.

O Open Office tem uma API? Essa seria pelo menos uma opção gratuita?

Crie o PDF usando uma ferramenta de relatório como o ActiveReports/Crystal Reports (muito mais fácil do que usar o itextSharp)

Eu resolvi meus problemas com a conversão DOCX para PDF com um componente gratuito chamado Spire.doc grátis. Você pode ver mais sobre isso esse site. É muito fácil seu uso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top