当前位置: 首页 > 知识库问答 >
问题:

将Pdf拆分为页面时iText7上的PDFEException

苗阳
2023-03-14

下一段代码应该将一个多页pdf文件拆分为每页一个文件。它适用于第一页,但当关闭第二页的目标pdfDocument时,它会抛出iText。内核PDFEException:“文档没有页面。”尝试使用不同的源文件,结果相同。还尝试先获取页面数,然后打开每个页面的读卡器,得到相同的结果

Shared Function splitFileIntoPages(sourceFilename As String) As Boolean
    If System.IO.File.Exists(sourceFilename) Then

        Using reader As New PdfReader(sourceFilename)
            Using pdfSource As New PdfDocument(reader)
                For iPage = 1 To pdfSource.GetNumberOfPages
                    Dim destFilename = sourceFilename.Replace(".pdf", String.Format(".Page {0}.pdf", iPage))
                    Using writer As New PdfWriter(destFilename)
                        Using pdfDest As New PdfDocument(writer)
                            pdfSource.CopyPagesTo(iPage, 1, pdfDest)
                        End Using
                    End Using
                Next
            End Using
        End Using

    End If
    Return True
End Function

共有1个答案

柴坚诚
2023-03-14

关键是从PdfSplitter继承并重载方法GetNextPdfWriter,以便为结果文件提供自定义文件名:

Class CustomSplitter
    Inherits PdfSplitter

    Private _pageIdx As Integer
    Private ReadOnly _sourceFilename As String

    Shared Function splitFileIntoPages(sourceFilename As String) As Boolean
        If System.IO.File.Exists(sourceFilename) Then
            Dim destinationFolder = System.IO.Path.GetDirectoryName(sourceFilename)
            Using pdfSource As New PdfDocument(New PdfReader(sourceFilename))
                Dim oSplitter = New CustomSplitter(pdfSource, sourceFilename)
                Dim oSplittedDocs = oSplitter.SplitByPageCount(1)

                For Each oSplittedDoc In oSplittedDocs
                    oSplittedDoc.Close()
                Next
            End Using
        End If
        Return True
    End Function

    Public Sub New(ByVal pdfDocument As PdfDocument, ByVal sourceFilename As String)
        MyBase.New(pdfDocument)
        _sourceFilename = sourceFilename
        _pageIdx = 0
    End Sub

    Protected Overrides Function GetNextPdfWriter(ByVal documentPageRange As PageRange) As PdfWriter
        _pageIdx += 1
        Dim filename = _sourceFilename.Replace(".pdf", String.Format(".Page {0}.pdf", _pageIdx))
        Return New PdfWriter(filename)
    End Function
End Class

用法:

CustomSplitter.splitFileIntoPages("mysourcefile.pdf")
 类似资料:
  • 我有pdf文件。需要将它们导入系统并按页面分割。单独的页面=单独的文件。 我尝试使用FPDF和FPDI: 有些文件工作良好,但有些文件我得到了错误: 致命错误:未捕获异常“setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException”,消息为“此PDF文档已加密,无法使用Fpdi处理” 据我所知,这个文件是加密的(但我可以毫无问题地打

  • 我正在将一些PDF编辑工具从iTextSharp更新到iText7。 在iTextSharp中,pdfStamper类中有一个方法:pdfStamper。ReplacePage()。然而,iText7中的pdfStamper类已被删除,我在复制相同的功能时遇到困难。 假设我有文档X,需要用文档Y的第1页替换第4页,但我希望结果保存到一个新的文档Z。 到目前为止,我有3行使用CopyPageTo方法

  • 问题内容: 我想要一个多页的pdf文件,并每页创建单独的pdf文件。 我已经下载了reportlab并浏览了文档,但它似乎是针对pdf生成的。我还没有看到有关处理PDF文件本身的任何信息。 有没有一种简单的方法可以在python中做到这一点? 问题答案: 等等

  • 为了将html转换为pdf,我使用了IText7的API convertToDocument,传递参数模板的ByteArrayInputStream、PDFDocument和ConvertProperties。 相关代码段: “PDF间接对象属于其他PDF文档。请将对象复制到当前PDF文档。” 转换属性的创建 在每次调用convertToDocument API之前创建对象 我是不是漏掉了什么?

  • 我一直在尝试根据预定义的标准将一个docx文档分割为多个文档。以下是我把它分成几段的方法 虽然我能够用上面的代码提取段落,但我找不到提取页面的方法。我的理解是word中的页面是呈现关注点,它发生在word应用程序的运行时。

  • 我正在尝试将一个PDF文档拆分为多个文档,其中每个文档包含的最大页数小于最大文件大小。 我的代码目前可以在Eclipse上运行,但是当我点击. jar文件时,java类中的静态方法似乎崩溃了(但是我似乎抓不到异常)。 不工作的代码是: myListOfDocuments=mysplitter。拆分(文件); 在调用上述行时,JVM会以某种方式退出静态方法。加载似乎工作正常,如下所示:PDDocum