iTextSharp + FileStream = Korrupte PDF-Datei
Ich versuche eine pdf-Datei erstellen mit iTextSharp. Mein Versuch, die schreibt den Inhalt des pdf-Dokuments in ein MemoryStream-so kann ich schreiben das Ergebnis in einer Datei und einer Datenbank-BLOB. Die Datei wird erstellt, hat eine Größe von etwa 21kB und es sieht aus wie eine pdf-Datei beim öffnen mit Notepad++. Aber mein PDF-viewer sagt, es ist currupted.
Hier ist ein kleiner code-snippet nur versucht zu schreiben, um eine Datei, nicht um eine Datenbank):
Document myDocument = new Document();
MemoryStream myMemoryStream = new MemoryStream();
PdfWriter myPDFWriter = PdfWriter.GetInstance(myDocument, myMemoryStream);
myDocument.Open();
//Content of the pdf gets inserted here
using (FileStream fs = File.Create("D:\\...\\aTestFile.pdf"))
{
myMemoryStream.WriteTo(fs);
}
myMemoryStream.Close();
Wo ist der Fehler ich mache?
Danke,
Norbert
- brauchen Sie, dass der MemoryStream? haben Sie geschlossen, dass myDocument vor dem schreiben auf FileStream?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, dein problem war, dass du nicht richtig hinzufügen von Inhalten zu Ihrer PDF-Datei. Dies geschieht durch das Dokument.Add () - Methode und Sie beenden durch Aufruf von Document.Schließen().
Wenn Sie anrufen, Document.Close () - aber, Ihr MemoryStream auch geschlossen, so dass Sie nicht in der Lage sein, es zu schreiben auf FileStream-wie Sie Sie haben. Sie können dies umgehen, indem das speichern der Inhalte Ihrer MemoryStream in ein byte-array.
Den folgenden code-snippet funktioniert bei mir:
Hatte ich ähnliches Problem. Meine Datei wird heruntergeladen, aber die Dateigröße wird 13Bytes. Ich habe das Problem gelöst, wenn ich binary writer zum schreiben von meiner Datei
Nur ein paar Gedanken - was passiert, wenn Sie ersetzen Sie die Speicher-stream mit einem file-stream? Tut dies, geben Sie das Ergebnis Sie brauchen? Dies wird zumindest sagen, wo das problem sein könnte.
Wenn das funktioniert, wie die Dateien sich unterscheiden (in der Größe und binäre Darstellung)?
Nur eine Vermutung, aber haben Sie versucht, suchen zu Beginn des Speicher-stream, bevor schreiben?
Document myDocument = new Document(); PdfWriter myPDFWriter = PdfWriter.GetInstance(myDocument, new FileStream(path, FileMode.Create)); myDocument.Open(); // Content ... myDocument.Close();
Beschädigte Datei... 🙁Versuchen doppelt überprüfen Sie Ihren code, ändert das PDF mit iText. Stellen Sie sicher, dass Sie den entsprechenden EndText-Methode eines PdfContentByte Objekte, und stellen Sie sicher, Sie rufen myDocument.Close() vor dem schreiben der Datei auf der Festplatte. Das sind Dinge, die ich habe Probleme mit den in der Vergangenheit beim generieren von PDFs mit iTextSharp.