(J’utilise PDF Sharp)
J’ai quelques Bitmaps et pour chaque Bitmap je crée une nouvelle page PDF. Le problème est que ma page pdf n’a pas assez de hauteur pour contenir l’ensemble du bitmap, alors je perds une partie du bitmap.
Quelle est la meilleure façon de redimensionner la page pdf afin que l’intégralité de la bitmap s’adapte à cette page PDF?
public static PdfDocument GetPDF(List pages, bool makeFit = false) { using (var doc = new PdfDocument()) { for (byte i = 0; i < pages.Count(); i++) { PdfPage oPage = new PdfPage(); doc.Pages.Add(oPage); using (var xgr = XGraphics.FromPdfPage(oPage)) { using (var bm = pages[i]) { using (var img = XImage.FromGdiPlusImage(bm)) { xgr.DrawImage(img, 0, 0); } } } } return doc; } }
J’ai essayé de définir la taille à cet endroit
xgr.DrawImage(img, 0, 0);
mais cela a rendu la bitmap plus grande et pas la page PDF.
J’ai peut-être besoin de quelqu’un pour simplement souligner le concept de sauvegarde des images bitmap dans les pages PDF, puis donner un petit exemple simple de la façon dont cela a été fait.
J’ai déjà examiné certains fichiers d’aide de PDF Sharp et ils ne sont pas faciles à comprendre.
J’espère que quelqu’un peut juste me dire comment aborder cela dans la forme la plus simple. Tout ce que j’ai à faire est d’enregistrer un bitmap sur une page PDF et de m’assurer que le bitmap enregistré sur la page PDF est entièrement visible.
Je vous remercie!!
——————————————MODIFIER——- —————————–
J’ai ajouté une version mise à jour, l’instantané à gauche est une image .png brute rendue dans un navigateur et celle à droite est le navigateur qui rend le PDF.
Voici le code mis à jour:
public static PdfDocument GetPDF(List pages, bool makeFit = false) { using (var doc = new PdfDocument()) { for (byte i = 0; i < pages.Count(); i++) { PdfPage oPage = new PdfPage(); doc.Pages.Add(oPage); if (makeFit) { XSize size = new XSize(pages[i].Width, pages[i].Height); oPage.Height = size.Height; oPage.Width = size.Width; } using (var xgr = XGraphics.FromPdfPage(oPage)) { using (var bm = pages[i]) { using (var img = XImage.FromGdiPlusImage(bm)) { xgr.DrawImage(img, 0, 0); } } } } return doc; } }
—- Mettre à jour l’image ————
—————————— Dernière édition qui fonctionne —————- ————
Ce que j’ai fait, c’est redimensionner la page PDF en bitmap, puis dessiner le bitmap sur la page et redimensionner la bitmap en fonction de la taille de la page PDF -5px.
public static PdfDocument GetPDF(List pages, bool makeFit = false) { XSize size = new XSize(0, 0); using (var doc = new PdfDocument()) { for (byte i = 0; i < pages.Count(); i++) { PdfPage oPage = new PdfPage(); doc.Pages.Add(oPage); if (makeFit) { size = new XSize(pages[i].Width, pages[i].Height); oPage.Height = size.Height; oPage.Width = size.Width; } using (var xgr = XGraphics.FromPdfPage(oPage)) { using (var bm = pages[i]) { using (var img = XImage.FromGdiPlusImage(bm)) { if (makeFit) { xgr.DrawImage(img, 0, 0, size.Width - 5, size.Height - 5); } else { xgr.DrawImage(img, 0, 0); } } } } } return doc; } }
–Les clichés montrent qu’ils produisent à peu près la même vue ———
C’est peut-être ce que vous recherchez: http://www.pdfsharp.net/wiki/PageSizes-sample.ashx
En particulier, cette note en haut: “Vous pouvez définir la taille d’une page à n’importe quelle taille en utilisant les propriétés Largeur et Hauteur.”
c’est à dire
oPage.Width = ... oPage.Height = ...
Un peu tard, vous pourriez le faire.
for (byte i = 0; i < pages.Count(); i++) { PdfPage oPage = new PdfPage(); doc.Pages.Add(oPage); using (var xgr = XGraphics.FromPdfPage(oPage)) { using (var bm = pages[i]) { using (var img = XImage.FromGdiPlusImage(bm)) { doc.Pages[i].Width = XUnit.FromPoint(ximg.Size.Width); doc.Pages[i].Height = XUnit.FromPoint(ximg.Size.Height); xgr.DrawImage(ximg, 0, 0, img.Size.Width, img.Size.Height); } } } }