iTextSharp + FileStream = Beschädigte PDF-Datei

8

Ich versuche eine PDF-Datei mit iTextSharp zu erstellen. Mein Versuch schreibt den Inhalt der PDF in einen MemoryStream, so dass ich das Ergebnis sowohl in eine Datei als auch in ein Datenbank-BLOB schreiben kann. Die Datei wird erstellt, hat eine Größe von etwa 21kB und sieht wie eine PDF aus, wenn sie mit Notepad ++ geöffnet wird. Aber mein PDF-Viewer sagt, es ist kaputt. Hier ist ein kleines Code-Snippet (versucht nur in eine Datei zu schreiben, nicht in eine Datenbank):

%Vor%

Wo ist der Fehler, den ich mache?

Danke, Norbert

    
Norbert 02.02.2010, 19:04
quelle

5 Antworten

27

Ich denke, Ihr Problem bestand darin, dass Sie Ihrem PDF-Dokument keinen Inhalt hinzugefügt haben. Dies geschieht über die Methode Document.Add () und Sie beenden den Vorgang mit dem Aufruf von Document.Close ().

Wenn Sie jedoch Document.Close () aufrufen, schließt sich auch Ihr MemoryStream, so dass Sie ihn nicht wie gewohnt in Ihren FileStream schreiben können. Sie können dies umgehen, indem Sie den Inhalt Ihres MemoryStream in einem Byte-Array speichern.

Das folgende Code-Snippet funktioniert für mich:

%Vor%     
Jay Riggs 02.02.2010, 20:57
quelle
1

Ich hatte ähnliches Problem. Meine Datei wird heruntergeladen, aber die Dateigröße beträgt 13 Bytes. Ich habe das Problem behoben, als ich den binären Writer zum Schreiben meiner Datei verwendet habe

Byte [] Bytes = neues Byte [0];     // Übergeben Sie Ihre API-Antwort in die initialisierten Bytes

%Vor%     
Oluwasayo Babalola 28.03.2018 18:29
quelle
0

Nur ein paar Gedanken - was passiert, wenn Sie den Speicherstream durch einen Dateistream ersetzen? Gibt Ihnen das das Ergebnis, das Sie brauchen? Dies wird Ihnen zumindest sagen, wo das Problem sein könnte.

Wenn das funktioniert, wie unterscheiden sich die Dateien (in Größe und Binärdarstellung)?

Nur eine Vermutung, aber haben Sie versucht, den Anfang des Speicherstroms vor dem Schreiben zu suchen?

%Vor%     
matt 02.02.2010 19:16
quelle
0

Versuchen Sie, Ihren Code zu überprüfen, der das PDF mit iText manipuliert. Stellen Sie sicher, dass Sie die entsprechende EndText-Methode aller PdfContentByte-Objekte aufrufen, und stellen Sie sicher, dass Sie myDocument.Close () aufrufen, bevor Sie die Datei auf die Festplatte schreiben. Das sind Dinge, mit denen ich in der Vergangenheit Probleme hatte, wenn ich PDFs mit iTextSharp erzeugte.

    
wsanville 02.02.2010 19:20
quelle
0
%Vor%     
vivek anand 05.04.2017 12:11
quelle