2011-12-12 24 views
3

pdfsharp libraryを使用して複数の画像をpdfに変換しようとしています。pdfsharpを使用して複数の画像をpdfに変換する

私は単一の画像を変換することができ、それはかなりうまく動作します。

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 

答えて

7

問題は、ループを通過するたびに新しいPDF文書を作成することです。これをループ外に移動する必要があります。また、ページpixではなく、ページ0を参照しています。ここで私はそれを修正する方法です:

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

関連する問題