Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何调整PDF文档大小以适合位图_C#_Windows_Graphics_Bitmap_Pdfsharp - Fatal编程技术网

C# 如何调整PDF文档大小以适合位图

C# 如何调整PDF文档大小以适合位图,c#,windows,graphics,bitmap,pdfsharp,C#,Windows,Graphics,Bitmap,Pdfsharp,(我使用的是PDF夏普) 我有一些位图,并为每个位图创建一个新的PDF页面。问题是我的pdf页面没有足够的高度来容纳整个位图,所以我丢失了位图的一部分 调整pdf页面大小以使整个位图适合该pdf页面的最佳方法是什么 public static PdfDocument GetPDF(List<Bitmap> pages, bool makeFit = false) { using (var doc = new PdfDocument()) {

(我使用的是PDF夏普)

我有一些位图,并为每个位图创建一个新的PDF页面。问题是我的pdf页面没有足够的高度来容纳整个位图,所以我丢失了位图的一部分

调整pdf页面大小以使整个位图适合该pdf页面的最佳方法是什么

  public static PdfDocument GetPDF(List<Bitmap> 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;
        }
    }
但这使得位图变大,而不是PDF页面

我可能需要有人简单地指出将位图保存到PDF页面背后的概念,然后给出一个简单的小示例,说明它是如何完成的

我已经在PDF Sharp上查看了一些帮助文件,它们不是那么容易掌握

我希望有人能告诉我如何用最简单的方式来解决这个问题。我需要做的就是将位图保存到PDF页面,并确保保存到PDF页面的位图完全可见

谢谢

------------------------------------------编辑------------------------------------

我添加了一个更新版本,左边的快照是在浏览器中呈现的原始.png图像,右边的快照是呈现PDF的浏览器

以下是更新的代码:

 public static PdfDocument GetPDF(List<Bitmap> 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;
        }
    }
publicstaticpdfdocumentgetpdf(列表页,boolmakefit=false)
{
使用(var doc=new PdfDocument())
{
对于(字节i=0;i
----更新图像------------

------------------------------最后一次编辑----------------------------

我所做的是将PDF页面调整为位图大小,然后将位图绘制到页面上,并将位图调整为PDF页面大小-5px

      public static PdfDocument GetPDF(List<Bitmap> 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;
        }
    }
publicstaticpdfdocumentgetpdf(列表页,boolmakefit=false)
{
XSize size=新XSize(0,0);
使用(var doc=new PdfDocument())
{
对于(字节i=0;i
--快照显示它们生成的视图几乎相同---------


也许这就是你想要的:

特别是顶部的注释:“您可以使用宽度和高度属性将页面大小设置为任意大小。”

i、 e


稍晚一点,你可以这样做

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);
                    }
                }
            }
        }
for(字节i=0;i
关于高度和宽度的设置,您是对的,我认为可能存在某种aspectratio设置,或者我的尺寸单位不正确。我添加了一个更新版本,左边的快照是在浏览器中呈现的原始.png图像,右边的快照是呈现PDF的浏览器。
oPage.Width = ...
oPage.Height = ...
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);
                    }
                }
            }
        }