Quiero guardar un PdfSharp.Pdf.PdfDocument por su método Guardar en un Stream, pero no le adjunta la configuración del encabezado PDF. Entonces, cuando leo nuevamente Stream y se lo devuelvo al usuario, ve que el archivo PDF no es válido. ¿Hay alguna solución para adjuntar la configuración del encabezado PDF cuando PDFsharp se guarda en la memoria?PDFsharp guardar en MemoryStream
Respuesta
Así que la solución:
MigraDoc.DocumentObjectModel.Document doc = new MigraDoc.DocumentObjectModel.Document();
MigraDoc.Rendering.DocumentRenderer renderer = new DocumentRenderer(doc);
MigraDoc.Rendering.PdfDocumentRenderer pdfRenderer = new MigraDoc.Rendering.PdfDocumentRenderer();
pdfRenderer.PdfDocument = pDoc;
pdfRenderer.DocumentRenderer = renderer;
using (MemoryStream ms = new MemoryStream())
{
pdfRenderer.Save(ms, false);
byte[] buffer = new byte[ms.Length];
ms.Seek(0, SeekOrigin.Begin);
ms.Flush();
ms.Read(buffer, 0, (int)ms.Length);
}
No es esto MigraDoc que viene con PDFsharp, pero apenas encontró ninguna adecuada doc/Preguntas para ello. Después de horas buscando en Google he encontrado un fragmento que era algo como esto. Ahora funciona.
Si cree que hay un problema con PdfDocument.Save, informe esto en el foro de PDFsharp (pero sea más específico con la descripción de su error). Su "solución" parece un truco para mí. "pdfRenderer.Save" llama "PdfDocument.Save" internamente. Cualquiera que sea el problema: su "solución" sigue llamando a la misma rutina de Guardar.
Editar: Para conseguir un byte [] que contiene un archivo PDF, es suficiente con llamar:
MemoryStream stream = new MemoryStream();
document.Save(stream, false);
byte[] bytes = stream.ToArray();
Las primeras versiones de PDFsharp No restaurar la posición corriente.
Así que hay que llamar
ms.Seek(0, SeekOrigin.Begin);
para restablecer la posición corriente antes de la lectura de la corriente; esto ya no es necesario para las versiones actuales.
El uso de ToArray a menudo se puede utilizar en lugar de leer de la transmisión.
Edición 2: en lugar de stream.ToArray()
puede ser más eficaz utilizar stream.GetBuffer()
, pero este buffer es generalmente mayor que el archivo PDF y sólo tiene que utilizar stream.Length
bytes desde ese búfer. Muy útil para el método que toma un byte[]
junto con un parámetro de longitud.
He encontrado la solución más simple:
byte[] fileContents = null;
using(MemoryStream stream = new MemoryStream())
{
pdfDoc.Save(stream, true);
fileContents = stream.ToArray();
}
Mi respuesta muestra desde 2010 que 'ToArray()' se puede usar. ;-) –
Para MigraDoc (ver 1.30) pudiera salvarla con
PdfDocumentRenderer renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always);
renderer.Document = report.m_Document;
renderer.RenderDocument();
using (MemoryStream stream = new MemoryStream())
{
renderer.PdfDocument.Save(stream, false);
... your code in here
}
- 1. Guardar la tabla en una sola pieza MigraDoc/PDFsharp
- 2. Guardar un mapa de bits en un MemoryStream
- 3. PdfSharp en Mono
- 4. Uso de MemoryStream para guardar el archivo .docx C#
- 5. Concatenar archivos PDF con PDFSharp devolver páginas en blanco
- 6. PdfSharp: Rotar una página en un documento
- 7. pdfsharp - font embed?
- 8. Combinación de varios archivos PDF usando PDFSharp
- 9. PDFsharp salto de línea
- 10. StreamWriter escribiendo en MemoryStream
- 11. Analizador MemoryStream en Python
- 12. "Chunked" MemoryStream
- 13. MemoryStream leak
- 14. Uso de MemoryStream para escribir en XML
- 15. tablas y gráficos utilizando PDFsharp
- 16. ¿Cómo agregar PDFsharp lib en C#?
- 17. memorystream - stringstream, string, otros?
- 18. Anexando a MemoryStream
- 19. Delphi, FileStream y MemoryStream
- 20. BinaryFormatter con MemoryStream Pregunta
- 21. DotNetZip Guardar en la corriente
- 22. C# PDFSharp: ejemplos de cómo quitar texto de PDF?
- 23. Migradoc, párrafo PDFsharp sin marcadores asociados
- 24. archivos PDF de impresión con PDFsharp
- 25. C# Extraer texto del PDF utilizando PdfSharp
- 26. Guardar bitmap como PNG en WP7
- 27. ¿Cómo cargar toda la secuencia en MemoryStream?
- 28. Obtener Imagesource de MemoryStream en C# WPF
- 29. Leer desde un gran MemoryStream en C#
- 30. Deserialización que no trabaja en MemoryStream
¿Qué hay pDoc? ¿Es eso lo mismo que doc? –
funcionó para mí de esta manera: pdfRenderer.Document = doc; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save (transmisión); – vicentedealencar
¿Qué es pDoc ???? – Zafar