Tengo este código de demostración para 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();
¿Cómo consigo que el controlador devuelva el documento pdf al navegador?
EDITAR:
Al ejecutar este código, se abre Acrobat, pero aparece el mensaje de error "El archivo está dañado y no se pudo reparar".
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");
}
¿Alguna idea de por qué esto no funciona?
c#
asp.net
asp.net-mvc
pdf
itextsharp
Tony Borf
fuente
fuente

Respuestas:
Regresar a
FileContentResult. La última línea en la acción de su controlador sería algo como:Si está generando este PDF dinámicamente, puede ser mejor usar a
MemoryStreamy crear el documento en la memoria en lugar de guardarlo en un archivo. El código sería algo como:fuente
Lo tengo funcionando con este código.
fuente
usingdeclaración en ningún ejemplo que pueda encontrar ... ¿No es necesario aquí? Creo que tienes al menos 3 objetos desechables ...Debes especificar:
Para que el archivo se abra directamente en el navegador en lugar de descargarlo
fuente
Si devuelve un
FileResultde su método de acción y usa elFile()método de extensión en el controlador, hacer lo que quiera es bastante fácil. Hay modificaciones en elFile()método que tomará el contenido binario del archivo, la ruta al archivo o unStream.fuente
Me he encontrado con problemas similares y me he encontrado con una solución. He utilizado dos puestos, uno de pila que muestra el método para volver para su descarga y otro uno que muestra una solución de trabajo para iTextSharp y MVC.
fuente
Puede crear una clase personalizada para modificar el tipo de contenido y agregar el archivo a la respuesta.
http://haacked.com/archive/2008/05/10/writing-a-custom-file-download-action-result-for-asp.net-mvc.aspx
fuente
Sé que esta pregunta es antigua, pero pensé en compartirla ya que no pude encontrar nada similar.
Quería crear mis vistas / modelos de forma normal usando Razor y renderizarlos como PDF .
De esta manera tuve control sobre la presentación en pdf usando la salida html estándar en lugar de averiguar cómo diseñar el documento usando iTextSharp.
El proyecto y el código fuente están disponibles aquí con las instrucciones de instalación de nuget:
https://github.com/andyhutch77/MvcRazorToPdf
fuente
FileStreamResultciertamente funciona. Pero si nos fijamos en Microsoft Docs , heredaActionResult -> FileResult, que tiene otra clase derivadaFileContentResult. "Envía el contenido de un archivo binario a la respuesta". Entonces, si ya tiene elbyte[], debería usarloFileContentResulten su lugar.fuente
Normalmente haría un Response.Flush seguido de un Response.Close, pero por alguna razón a la biblioteca iTextSharp no parece gustarle esto. Los datos no pasan y Adobe cree que el PDF está dañado. Deje fuera la función Response.Close y vea si sus resultados son mejores:
fuente
si el nombre de archivo se genera dinámicamente, entonces cómo definir el nombre de archivo aquí, se genera a través de guid aquí.
fuente
Ver pagina:
Controlador de escaneo:
fuente