como puedo hacer en c# para convertir un Word en un PDF, como podria hacer?
Gracias
Hola,
Puedes usar OpenOffice. Las dll de .NET están en el directorio
assembly de la instalación.
Te pego el código a mogollón:
using System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Diagnostics;
using System.Reflection;
using uno.util;
using unoidl.com.sun.star.lang;
using unoidl.com.sun.star.uno;
using unoidl.com.sun.star.bridge;
using unoidl.com.sun.star.frame;
using unoidl.com.sun.star.text;
using unoidl.com.sun.star.beans;
using unoidl.com.sun.star.util;
namespace PROT.GeneradorDocumentos
{
public class GenerarDocumento
{
private XMultiServiceFactory xFactory;
private XComponent xComponent;
private XComponentContext xContext;
private void
GuardarComoPDF(unoidl.com.sun.star.text.XTextDocument xTextDoc, string
archivo)
{
XDispatchHelper dispatcher
=
(XDispatchHelper)xFactory.createInstance("com.sun.star.frame.DispatchHelper");
XFrame frame = xTextDoc.getCurrentController().getFrame();
unoidl.com.sun.star.beans.PropertyValue[] args1 = new
unoidl.com.sun.star.beans.PropertyValue[3];
args1[0] = new unoidl.com.sun.star.beans.PropertyValue();
args1[0].Name = "URL";
args1[0].Value = new uno.Any("file:///" +
archivo.Replace("\\", "/"));
args1[1] = new unoidl.com.sun.star.beans.PropertyValue();
args1[1].Name = "FilterName";
args1[1].Value = new uno.Any("writer_pdf_Export");
args1[2] = new unoidl.com.sun.star.beans.PropertyValue();
args1[2].Name = "Overwrite";
args1[2].Value = new uno.Any(true);
//args1[2] = new
unoidl.com.sun.star.beans.PropertyValue();
//args1[2].Name = "SelectionOnly";
//args1[2].Value = new uno.Any(true);
dispatcher.executeDispatch((XDispatchProvider)frame,
".uno:ExportDirectToPDF", "", 0, args1);
}
private unoidl.com.sun.star.text.XTextDocument
AbrirDocumento(string archivo)
{
unoidl.com.sun.star.frame.XDesktop xDesktop;
unoidl.com.sun.star.frame.XComponentLoader
xComponentLoader;
unoidl.com.sun.star.beans.PropertyValue[] arProps = new
unoidl.com.sun.star.beans.PropertyValue[1];
unoidl.com.sun.star.text.XTextDocument xTextDoc;
arProps[0] = new PropertyValue();
arProps[0].Name = "Hidden";
arProps[0].Value = new uno.Any(true);
xContext = Bootstrap.bootstrap();
xFactory =
(XMultiServiceFactory)xContext.getServiceManager();
xDesktop =
(unoidl.com.sun.star.frame.XDesktop)xFactory.createInstance("com.sun.star.frame.Desktop");
xComponentLoader =
(unoidl.com.sun.star.frame.XComponentLoader)xDesktop;
xComponent = xComponentLoader.loadComponentFromURL(
"file:///" + archivo.Replace("\\", "/"), "_blank", 0,
arProps);
xTextDoc =
(unoidl.com.sun.star.text.XTextDocument)xComponent;
return xTextDoc;
}
}
}
Sería entonces:
unoidl.com.sun.star.text.XTextDocument doc = AbrirDocumento("c:
\fichero.doc");
GuardarComoPDF(doc, "c:\fichero.pdf");
Te obliga a:
- Instalar OpenOffice en el servidor web.
- "Impersonar" ASP.NET con una cuenta de usuario del sistema. Y abrir
OpenOffice al menos una vez para que se configure con ese usuario.
- Tener cuidado porque parece que no le va trabajar con muchas
peticiones al mismo tiempo.
Como ventajas puedes hasta establecer permisos en el PDF. En el foro
de openoffice tienes un montón de gente y código de ejemplo.
Saludos,
Paco Ferre
Lo de paco esta muy bueno,,, habria que encontrar essos componentes
que utiliza el openoffice para copiarlo en la carpeta bin (abria que
ver cuales utiliza)
muy bueno Paco... lo voy a tener en cuenta
Saludos a ambos
____________________
Jose A. Fernandez
____________________
Jose A. Fernandez
On 1 feb, 18:54, "Jose A. Fernandez" <fernande...@gmail.com> wrote:
> Hola Jesus
> Otra alternativa a la de Paco es esto que me comentarion (todavia no
> lo use pero en los proximos dos meses seguro tendre que utilizarlo)http://www.ujihara.jp/iTextdotNET/en/
Hola José,
Los assemblies vienen con la instalación estandard de OpenOffice 2.1,
concretamente en:
[Unidad]:\Archivos de programa\OpenOffice.org 2.1\program\assembly
Basta instalar OpenOffice (www.openoffice.org), crear un proyecto,
añadir referencias a los 4 assemblies (vaya palabro);
cli_basetypes.dll, cli_cppuhelper.dll, cli_types.dll y cli_ure.dll,
copiar y pegar el código que he puesto y probarlo con un fichero de
Word.
Luego en el foro http://www.oooforum.org/ hay un montón de código en
Java que cuesta un poco traducirlo a c# y un poco menos en c#.
Saludos,
Paco
_______________________
Jose A. Fernandez
> Luego en el forohttp://www.oooforum.org/hay un montón de código en
Hola Jose,
Los assemblies no sirven si no tienes openoffice instalado, imagino
que son solo un interface para acceder a las funcionalidades de
OpenOffice, solo ocupan 737 Kb.
OpenOffice es gratuito, te lo puedes bajar en su web
www.openoffice.org, ocupa 93 Mb.
Saludos,
Paco