Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Convertir Word a PDF

331 views
Skip to first unread message

Jesus Suarez

unread,
Jan 31, 2007, 6:55:02 AM1/31/07
to
Hola a Todos,

como puedo hacer en c# para convertir un Word en un PDF, como podria hacer?

Gracias


Paco

unread,
Jan 31, 2007, 3:42:08 PM1/31/07
to

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

Jose A. Fernandez

unread,
Feb 1, 2007, 4:54:43 PM2/1/07
to
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/

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

unread,
Feb 1, 2007, 5:21:38 PM2/1/07
to
Un mas...
ejemplos de codigo en VB.NET con iText.NET
http://www.ujihara.jp/iTextdotNET/en/examplesvb.html

____________________
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/

Paco

unread,
Feb 2, 2007, 2:46:22 AM2/2/07
to
On 1 feb, 22: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/

>
> 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
>

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

unread,
Feb 2, 2007, 9:02:41 AM2/2/07
to
Paco
Te voy a pedir un poco de generosidad :)
Veo que estas leyendo los news (grupo de noticias) con google grupos..
asi que puedes ver tambien mi correo....
Si puedes enviar estos 4 componentes en un zip (pero renombra el .zip
a algo._ip (porque sino GMAIL lo bloquea por el contenido)
Entonces lo pruebo sin instalar
Muchisimas gracias

_______________________
Jose A. Fernandez

> Luego en el forohttp://www.oooforum.org/hay un montón de código en

Paco

unread,
Feb 4, 2007, 3:41:23 AM2/4/07
to
> > Luego en el forohttp://www.oooforum.org/hayun montón de código en

> > Java que cuesta un poco traducirlo a c# y un poco menos en c#.
>
> > Saludos,
>
> > Paco- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

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

0 new messages