2011-12-12 160 views
3

我想用pdfsharp library将多个图像转换为pdf。使用pdfsharp将多个图像转换为pdf

我能够转换单个图像,它工作得很好。

虽然转换bulk imagessingle 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 

保存全文:

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