Преобразование нескольких изображений в PDF с использованием pdfsharp - PullRequest
3 голосов
/ 12 декабря 2011

Я пытаюсь преобразовать несколько изображений в PDF, используя pdfsharp library .

Я могу конвертировать одно изображение, и оно работает довольно хорошо.

И при преобразовании bulk images в single pdf я сталкиваюсь с проблемой, что он берет все изображения и конвертирует их, но после преобразования. Если я проверю, это показывает мне только последнее изображение, так как оно не добавляется к существующему изображению, и оно перезаписывает предыдущее изображение.

Так как мне это исправить?

Любая помощь будет признательна, так как я впервые работаю с библиотекой pdf и укажите мне, если я делаю какую-либо ошибку. И я буду рад узнать больше об этом, и я не чувствую, хотя, если вы указали мне ошибка, которую я сделал.

Вот мой код:

 Private Sub btnAddFolder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddFolder.Click
            If Me.FolderBrowserDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then

            Dim f As New DirectoryInfo(Me.FolderBrowserDialog1.SelectedPath)
            Dim fso As New System.Object
            For Each file As FileInfo In f.GetFiles
                Select Case file.Extension.ToLower
                    Case ".jpg", ".bmp", ".gif", ".png"
                        Me.ThumbControl1.BackgroundImage = Nothing
                        Me.CheckedListBox1.Items.Add(file.FullName, CheckState.Checked)
                        Me.ThumbControl1.AddThumbnail(file.FullName)
                        Me.ThumbControl1.BackgroundImage = Nothing
                        Me.CheckedListBox1.SelectedIndex = 0
                End Select
            Next
            End If
    End Sub

Фоновый работник:

 Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) Handles bw.DoWork
        For pix As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1
            Try
                Dim source As String = CheckedListBox1.Items(pix).ToString()
                Dim destinaton As String = (TryCast(e.Argument, String()))(1)

                Dim doc As New PdfDocument()
                doc.Pages.Add(New PdfPage())
                Dim xgr As XGraphics = XGraphics.FromPdfPage(doc.Pages(0))
                Dim img As XImage = XImage.FromFile(source)

                xgr.DrawImage(img, 0, 0)
                doc.Save(destinaton)
                doc.Close()
                success = True
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Next
    End Sub

Кнопка преобразования:

  Private Sub btnConvert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnConvert.Click
         bw.RunWorkerAsync(New String(1) {srcFile, destFile})
  End sub

Сохранение Pdf:

Private Sub btnSelectDest_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSelectDest.Click
        sfdDestFile.Filter = "PDF Files(*.pdf)|*.pdf"
        If sfdDestFile.ShowDialog() <> System.Windows.Forms.DialogResult.OK Then
            Return
        End If
        destFile = sfdDestFile.FileName
 End Sub

1 Ответ

7 голосов
/ 13 декабря 2011

Проблема в том, что вы создаете новый PDF-документ при каждом прохождении цикла.Вы должны переместить это за пределы цикла.Кроме того, вы ссылаетесь на страницу 0, а не на страницу pix.Вот как бы это исправить:

Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) Handles bw.DoWork
    Dim doc As New PdfDocument()

    For pix As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1
        Try
            Dim source As String = CheckedListBox1.Items(pix).ToString()
            Dim oPage As New PDFPage()

            doc.Pages.Add(oPage)
            Dim xgr As XGraphics = XGraphics.FromPdfPage(oPage)
            Dim img As XImage = XImage.FromFile(source)

            xgr.DrawImage(img, 0, 0)
            success = True
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    Next

    Dim destinaton As String = (TryCast(e.Argument, String()))(1)
    doc.Save(destinaton)
    doc.Close()
End Sub
...