none
Scanner Problem RRS feed

  • Frage

  • Hallo,

    Nach über 20 Jahren mussten neue Scanner her (HP 9022 und Brother 2400). Scheinbar liefern diese PDFs, die fehlerhaft sind. Wir haben in unserem Projekt über NuGet die neueste Version von PdfSharp implementiert. Die Funktion PageCount bringt unsere App zum Absturz. Ich konnte den Fehler eingrenzen

    Unexpected character '0xffff' in PDF stream. The file may be corrupted.

    Die Datei wird beim Scannvorgang in einem FileWatcher aufgefangen und über Invoke weiterverarbeitet. Wenn ich dazwischen das PDF mit einem PDF Viewer öffne und mit "Speichern unter" wieder hinlege, ist der Fehler verschwunden.

    Ich suche nun nach einer Möglichkeit, entweder das originale PDF zu manipulieren oder es im Hintergrund zu öffnen und neu abzuspeichern. Das sollte der Anwender nicht merken, um den Workflow nicht zu unterbrechen. Könnt ihr mir dazu ein paar Tipps geben?

    Grüße Norbert

    Mittwoch, 4. November 2020 13:42

Antworten

  • Das Problem ist gelöst. Unter iTextSharp gibt der Code

    Label7.Text = New PdfReader(fi.FullName).NumberOfPages & " Seiten"

    die korrekte Seitenzahl aus, auch wenn das PDF nicht ganz der Norm entspricht.

    PdfSharp musste ich nun wieder deinstallieren, da es neben iTextSharp im gleichen Projekt Problememacht. Zum Speichern des PDF musste ich auch hier den Code ändern. Unter PdfSharp ging es so:

           Using doc As New PdfDocument
                For Each s As String In files
                    Dim page As PdfPage = doc.AddPage()
                    page.Size = PageSize.A4
                    Dim gfx As XGraphics = XGraphics.FromPdfPage(page)
                    Dim image As XImage = XImage.FromFile(s)

                    If (CInt(image.PointWidth) > CInt(image.PointHeight)) Then
                        page.Orientation = PageOrientation.Landscape
                    End If

                    gfx.DrawImage(image, New XRect(0, 0, CInt(page.Width.Point), CInt(page.Height.Point)))
                    image.Dispose()
                    File.Delete(s)
                Next
                filename = tbFilename.Text & "-" & Format(Now, "HHmmss")
                doc.Save(tbFolder.Text & "\" & filename & ".pdf")
            End Using

    mit iTextSharp entfällt das "Save" und man macht es so:

            For Each f As String In files
                filename = tbFilename.Text & "-" & Format(Now, "HHmmss")
                Dim doc As New Document()
                Dim writer As PdfWriter = PdfWriter.GetInstance(doc, New FileStream(tbFolder.Text & "\" & filename & ".pdf", FileMode.Create))

                Dim image As Image = Image.GetInstance(f)
                doc.Open()
                doc.Add(image)
                doc.Close()
                File.Delete(f)
            Next


    Donnerstag, 5. November 2020 07:35