Comment redimensionner un document PDF pour l’adapter à un bitmap

(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!!

L'instantané montre que le débordement de la bitmap n'est pas visible

——————————————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 ————

entrer la description de l'image ici

—————————— 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 ———

entrer la description de l'image ici

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); } } } }