Aspose.Pdf.Kit.PdfKitInvalidFormatException: Invalid pdf format:pdf head signature is not found!

We are running Aspose for .Net (APDNPDSE) and have begun receiving the following error. Aspose.Pdf.Kit.PdfKitInvalidFormatException: Invalid pdf format:pdf head signature is not found! at xeb116a323308e2f7.xa780c1549f927915.checkPdfHeader() at xeb116a323308e2f7.x7759a935a2782a02.readPdf() at Aspose.Pdf.Kit.PdfFileEditor.xb863edc37fb3922f(Stream[] xe82587bb558dba47) at Aspose.Pdf.Kit.PdfFileEditor.x16518bba0f7b77c9(Stream[] xe82587bb558dba47, Int32 x9542370f777d8414, Int32 x7ad47f71c8fff7a8, Boolean xe0d7f403537e028e, Boolean x417e7bb221928b31) at Aspose.Pdf.Kit.PdfFileEditor.xe2908e3f82c98080(Stream[] xbdeb1e89c00b5b84, Int32 x9542370f777d8414, Int32 x7ad47f71c8fff7a8, Stream xf823f0edaa261f3b, Boolean x417e7bb221928b31) at Aspose.Pdf.Kit.PdfFileEditor.Concatenate(Stream firstInputStream, Stream secInputStream, Stream outputStream) Has this type of error been reported and if so what is the resolution?

Thank you.


Hi,


Thanks for contacting support.

Can you please share the code snippet and resource PDF files which are generating this problem so that we can test the scenario in our environment. We are sorry for this inconvenience.

Enclosed below are the two methods involved. We are only seeing this issue occasionally and not for all instances where we create a PDF and merge the PDF with a cover page. One thing I have noticed which explains the error message which is “Aspose.Pdf.Kit.PdfKitInvalidFormatException: Invalid pdf format:pdf head signature is not found!” is that the “merged” PDF has 0 bytes which should not be the case. The same is true of the unmerged document as well. It appears that something may be corrupting the process or the files that are being merged.

FIRST PROCESS

''' It will merge the original file with cover page file and return the merged file.
''' <summary></summary>
''' <param name="CoverPageFile"></param>
''' <param name="OriginalFile"></param>
''' <returns></returns>
''' <remarks></remarks>
 Public Function mergeFiles(ByVal CoverPageFile As IContent, ByVal OriginalFile As IContent, ByVal filetitle As String, is_restricted As Boolean) As IContent Implements IPdfConverterMediator.mergeFiles

    'Coverpage file
    Dim CoverFile As TFile = DirectCast(CoverPageFile, TFile)
    Dim pdf1 As New FileStream(CoverFile.getPhysicalPath, FileMode.Open)

    'Original File
    Dim Original As TFile = DirectCast(OriginalFile, TFile)
    Dim pdf2 As New FileStream(Original.getPhysicalPath, FileMode.Open)

    Dim output_filename As String = Path.GetFileNameWithoutExtension(filetitle) & ".pdf"

    'Create output file stream
    Dim outputPDFPath As String = cnf(of String)(ECoreConfiguration.UploadDirectoryTmpFiles) & Path.GetFileNameWithoutExtension(Original.filename) & "_Merged.pdf"
    Dim ofs As New FileStream(outputPDFPath, FileMode.Create)

    Dim pdfEditor As New PdfFileEditor()

    'Merge the two Document
    Dim ret As Boolean = pdfEditor.Concatenate(pdf1, pdf2, ofs)

    'Dispose the objects.
    ofs.Close()
    pdf1.Close()
    pdf2.Close()

    Dim FileInfo As New IO.FileInfo(outputPDFPath)
    Dim fo As Aspose.Pdf.Kit.PdfFileInfo = New Aspose.Pdf.Kit.PdfFileInfo(outputPDFPath)
    Dim totalPages As Integer = fo.NumberofPages
    Dim outPutPath As String = GenerateTempFilePathInWordDir(FileInfo.Name)

    ' We stamp image stating that document is IO RESTRICTED on
    ' coverpage & at everypage
    If is_restricted Then
        Dim conf As IContent = RetrieveMediator(of IConfigurationContentFinder).GetConfigurationObject(EMetaTypes.IDMConfiguration)
        Dim DoStamping As Boolean = conf.getValue(of Boolean)(IDMConfiguration.stamp_io_restricted_image)

        If DoStamping Then
            Dim first_page_image As TFile = conf.getValue(of TFile)(IDMConfiguration.first_page_image)
            Dim other_page_image As TFile = conf.getValue(of TFile)(IDMConfiguration.other_page_image)
            Dim stamper As PdfFileStamp = New PdfFileStamp(outputPDFPath, outPutPath)

            'Coverpage image insertion
            Dim width As Single = fo.GetPageWidth(1)
            Dim height As Single = fo.GetPageHeight(1)
            Dim Stamp As Aspose.Pdf.Kit.Stamp = New Aspose.Pdf.Kit.Stamp()
            Stamp.SetOrigin((width / 2) - 150, height - 73)
            Stamp.SetImageSize(120, 30)
            Stamp.IsBackground = True
            Stamp.Pages = New Integer() {1}
            Dim first_page_image_stream As New FileStream(first_page_image.getPhysicalPath, FileMode.Open, FileAccess.Read, FileShare.Read)
            Stamp.BindImage(first_page_image_stream)
            stamper.AddStamp(Stamp)

            'Other page image insertion
            Dim other_page_image_stream As New FileStream(other_page_image.getPhysicalPath, FileMode.Open, FileAccess.Read, FileShare.Read)
            For i As Integer = 1 To totalPages - 1
                Dim page_no As Integer = i + 1
                width = fo.GetPageWidth(page_no)
                height = fo.GetPageHeight(page_no)
                Stamp = New Aspose.Pdf.Kit.Stamp()
                Stamp.SetOrigin((width / 2) - 60, height - 30)
                Stamp.SetImageSize(120, 15)
                Stamp.IsBackground = True
                Stamp.Pages = New Integer() {page_no}
                Stamp.BindImage(other_page_image_stream)
                stamper.AddStamp(Stamp)

                ' page bottom
                Stamp = New Aspose.Pdf.Kit.Stamp()
                Stamp.SetOrigin((width / 2) - 60, 50)
                Stamp.SetImageSize(120, 15)
                Stamp.IsBackground = True
                Stamp.Pages = New Integer() {page_no}
                Stamp.BindImage(other_page_image_stream)
                stamper.AddStamp(Stamp)
            Next
            stamper.Close()
            first_page_image_stream.Close()
            other_page_image_stream.Close()
            FileInfo = New IO.FileInfo(outPutPath)
        End If
    End If

    Dim global_file_folder As IContent = icp.ContentDispatcher.GetContentsByMetaType(ECoreMetaTypes.GlobalFileFolder)(0)
    Dim upload_file As IContent = CType(global_file_folder.CreateSubContent(ECoreMetaTypes.File), TFile)
    Dim filemediator As IFileContentTypeMediator = upload_file.getMyMediator(of IFileContentTypeMediator)()
    filemediator.UploadFile(FileInfo)
    upload_file.title = output_filename
    upload_file.save()

    If ret Then Return upload_file
    Return Nothing
End Function

SECOND PROCESS

Public Sub insertCoverPage() Implements IIDMPdfConverter.insertCoverPage
    Dim cover_page_path As String = Me.GetCoverPageTempalatePath(doc_version)

    'If Cover page Template Parameter is missing then return nothing.
    If String.IsNullOrEmpty(cover_page_path) Then Exit Sub

    'Check for the Template file exists or not.
    If Not File.Exists(cover_page_path) Then Exit Sub

    Dim version As IDocumentVersion = doc_version
    'Consider PDF file as Original file if one exists
    Dim original_file As IContent = version.PDFFile
    If original_file Is Nothing Then
        original_file = version.OriginalFile
    End If
    Dim my_doc As IDocument = DirectCast(version.parent_content, IDocument)
    Dim strFileTitle As String = original_file.title
    Dim filecontent As IContent = Nothing
    Dim docPrefix As String = cnf(of String)(ECoreConfiguration.doc_prefix)
    Dim version_number As String = version.getValue(of String)(EDocumentProperties.version_number)
    Dim version_watermark As String = String.Format("{0}{1} {2}", docPrefix, my_doc.uid, version_number)
    Dim objConvertDoc As New PDFConverter

    ' Stamp version UID in top center of page
    filecontent = objConvertDoc.convertDocument(original_file, version_watermark)

    Dim isSecureIDM As Boolean = False
    If RetrieveMediator(of IConfigurationContentFinder).GetConfigurationObject(EMetaTypes.IDMConfiguration).getValue(of Boolean)(IDMConfiguration.secureIDM) Then
        isSecureIDM = RetrieveMediator(of IConfigurationContentFinder).GetConfigurationObject(EMetaTypes.IDMConfiguration).getValue(of Boolean)(IDMConfiguration.secureIDM)
    End If

    'Add the watermark Symbol for the document.
    filecontent = AddWaterMark(filecontent, isSecureIDM, version.version_status)

    'When the cover page option Autogenerate cover page is
    'checked the process,
    'will go in to the if condition to create a coverpage and
    'if obsolete it will watermark with coverpage,
    'else it will go to the else condition and if find obsolete
    'then it will watermark the document
    'without coverpage
    Dim merged_file As TFile
    Dim strCoverpage As String = CreateCoverPageTemplate(cover_page_path, version)
    Dim FileInfo As New IO.FileInfo(strCoverpage)
    Dim global_file_folder As IContent = icp.ContentDispatcher.GetContentsByMetaType(ECoreMetaTypes.GlobalFileFolder)(0)
    Dim upload_file As IContent = CType(global_file_folder.CreateSubContent(ECoreMetaTypes.File), TFile)
    Dim filemediatorC As IFileContentTypeMediator = upload_file.getMyMediator(of IFileContentTypeMediator)()
    filemediatorC.UploadFile(FileInfo)
    upload_file.save()

    'Add the watermark Symbol to the cover page template.(First
    'Page of the Coverpage)
    upload_file = AddWaterMark(upload_file, isSecureIDM, version.version_status)
    merged_file = CType(objConvertDoc.mergeFiles(upload_file, filecontent, strFileTitle, version.is_document_restricted), TFile)

    If merged_file Is Nothing Then Exit Sub

    'store merged pdf into covered_page_file
    ' We forcably set the id on the merged file BEFORE we push
    'it in so that the history does not turn up
    ' [I am nervous
    'about making the id copy first generally as it could have other consequences]
    merged_file.id = EDocumentVersionProperties.cover_page_file
    merged_file.save()
    version(EDocumentVersionProperties.cover_page_file) = merged_file

    'Legcy(Support)
    ' if we don't have originaly_binary then copyo primary
    'binary into it
    Dim ob As IContent = version.getValue(of IContent)(EDocumentProperties.original_binary)
    If ob IsNot Nothing AndAlso original_file Is Nothing Then
        version(EDocumentVersionProperties.original_file) = ob
    End If
    If ob Is Nothing AndAlso original_file Is Nothing AndAlso
    version(EDocumentProperties.primary_binary) IsNot Nothing Then
        version(EDocumentVersionProperties.original_file) = version(EDocumentProperties.primary_binary)
    End If
    version(EDocumentProperties.cover_page_date) = Now
    version.save()
End Sub

Thank you for any assistance you may provide.

JakeORNL:

Enclosed below are the two methods involved. We are only seeing this issue occasionally and not for all instances where we create a PDF and merge the PDF with a cover page. One thing I have noticed which explains the error message which is “Aspose.Pdf.Kit.PdfKitInvalidFormatException: Invalid pdf format:pdf head signature is not found!” is that the “merged” PDF has 0 bytes which should not be the case. The same is true of the unmerged document as well. It appears that something may be corrupting the process or the files that are being merged.

FIRST PROCESS

''' It will merge the original file with cover page file and return the merge file.

</summary>
<param name="CoverPageFile"></param>
<param name="OriginalFile"></param>
<returns></returns>
<remarks></remarks>

Public Function mergeFiles(ByVal CoverPageFile As IContent,
ByVal OriginalFile As IContent,
ByVal filetitle As String,
is_restricted As Boolean) As IContent Implements IPdfConverterMediator.mergeFiles

    'Coverpage file
    Dim CoverFile As TFile = DirectCast(CoverPageFile, TFile)
    Dim pdf1 As New FileStream(CoverFile.getPhysicalPath,
    FileMode.Open)

    'Original File
    Dim Original As TFile = DirectCast(OriginalFile, TFile)
    Dim pdf2 As New FileStream(Original.getPhysicalPath,
    FileMode.Open)

    Dim output_filename As String = Path.GetFileNameWithoutExtension(filetitle) & ".pdf"

    'Create output file stream
    Dim outputPDFPath As String = cnf(of String)(ECoreConfiguration.UploadDirectoryTmpFiles) & Path.GetFileNameWithoutExtension(Original.filename) & "_Merged.pdf"
    Dim ofs As New FileStream(outputPDFPath,
    FileMode.Create)

    Dim pdfEditor As New PdfFileEditor()

    'Merge the two Document
    Dim ret As Boolean = pdfEditor.Concatenate(pdf1, pdf2, ofs)

    'Dispose the objects.
    ofs.Close()
    pdf1.Close()
    pdf2.Close()

    Dim FileInfo As New IO.FileInfo(outputPDFPath)
    Dim fo As Aspose.Pdf.Kit.PdfFileInfo = New Aspose.Pdf.Kit.PdfFileInfo(outputPDFPath)
    Dim totalPages As Integer = fo.NumberofPages

    Dim outPutPath As String = GenerateTempFilePathInWordDir(FileInfo.Name)

    ' We stamp image stating that document is IO RESTRICTED on coverpage & at every page
    If is_restricted Then

        Dim conf As IContent = RetrieveMediator(of  IConfigurationContentFinder).GetConfigurationObject(EMetaTypes.IDMConfiguration)

       Dim DoStamping As Boolean = conf.getValue(of Boolean)(IDMConfiguration.stamp_io_restricted_image)

        If DoStamping Then

            Dim first_page_image As TFile = conf.getValue(of TFile)(IDMConfiguration.first_page_image)
            Dim other_page_image As TFile = conf.getValue(of TFile)(IDMConfiguration.other_page_image)

            Dim stamper As PdfFileStamp = New PdfFileStamp(outputPDFPath, outPutPath)

            'Coverpage image insertion
            Dim width As Single = fo.GetPageWidth(1)
            Dim height As Single = fo.GetPageHeight(1)

            Dim Stamp As Aspose.Pdf.Kit.Stamp = New Aspose.Pdf.Kit.Stamp()
            Stamp.SetOrigin((width / 2) - 150, height - 73)
            Stamp.SetImageSize(120, 30)
            Stamp.IsBackground = True
            Stamp.Pages = New Integer() {1}

            Dim first_page_image_stream As New FileStream(first_page_image.getPhysicalPath, FileMode.Open, FileAccess.Read, FileShare.Read)
            Stamp.BindImage(first_page_image_stream)
            stamper.AddStamp(Stamp)

            'Other page image insertion
            Dim other_page_image_stream As New FileStream(other_page_image.getPhysicalPath, FileMode.Open, FileAccess.Read, FileShare.Read)

            For i As Integer = 1 To totalPages - 1
                Dim page_no As Integer = i + 1

                width = fo.GetPageWidth(page_no)
                height = fo.GetPageHeight(page_no)
                Stamp = New Aspose.Pdf.Kit.Stamp()
                Stamp.SetOrigin((width / 2) - 60, height - 30)
                Stamp.SetImageSize(120, 15)
                Stamp.IsBackground = True
                Stamp.Pages = New Integer() {page_no}
                Stamp.BindImage(other_page_image_stream)
                stamper.AddStamp(Stamp)

                ' page bottom
                Stamp = New Aspose.Pdf.Kit.Stamp()
                Stamp.SetOrigin((width / 2) - 60, 50)
                Stamp.SetImageSize(120, 15)
                Stamp.IsBackground = True
                Stamp.Pages = New Integer() {page_no}
                Stamp.BindImage(other_page_image_stream)
                stamper.AddStamp(Stamp)
            Next

            stamper.Close()
            first_page_image_stream.Close()
            other_page_image_stream.Close()
            FileInfo = New IO.FileInfo(outPutPath)

        End If
    End If

    Dim global_file_folder As IContent =
    icp.ContentDispatcher.GetContentsByMetaType(ECoreMetaTypes.GlobalFileFolder)(0)
    Dim upload_file As IContent = CType(global_file_folder.CreateSubContent(ECoreMetaTypes.File), TFile)

    Dim filemediator As IFileContentTypeMediator =
    upload_file.getMyMediator(of IFileContentTypeMediator)()

    filemediator.UploadFile(FileInfo)
    upload_file.title = output_filename
    upload_file.save()

    If ret Then Return upload_file
    Return Nothing
End Function

Hi Jake,

Thanks for contacting support. I have tested the scenario using Aspose.Pdf for .NET 9.7.0 in Visual Studio 2010 application running over Windows 7 (x64) and I am unable to notice any issue. I have used the same code snippet which you have shared (except for changes in file paths, change of namespace from Aspose.Pdf.Kit to Aspose.Pdf.Facades and hard coded the strings). As per my observations, _Merged.pdf and resultant PDF with images stamped over first and second page are properly being generated.

Please note that Aspose.Pdf.Kit for .NET has been obsolete as separate product since July-2012. Therefore, we recommend you to migrate your code to the latest version of MergedAPI of Aspose.Pdf for .NET. In case you still face the same problem, please share some sample project so that we can again try replicating the problem in our environment.

You may consider visiting the following link for further information on [Migration from Aspose.Pdf.Kit](("[[BL]]https://docs.aspose.com/pdf/net/migration-from-aspose-pdf-kit-to-aspose-pdf/[[/BL]]).