2011-12-12 4 views
3

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

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

И при преобразовании 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 

кнопку Convert:

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 

ответ

7

Проблема в том, что вы создаете новый документ 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 
+0

Спасибо, что указал мне, и все получилось очень хорошо. – coder

Смежные вопросы