使用 pdfsharp 将多个图像转换为 pdf

发布于 2024-12-20 23:37:51 字数 2829 浏览 2 评论 0原文

我正在尝试使用 pdfsharp 库 将多个图像转换为 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, 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

I am trying to convert multiple images to pdf using pdfsharp library.

I am able to convert single image and it works pretty well.

And while converting bulk images to single pdf I am facing problem that it takes all the images and converts them but after conversion If I check it shows me only the last image as it is not appending to the existing image and it overwrites the previous image.

So how do I rectify this?

Any help will be appreciated as I am first time working with pdf library and point me out If I am doing any mistake.And I will be gald to know more about this and I don't feel though If you pointed me out the mistake I have done.

Here is my code:

 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

Background worker:

 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 button:

  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

Saving 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

囚你心 2024-12-27 23:37:51

问题是您在每次循环时都会创建一个新的 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

The problem is that you are creating a new PDF document on each pass through the loop. You need to move this outside the loop. Also, you are referencing page 0, not page pix. Here is how I would fix it:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文