我正在尝试使用
pdfsharp library将多个图像转换为pdf.
我能够转换单个图像,它工作得很好.
虽然将批量图像转换为单个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) 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
解决方法
问题是您正在通过循环每次传递创建一个新的PDF文档.你需要在循环之外移动它.此外,您正在引用第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) success = True Catch ex As Exception MessageBox.Show(ex.Message,MessageBoxIcon.Error) End Try Next Dim destinaton As String = (TryCast(e.Argument,String()))(1) doc.Save(destinaton) doc.Close() End Sub