Многостраничный PDF-экспорт пользовательского интерфейса Silverlight с использованием SilverPDF

Это мой первый пост, и я очень разочарован использованием Silverlight только потому, что я новичок в этом.

У меня есть три пользовательских интерфейса Silverlight (в основном StackPanels): «stkMain1», «stkMain2» и «stkMain3».

Мне нужно преобразовать эти три панели стека в PDF. Я использую silverPDF (думаю, он также использует iTextSharp и PDFSharp.)

Я написал следующий код:

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

Это делает все правильно и дает один файл 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

Теперь это создает две страницы, и я получаю зашифрованный вывод, содержимое панелей стека перекрывает друг друга.

Как это решить?? МНЕ СРОЧНО НУЖНА ПОМОЩЬ. ПРОЕКТ СРОЧЕН, И Я ДОЛЖЕН ОТПРАВИТЬ ЕГО ДО 26 марта 2011 г. (ПОНЕДЕЛЬНИК).

Заранее спасибо Рави


person Kumar Ravi    schedule 26.03.2011    source источник
comment
Можете ли вы объяснить, как выглядит ваш вывод немного больше? Я не слишком хорошо знаю Silverlight, но похоже, что вы конвертируете элемент пользовательского интерфейса в элемент и добавляете его на одну страницу в PDF-файле, а затем повторяете это со следующим элементом пользовательского интерфейса, верно? Первая страница в порядке? Это только вторая страница выглядит плохо? Что перекрывает что? Это проблема в PDF или в создании изображения? Пробовали ли вы сохранять изображения на диск вручную, чтобы убедиться, что они в порядке?   -  person Chris Haas    schedule 26.03.2011


Ответы (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
person Bobby    schedule 04.09.2011