VB.Net Zusammenführen mehrerer PDF-Dateien zu einer und export
Habe ich das Zusammenführen mehrerer PDF-Dateien in einer einzigen PDF-Datei.
Ich bin mit dem iText.scharfe Bibliothek und sammeln Sie konvertiert den code und versucht, es zu benutzen (aus hier)
Der eigentliche code ist in C# und ich konvertiert, die zu VB.NET.
Private Function MergeFiles(ByVal sourceFiles As List(Of Byte())) As Byte()
Dim mergedPdf As Byte() = Nothing
Using ms As New MemoryStream()
Using document As New Document()
Using copy As New PdfCopy(document, ms)
document.Open()
For i As Integer = 0 To sourceFiles.Count - 1
Dim reader As New PdfReader(sourceFiles(i))
' loop over the pages in that document
Dim n As Integer = reader.NumberOfPages
Dim page As Integer = 0
While page < n
page = page + 1
copy.AddPage(copy.GetImportedPage(reader, page))
End While
Next
End Using
End Using
mergedPdf = ms.ToArray()
End Using
End Function
Ich jetzt immer die folgende Fehlermeldung:
"Ein Element mit demselben Schlüssel wurde bereits Hinzugefügt.
Ich habe einige debugging und verfolgte das problem auf die folgenden Zeilen:
copy.AddPage(copy.GetImportedPage(reader,
copy.AddPage(copy.GetImportedPage(reader, page)))
Warum ist dieser Fehler passiert?
- eine down-vote ohne Kommentar
- Viele Stunden": für die Suche nach Lösung für den Fehler
- haben Sie setzen Sie Haltepunkte im code..? und trat durch den code..?
- gehen Sie zu dieser Verknüpfung, und konvertieren Sie den C# - code aus dem link, dass
Bob
gebucht VB converter.telerik.com - Ah ja, siehe meine Antwort und mir sagen, ob das funktioniert für Sie.
- Möglich, Duplikat der Ein Element mit dem gleichen Schlüssel wurde bereits Hinzugefügt dictionary.
- 🙂 , ich bin nicht einverstanden
- Ihre Frage ist eine doppelte, und soweit wir sagen können, Sie habe nicht versucht, Debuggen Sie es für mehr als fünf Minuten. Denken Sie daran, dass das Ziel der Stack-Überlauf ist ein repository für die Programmierung Fragen & Antworten; Ihre Frage nicht helfen, und dies bedeutet, dass es sein sollte duplizieren-ausgeschildert.
- dies ist Ihrer Annahme, gehen Sie auf den hyperlink, wo der ursprüngliche Autor der Antwort bat mich, die post als separate Frage, es ist nur mir, wer weiß wie viel Zeit ich verschwendet haben, in das Debuggen und die überwindung der Fehler. Nach Ihnen, Sie sind "VB.NET braniac", und ich werde immer ein begeisterter Lerner. Vielen Dank, dass Sie Ihre wertvolle Zeit bei der Lösung meiner Abfrage.
- Lassen Sie uns weiter, diese Diskussion im chat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich eine Konsole, die überwacht einzelne Ordner in einem bestimmten Ordner muss dann alle Zusammenführen von pdf-Dateien in diesem Ordner in einer einzigen pdf-Datei. Ich übergeben Sie ein array von Dateipfaden als strings und die Ausgabe-Datei, die ich möchte.
Dies ist die Funktion die ich verwende.
den code, der war richtig markiert nicht schließen Sie alle Datei-streams, also die Dateien geöffnet bleiben innerhalb der app, und Sie werden nicht in der Lage zu löschen Sie nicht verwendete PDF-Dateien in Ihrem Projekt
Dies ist eine bessere Lösung:
Document
implizit schließt diePdfWriter
es nicht sinnvoll, zu schließen, der Verfasser ausdrücklich. b Wenn Sie in der Nähe derDocument
imFinally
block sowieso, es macht keinen Sinn, auch schließen es in derTry
block. c Wenn Sie wollen, stellen Sie sicher, dass in der Nähe alles, warum gehst du nicht explizit schließen Sie die Datei-stream? Man kann nach alles zu deaktivieren, das implizite schließen der Datei stream in den Brenner...Ich weiß, ich bin ziemlich spät zu der party, aber nach dem Lesen der Kommentare von @BrunoLowagie, ich wollte sehen, ob ich könnte etwas selber zusammen verwendet, die Beispiele aus seinem verlinkten Beispiel-Kapitel. Es ist wahrscheinlich übertrieben, aber ich habe einige code, der Zusammenführung mehrerer PDF-Dateien in einer einzigen Datei, die ich gepostet auf der Code-Review SE Website (die post, VB.NET - Fehlerbehandlung in einer Generischen Klasse für PDF Merge, enthält die Klasse code). Es führt nur PDF-Dateien jetzt, aber ich bin der Planung auf das hinzufügen von Methoden, um zusätzliche Funktionalität später.
Den "master" - Methode (gegen Ende des
Class
- block, in dem verlinkten post, und auch unten geschrieben für Referenz) übernimmt die eigentliche Zusammenführung der PDF-Dateien, aber die mehrere überladungen bieten eine Reihe von Optionen für, wie definieren Sie die Liste der Originaldateien. Bisher habe ich die folgenden features:System.IO.FileInfo
Objekt, wenn der merge erfolgreich ist.System.IO.DirectoryInfo
Objekt oder eineSystem.String
identifizieren Sie einen Pfad und es sammelt alle PDF-Dateien in diesem Verzeichnis (einschließlich Unterverzeichnisse (falls angegeben) zu fusionieren.List(Of System.String)
oder eineList(Of System.IO.FileInfo)
Angabe der PDFs, die Sie Zusammenführen möchten.MergeAll
Methoden, um alle PDF-Dateien in einem Verzeichnis).Warning
undError
Eigenschaften bieten eine Möglichkeit, feedback zu bekommen und in die aufrufende Methode, ob oder ob nicht die Zusammenführung ist erfolgreich.Sobald der code ist im Ort, es kann z.B. so verwendet werden:
Hier ist der "master" - Methode. Wie ich schon sagte, es ist wahrscheinlich übertrieben (und ich bin noch tweaking es einige), aber ich wollte mein bestes tun, um zu versuchen, um es so effektiv wie möglich. Natürlich, es erfordert einen Verweis auf die
itextsharp.dll
für den Zugriff auf die Funktionen der Bibliothek.Habe ich auskommentiert, die Verweise auf die
Error
undWarning
Eigenschaften der Klasse für diese post, um zu helfen reduzieren Verwechslungen.Einige müssen möglicherweise ändern Sie den code in "
writer = PdfWriter.GetInstance(pdfDoc, New FileStream(outputPath, FileMode.OpenOrCreate))
" alsiTextSharp
unterstützen möglicherweise nichtÄnderung: