öffnen Sie byte-array aus dem Speicher-stream in neuen Fenster oder tab
Dies scheint ein häufiges problem zu sein, aber nach einer langen Suche habe ich doch eine Lösung zu finden, die genau meinen Anforderungen. Ich bin mit itextsharp füllen ein pdf-Formular, aus dem ich ein byte-array. (Es sind mehrere Seiten des gleichen Formulars mit den gleichen Informationen, die ich kombinieren in einem einzigen pdf-Dokument). Ich kann dies tun, ohne Probleme, das problem ist, wenn ich die Anzeige der fertigen pdf-Dokument an den Benutzer, die ich brauche, um es zu öffnen in einem neuen Fenster oder tab OHNE erste Aufforderung des Benutzers zu speichern oder öffnen Sie die Datei. Ich will aber auch NICHT zum speichern einer Datei auf dem server, und öffnen Sie ihn mit der filestream. Wenn ich den " content-disposition "inline" das pdf angezeigt wird im gleichen browser-Fenster. Dies schafft Probleme, da der Benutzer muss klicken Sie auf die zurück-Schaltfläche Ihres Browsers zurück navigieren Sie zu der Website, die startet den Formular-Prozess. So wie es momentan sitzt mein code erfolgreich erzeugt die pdf-Datei und Sie werden aufgefordert, zu öffnen oder speichern Sie es. Dies ist der Schritt, den ich entfernen müssen. Ich glaube mich zu erinnern einige java-snippet zum öffnen der pdf-Datei in einem neuen Fenster oder tab, aber ich war nicht erfolgreich bei der Replikation /es zu finden. Ich habe auch gespielt mit verschiedenen überschriften, aber ich habe eine Wand schlagen. Jegliche Hilfe würde sehr geschätzt werden.
(Ich nenne die Methode " go " von meinem nachstehenden code von einer Schaltfläche klicken Sie nach der notwendigen Validierung von Daten.)
private void go()
{
List<byte[]> pdfs = new List<byte[]>();
while (PageNumber <= Convert.ToInt32(PageCountLabel.Text))
{
pdfs.Add(PopulatePDF());
}
MemoryStream ms = MergePDFs(pdfs);
//opens pdf in new tab after save/open option
Response.AddHeader("Content-Disposition", "attachment; filename=TheDocument.pdf");
Response.ContentType = "application/pdf";
Response.BinaryWrite(ms.ToArray());
Response.End();
}
//************fills in pdf form****************//
private byte[] PopulatePDF()
{
MemoryStream ms = new MemoryStream();
PdfStamper Stamper = null;
PdfReader Reader = new PdfReader(Server.MapPath("~/PDFTemplates/template1.pdf"));
try
{
string temp = Profile.ToString().ToUpper();
PdfCopyFields Copier = new PdfCopyFields(ms);
Copier.AddDocument(Reader);
Copier.Close();
PdfReader docReader = new PdfReader(ms.ToArray());
ms = new MemoryStream();
Stamper = new PdfStamper(docReader, ms);
AcroFields Fields = Stamper.AcroFields;
//fill form fields here
PageNumber++;
Stamper.FormFlattening = true;
}
finally
{
if (Stamper != null)
{
Stamper.Close();
}
}
return ms.ToArray();
}
//combines pdf pages into single document
private MemoryStream MergePDFs(List<byte[]> pdfs)
{
MemoryStream ms = new MemoryStream();
PdfCopyFields Copier = new PdfCopyFields(ms);
foreach (var pdf in pdfs)
Copier.AddDocument(new PdfReader(pdf));
Copier.Close();
return ms;
}
Response.End
beendet die Seite über den Lebenszyklus.InformationsquelleAutor ovaltein | 2013-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre PDF-Generierung code in eine neue Seite MyPDFPage.aspx mit Parametern in der URL, der dann zum Beispiel eine Taste auf Ihre ursprüngliche Seite mit einem onclick-event verwendet Fenster.öffnen() von javascript:
Sah etwas ähnliches wie während meiner Suche, aber ich denke mein Gehirn hat nicht die Punkte verbinden 🙂 Das funktioniert genau so, wie ich will, Danke!
InformationsquelleAutor yms