Je souhaite enregistrer un fichier PdfSharp.Pdf.PdfDocument par sa méthode Save dans un flux, mais sans y attacher les paramètres d'en-tête PDF. Donc quand je relis le Stream et le renvoie à l'utilisateur, il voit que le fichier PDF est invalide. Y at-il une solution pour attacher les paramètres d'en-tête PDF lorsque PDFsharp enregistre en mémoire?PDFsharp enregistrer dans MemoryStream
Répondre
donc la solution:
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);
}
Il y a ce genre de choses de MigraDoc qui vient avec PdfSharp, mais je ne trouve guère une doc/faq bon pour elle. Après des heures de googling j'ai trouvé un extrait qui était quelque chose comme ça. Maintenant ça marche.
Si vous pensez qu'il y a un problème avec PdfDocument.Save, veuillez le signaler sur le forum PDFsharp (mais soyez plus précis avec la description de votre erreur). Votre "solution" ressemble à un hack pour moi. "PdfRenderer.Save" appelle "PdfDocument.Save" en interne. Quel que soit le problème, votre "solution" appelle toujours la même routine de sauvegarde.
Edit: Pour obtenir un octet [] contenant un fichier PDF, il suffit d'appeler:
MemoryStream stream = new MemoryStream();
document.Save(stream, false);
byte[] bytes = stream.ToArray();
Les premières versions de PdfSharp ne réinitialise pas la position de flux.
Vous devez appeler
ms.Seek(0, SeekOrigin.Begin);
pour réinitialiser la position de flux avant de lire à partir du flux; ceci n'est plus requis pour les versions actuelles.
L'utilisation de ToArray peut souvent être utilisée à la place de la lecture du flux.
Edit 2: au lieu de stream.ToArray()
il peut être plus efficace d'utiliser stream.GetBuffer()
, mais ce tampon est généralement plus grand que le fichier PDF et il vous suffit d'utiliser stream.Length
octets de ce tampon. Très utile pour la méthode qui prend un byte[]
avec un paramètre de longueur.
J'ai trouvé une solution plus simple:
byte[] fileContents = null;
using(MemoryStream stream = new MemoryStream())
{
pdfDoc.Save(stream, true);
fileContents = stream.ToArray();
}
Ma réponse montre depuis 2010 que 'ToArray()' peut être utilisé. ;-) –
Pour MigraDoc (ver 1.30) je pouvais l'enregistrer avec
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. "Chunked" MemoryStream
- 2. PDF Impression avec PdfSharp
- 3. Canon Image EDSDK MemoryStream
- 4. memorystream - stringstream, string, autres?
- 5. Impression PdfSharp, GDI + et HTML
- 6. Stockage de MemoryStream dans le cache
- 7. C# 3.0 Enregistrer itextsharp pdf à la base de données en utilisant MemoryStream
- 8. MemoryStream vs un tableau d'octets
- 9. Problème de fermeture .Net MemoryStream
- 10. Comment créer PagePreview avec plus d'une page en utilisant PDFsharp?
- 11. Comment obtenir la hauteur de la table dans PDFsharp?
- 12. Comment parcourir l'arborescence des objets PDF dans PDFSharp?
- 13. Différence entre un tableau d'octets et MemoryStream
- 14. Exécuter un programme à partir de MemoryStream
- 15. Conserver une table en une seule pièce MigraDoc/PDFsharp
- 16. enregistrer pile dans arraylist
- 17. Performances inacceptables Rendu des tables PDF avec ITextSharp et PDFSharp
- 18. Comment enregistrer une chaîne cryptée dans la base de données?
- 19. Utilisez un MemoryStream avec une fonction qui attend un Filestream
- 20. Convertir MemoryStream en FileStream crée des centaines de fichiers identiques?
- 21. GDI + exception sauvegarde un bitmap à un MemoryStream
- 22. Comment enregistrer l'historique dans UpdatePanel?
- 23. Enregistrer le verrouillage dans vba
- 24. Enregistrer l'ancre dans l'historique ie6
- 25. Enregistrer des distances dans MySQL
- 26. Enregistrer l'audio dans le flash
- 27. ASP.NET C# télécharger le contenu MemoryStream via FTPwebRequest problème
- 28. Comment lier un MemoryStream à asp: le contrôle d'image?
- 29. Comment envoyer un PDF dans un MemoryStream à l'imprimante dans .Net?
- 30. PdfSharp - Paramètres de page PDF incorrects lorsque le document est ouvert dans Acrobat
Qu'est-ce pDoc? Est-ce la même chose que doc? –
cela a fonctionné pour moi comme ceci: pdfRenderer.Document = doc; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save (flux); – vicentedealencar
Qu'est-ce que pDoc ???? – Zafar