2011-03-26 14 views
0

これは私の最初の投稿であり、私はSilverlightを使用して本当に不満を抱いています。SilverPDFを使用したSilverlight UIのマルチページPDFエクスポート

私は3つのSilverlight UI(基本的にはStackPanels) "stkMain1"、 "stkMain2"、 "stkMain3"を持っています。

これら3つのスタックパネルをPDFに変換する必要があります。私は(私はそれがさらにiTextSharpとPDFSharpを使用していますね。)silverPDFを使用してい

私が書いた次のコードを:

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 

これは...素晴らしいすべて正しい行い、1ページに1つのPDFファイルを提供します出力とサムネイルを表示します。 今、本当の問題は開始します。

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 

は今、この2ページを作成し、私が重なっstackpanelsのスクランブル出力、内容を取得。

これを解決するには?私は必然的に助けが必要です。プロジェクトが完了し、2011年3月26日(月曜日)までに提出する必要があります。事前 で

おかげラヴィ

+0

あなたの出力は、もう少しどのように見えるか説明できますか? Silverlightについてはあまりよく分かりませんが、UI要素を要素に変換してPDFの単一ページに追加してから、次のUI要素で繰り返すように見えますか?最初のページはOKですか?見栄えの悪い2ページ目ですか?何が重なっているの? PDFや画像作成の問題ですか?イメージがディスクに手動で保存されたかどうかを確認してみましたか? –

答えて

1

はこれを試してみてください:

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 
関連する問題