none
como paso un xml a un pdf RRS feed

  • Pregunta

  •  

    Necesito ayuda por favor, tengo documentos xml y quiero darles un formato y presentarlos en archivos pdf, es posible hacer esto en visual studio 2005? si es posible, podrían darme una nocion de como transformarlos por favor, gracias.
    domingo, 27 de abril de 2008 14:39

Todas las respuestas

  •  

    Buenas,

     

       Librerías nativas no trae el .net framework, pero... las hay de pago (por ejemplo Tall PDF), y tambíen hay una gratuita y open source que no va mal (te permite incluso definir XML / XSL).

     

       Aquí te van unos links:

     

    http://sourceforge.net/projects/itextsharp/

    http://itextsharp.sourceforge.net/

    http://www.lowagie.com/iText/

     

    Tiene truco para compilarla, te pide las DLL de otro proyecto opensource (creo que de zip), si te da problemas bajate el fuente de ese proyecto y integralo en la solución de itextsharp y compilalo con VStudio (en el numero de Abril de dotnetmania de 2005 hay una explicación de como va).

     

    Otro truco consiste en emplear un driver de impresora que vuelque a PDF, los hay gratuitos (no tengo ningún link por aquí).

     

      Buena suerte

         Braulio

    lunes, 28 de abril de 2008 7:00
  • Hola,

     

    Ciertamente puedes usar XSL-FO para hacer la conversion:

     

    http://es.wikipedia.org/wiki/XSL-FO

     

    Como alternativa "chapuza" podrias convertir el XML a un DataTable o DataSet (que al fin y alcabo son unos XML con un estructura fija) y crear un informe de Crystal para generar el PDF.

     

    Un saludo.

     

    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.

    Javier Conesa

    MCP - Analista Programador

    Web: http://www.moreplus.es/index.aspx


    lunes, 28 de abril de 2008 9:18
    Moderador
  •  

    Puedes utilizar el iText.net

     

    En esta pagina puedes encontrar varios ejemplos.

     

    http://www.ujihara.jp/iTextdotNET/en/examples.html

    lunes, 28 de abril de 2008 15:02
  • Hola foro!

     

    Necesito el mismo codigo, y lo enlaces que habeis puesto no les entiendo. guillecast, has conseguido hacerlo?  Podeis poner el cogigo?

    Muchas gracias

     

    miércoles, 30 de abril de 2008 11:14
  • Que tal Lidia24 pues la verdad tampoco me fueron de mucha utilidad, no he conseguido mucho, asi que si lo consigues primero pues lo podrias publicar.

     

    miércoles, 30 de abril de 2008 19:23
  • Entiendo, son temas en inglés y un poco avanzados.

     

    Si necesitáis una solución paso a paso y en español, en el número de Abril del 2005 de Dotnetmania vierne un especial sobre como generar PDF utilizando .net.

     

    http://www.dotnetmania.com/Articulos/014/index.html

     

      No se si está disponible online (a veces los número antiguos están disponible en PDF en la web) o si tendrés que comprar el número o versión digital.

     

      Buena suerte

        Braulio

    jueves, 1 de mayo de 2008 12:31
  • Muchas gracias Braulio,

     

    Tiene muy buena pinta, pero no consigo abrir el archivo de visual con Visual Basic 2005, y alguien consigue abrirlo que publique el codigo.

     

    Un saludo

    jueves, 1 de mayo de 2008 12:55
  • Buenos ejemplos, pero los documentos xml ¿deben de traer ya una estructura como en el caso de tallpdf?, no habría forma de utilizar xsl-fo para transformarlos a pdf?

    viernes, 2 de mayo de 2008 16:52
  •  

    Buenas,

     

      De esto, he escuchado por parte de linuxeros, en Apache parece que hay algo que se llamo FOP que trabajo con esto.

     

     En Ms, he encontrado un producto que es de pago, de aspose, aquí hay un ejemplo:

     

    http://www.aspose.com/documentation/file-format-components/aspose.pdf-for-.net-and-java/c-example.html

     

     

      No se como será de bueno, ni si puede haber alguno gratuito.

     

      Buena suerte

         Braulio

    lunes, 5 de mayo de 2008 6:26
  • Hola!!

     

    Creo que he encontrado un buen ejemplo, pero esta en C#, si lo podeis pasar a Visual , os agradeceria que publicarais el codigo. Os paso el link a la pagina de donde lo he sacado (os teneis que registrar) :

    http://www.componentspot.com/products/review.aspx?id=23&MasterCat=5&Categories=0

     

    Es cogido es:

     

    using System;

    using System.Drawing;

    using PDFLib;

    using PDFLib.Objects;

    using PDFLib.Objects.DataTypes;

    using System.IO;

    using System.Diagnostics;

    using System.Runtime.InteropServices;



    namespace PDFGenTest

    {

    /// <summary>

    /// Test generation of a PDF document

    /// </summary>

    class AppStart

    {

    [DllImport("shell32.dll")]

    public static extern int ShellExecuteA(int hwnd ,

    string lpOperation , string lpFile , string lpParameters,

    string lpDirectory , int nShowCmd );


    static void Main(string[] args)

    {

    // Create a document object and initialize it

    PDFDocument doc = new PDFDocument ();

    doc.VersionMinor = 3;

    Outlines olines = new Outlines(doc);

    Pages pages = doc.Pages;

    //Craete a 2 new pages

    Page page = new Page(pages);

    Page page1 = new Page(pages);

    // define the dimention of the pages

    MediaBox mediabox = new MediaBox (0,0,612,322);

    page.MediaBox = mediabox;


    MediaBox mediabox1 = new MediaBox (0,0,612,822);

    page1.MediaBox = mediabox1;

    // Set the outlines reference. We are not craating an outline here in

    // this doc

    //doc.Catalog.Outlines = doc.GetIndirectObject(olines).Reference ;

    doc.Catalog.Outlines = new Reference ( olines);

    // Create resources object for each pages

    page.Resources = new Resources(doc);

    page1.Resources = new Resources(doc);

    // Create font andf initialize it

    PDFFont fnt = new PDFFont(null);

    fnt.Name = new Name ("F1");

    fnt.Encoding = new Name ("WinAnsiEncoding");

    fnt.BaseFont = new Name ("Helvetica");

    fnt.SubType = new Name ("TrueType");

    IndirectObject ioFont = new IndirectObject ( fnt, doc);

    PDFDictionary dicFont = new PDFDictionary(doc);

    dicFont.CarriageReturn = string.Empty;

    dicFont.Add (fnt.Name, new Reference (ioFont));

    // add the font dictionary to the resources

    page.Resources.Add (new Name("Font"), dicFont);

    // Create the procedure set

    /*

    ProcSet procset = new ProcSet ();

    procset.Add (new Name ("PDF"));

    procset.Add (new Name ("Text"));

    IndirectObject ioProcset = new IndirectObject (procset, doc);

    // add the proc set to the resources

    page.Resources.Add (new Name ("ProcSet"),new Reference(ioProcset));

    */

    // create the stream to write to the page

    PDFStream ps = new PDFStream();

    PDFGraphics g = new PDFGraphics();

    // create the text object to write to

    TextObject text = new TextObject();

    // Set font and write

    text.SetFont ( fnt, 8);

    g.SetLineWidth (1);

    g.SetRGBFillColor (Color.Cornsilk);

    g.SetRGBStrokeColor (Color.BurlyWood);

    //g.MoveTo (400,400);

    int cellWidth = 40;

    int cellHeight = 20;

    text.SetRGBFillColor (Color.Blue);

    text.SetRGBStrokeColor(Color.Blue);


    text.MoveFromCurrent (cellWidth, (int)(13.2 * cellHeight) );

    for (int y=13; y>=13; y--)

    {

    for (int x = 1; x<= 10 ;x++)

    {

    text.Write("Cell");

    text.Write(x.ToString());

    text.MoveFromCurrent (cellWidth,0);

    g.DrawRectangle (new Rectangle (x*cellWidth, y* cellHeight, cellWidth, cellHeight));

    }

    }

    g.FillAndStrokePath ();

    g.SetRGBFillColor (Color.AliceBlue);

    text.MoveFromCurrent (-cellWidth, -cellHeight) ;

    for (int y=12; y>=9; y--)

    {

    for (int x = 1; x<= 10 ;x++)

    {

    g.DrawRectangle (new Rectangle (x*cellWidth, y* cellHeight, cellWidth, cellHeight));

    }

    }

    g.FillAndStrokePath ();

    text.MoveFromCurrent (-360,50);

    text.SetRGBFillColor (Color.Black);

    text.SetRGBStrokeColor (Color.Black);

    text.SetFont (fnt,12);

    text.Write ("This table below was populated with PDF.NET library");


    ps.Write (g);

    ps.Write (text);


    // Indirect the stream

    IndirectObject ioStream = new IndirectObject ( ps, doc);

    // set both page to refer to the same content

    page.Content = ioStream.Reference;

    page1.Content = ioStream.Reference;

    page1.Resources = page.Resources;

    Info info = new Info();

    IndirectObject ioInfo = new IndirectObject ( info, doc);

    doc.Trailer.Info = ioInfo.Reference ;


    // Save the document

    doc.Save(@"basic.pdf");

    ShellExecuteA (0,"open","basic.pdf","",

    AppDomain.CurrentDomain.BaseDirectory,7);

    }

    }

    }

     

     

    Hasta pronto

    martes, 6 de mayo de 2008 9:29
  • Para convertir de C# a VB .net, este conversor va de miedo (además es gratis y está disponible online, nada de instalarte programas):

     

    http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx

     

    Saludos

       Braulio

     

    martes, 6 de mayo de 2008 9:39
  • Muchas gracias Braulio,

     

    Ya lo he convertido a VB y ahora voy a probarlo con mi XML, a ver si funciona.

     

    Un saludo

    martes, 6 de mayo de 2008 9:54