Saya memiliki kode demo ini untuk iTextSharp
Document document = new Document();
try
{
PdfWriter.GetInstance(document, new FileStream("Chap0101.pdf", FileMode.Create));
document.Open();
document.Add(new Paragraph("Hello World"));
}
catch (DocumentException de)
{
Console.Error.WriteLine(de.Message);
}
catch (IOException ioe)
{
Console.Error.WriteLine(ioe.Message);
}
document.Close();
Bagaimana cara mendapatkan pengontrol untuk mengembalikan dokumen pdf ke browser?
EDIT:
Menjalankan kode ini tidak membuka Acrobat tetapi saya mendapatkan pesan kesalahan "File rusak dan tidak dapat diperbaiki"
public FileStreamResult pdf()
{
MemoryStream m = new MemoryStream();
Document document = new Document();
PdfWriter.GetInstance(document, m);
document.Open();
document.Add(new Paragraph("Hello World"));
document.Add(new Paragraph(DateTime.Now.ToString()));
m.Position = 0;
return File(m, "application/pdf");
}
Ada ide mengapa ini tidak berhasil?
c#
asp.net
asp.net-mvc
pdf
itextsharp
Tony Borf
sumber
sumber
Jawaban:
Kembalikan a
FileContentResult
. Baris terakhir dalam tindakan pengontrol Anda akan menjadi seperti ini:Jika Anda membuat PDF ini secara dinamis, mungkin lebih baik menggunakan a
MemoryStream
, dan membuat dokumen di memori daripada menyimpannya ke file. Kodenya akan seperti ini:sumber
Saya membuatnya berfungsi dengan kode ini.
sumber
using
pernyataan dalam contoh apa pun yang dapat saya temukan ... Apakah tidak diperlukan di sini? Saya pikir Anda memiliki setidaknya 3 benda sekali pakai ...Anda harus menentukan:
Untuk file yang akan dibuka langsung di browser alih-alih diunduh
sumber
Jika Anda mengembalikan a
FileResult
dari metode tindakan Anda, dan menggunakanFile()
metode ekstensi pada pengontrol, melakukan apa yang Anda inginkan cukup mudah. Ada penggantian padaFile()
metode yang akan mengambil konten biner file, jalur ke file, atau fileStream
.sumber
Saya mengalami masalah serupa dan saya menemukan solusi. Saya menggunakan dua posting, satu dari tumpukan yang menunjukkan metode untuk kembali untuk diunduh dan satu lagi yang menunjukkan solusi yang berfungsi untuk ItextSharp dan MVC.
sumber
Anda dapat membuat kelas kustom untuk mengubah tipe konten dan menambahkan file ke respons.
http://haacked.com/archive/2008/05/10/writing-a-custom-file-download-action-result-for-asp.net-mvc.aspx
sumber
Saya tahu pertanyaan ini sudah tua tetapi saya pikir saya akan membagikan ini karena saya tidak dapat menemukan yang serupa.
Saya ingin membuat tampilan / model saya seperti biasa menggunakan Razor dan menjadikannya sebagai Pdfs .
Dengan cara ini saya memiliki kendali atas presentasi pdf menggunakan keluaran html standar daripada mencari tahu bagaimana tata letak dokumen menggunakan iTextSharp.
Proyek dan kode sumber tersedia di sini dengan petunjuk instalasi nuget:
https://github.com/andyhutch77/MvcRazorToPdf
sumber
FileStreamResult
pasti berhasil. Tetapi jika Anda melihat pada Microsoft Docs , itu mewarisi dariActionResult -> FileResult
, yang memiliki kelas turunan lainFileContentResult
. Ini "mengirimkan konten file biner ke respons". Jadi kalau sudah punyabyte[]
, sebaiknya gunakanFileContentResult
saja.sumber
Anda biasanya akan melakukan Response.Flush diikuti oleh Response.Close, tetapi untuk beberapa alasan perpustakaan iTextSharp sepertinya tidak menyukai ini. Data tidak berhasil masuk dan Adobe mengira PDF tersebut rusak. Tinggalkan fungsi Response.Close dan lihat apakah hasil Anda lebih baik:
sumber
Jika nama file dibuat secara dinamis, lalu bagaimana mendefinisikan nama file di sini, itu dihasilkan melalui panduan di sini.
sumber
Lihat halaman:
Pengontrol pindai:
sumber