2011-03-26 4 views
0

Ceci est mon premier post et je suis vraiment frustré d'utiliser Silverlight juste parce que je suis un débutant dans ce domaine.Exportation multipages PDF d'une interface Silverlight en utilisant SilverPDF

J'ai trois Silverlight UI (StackPanels fondamentalement) "stkMain1", "stkMain2" et "stkMain3".

Je dois convertir ces trois panneaux de pile en PDF. J'utilise silverPDF (je suppose qu'il utilise plus iTextSharp et PdfSharp.)

J'ai écrit le code suivant:

Private Sub cmdImage_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles cmdImage.Click 
    Dim d As New SaveFileDialog() 
    d.Filter = "PDF file format|*.pdf" 

    ' Save the document... 
    If d.ShowDialog() = True Then 
     stkMain.Children.Clear() 
     stkMain.Children.Add(stkMain1) 

     Dim document As New PdfDocument() 
     Dim page As PdfPage = document.AddPage 
     Dim gfx As XGraphics = XGraphics.FromPdfPage(page) 
     Dim img As ImageTools.ExtendedImage = BillPage1.ToImage 
     Dim mstream As New MemoryStream() 
     Dim encoder As New JpegEncoder() 
     encoder.Encode(img, mstream) 
     mstream.Seek(0, SeekOrigin.Begin) 
     Dim pdfImg As XImage = XImage.FromStream(mstream) 
     gfx.DrawImage(pdfImg, 0, 0) 

    End If 
End Sub 

Cela fait tout correct et donne un fichier PDF avec une page .. Superbe sortie et les pouces vers le haut. Maintenant, le vrai problème commence:

Private Sub cmdImage_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles cmdImage.Click 
    Dim d As New SaveFileDialog() 
    d.Filter = "PDF file format|*.pdf" 

    ' Save the document... 
    If d.ShowDialog() = True Then 
     stkMain.Children.Clear() 
     stkMain.Children.Add(BillPage1) 

     Dim document As New PdfDocument() 
     Dim page As PdfPage = document.AddPage 
     Dim gfx As XGraphics = XGraphics.FromPdfPage(page) 
     Dim img As ImageTools.ExtendedImage = BillPage1.ToImage 
     Dim mstream As New MemoryStream() 
     Dim encoder As New JpegEncoder() 
     encoder.Encode(img, mstream) 
     mstream.Seek(0, SeekOrigin.Begin) 
     Dim pdfImg As XImage = XImage.FromStream(mstream) 
     gfx.DrawImage(pdfImg, 0, 0) 


     document.Pages.Add() 

     Dim page1 As PdfPage = document.AddPage 
     Dim gfx1 As XGraphics = XGraphics.FromPdfPage(page1) 
     Dim img1 As ImageTools.ExtendedImage = BillPage2.ToImage 
     Dim mstream1 As New MemoryStream() 
     Dim encoder1 As New JpegEncoder() 
     encoder1.Encode(img1, mstream1) 
     mstream1.Seek(0, SeekOrigin.Begin) 
     Dim pdfImg1 As XImage = XImage.FromStream(mstream1) 
     gfx1.DrawImage(pdfImg1, 0, 0) 


     document.Save(d.OpenFile()) 
    End If 
End Sub 

Maintenant, cela crée deux pages, et je reçois une sortie brouillée, le contenu des stackpanels se chevauchent les uns les autres.

Comment résoudre ce problème? J'ai besoin d'aide désespérément. Le projet est dû et je dois le soumettre avant le 26 mars 2011 (lundi).

Merci à l'avance Ravi

+0

Pouvez-vous expliquer ce que votre sortie ressemble un peu plus? Je ne connais pas très bien Silverlight, mais il semble que vous convertissiez un élément d'interface utilisateur en élément et que vous l'ajoutiez à une seule page dans un fichier PDF, puis que vous le répétiez avec l'élément d'interface utilisateur suivant, n'est-ce pas? Est-ce que la première page est OK? Est-ce juste la deuxième page qui a l'air mal? Qu'est-ce qui chevauche quoi? Est-ce un problème dans le PDF ou dans la création d'image? Avez-vous essayé d'enregistrer les images sur le disque manuellement pour voir si elles sont OK? –

Répondre

1

Essayez ceci:

If d.ShowDialog() = True Then 
    Dim document As New PdfDocument() 
    Dim page As PdfPage = document.AddPage 
    Dim pdfImg As XImage = DrawUI(stkMain1) 
    gfx.DrawImage(pdfImg, 20, 20) 
    page = document.AddPage() 
    gfx = XGraphics.FromPdfPage(page) 
    pdfImg = DrawUI(stkMain2) 
    page = document.AddPage() 
    gfx = XGraphics.FromPdfPage(page) 
    gfx.DrawImage(pdfImg, 20, 20) 
    pdfImg = DrawUI(stkMain3) 
    gfx.DrawImage(pdfImg, 20, 20) 
    document.Save(d.OpenFile()) 
End If 


Private Function DrawUI(ByVal oControl As Object) As XImage 
    Dim img As ImageTools.ExtendedImage = ImageExtensions.ToImage(oControl) 
    Dim mstream As New MemoryStream() 
    Dim encoder As New JpegEncoder() 
    encoder.Encode(img, mstream) 
    mstream.Seek(0, SeekOrigin.Begin) 
    Dim pdfImg As XImage = XImage.FromStream(mstream) 
    Return pdfImg 
End Function 
Questions connexes