如何调整PDF文档大小以适应位图

3

(我正在使用PDF Sharp)

我有几个位图,为每个位图创建一个新的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;
        }
    }

我曾经尝试在这个位置设置大小

 xgr.DrawImage(img, 0, 0);

但这会使位图变大,而不是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;
        }
    }

----更新图片------------

enter image description here

------------------------------上次编辑的有效内容----------------------------

我的做法是将PDF页面调整为位图,然后在页面上绘制位图,将位图调整为PDF页面大小减5像素。

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

--快照显示它们产生几乎相同的视图--

enter image description here

2个回答

2
有点晚了,你仍然可以做到这一点。
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);
                    }
                }
            }
        }

2
也许这是你要找的内容: http://www.pdfsharp.net/wiki/PageSizes-sample.ashx 特别地,顶部的这个注释:"您可以使用宽度和高度属性将页面大小设置为任何大小。"
也就是说,
oPage.Width = ...
oPage.Height = ...

你说得对,关于设置高度和宽度,我在想可能有某种纵横比设置或我的尺寸单位不正确。我已经添加了更新版本,左侧的快照是浏览器中呈现的原始 .png 图像,右侧的是浏览器呈现 PDF。 - Filling The Stack is What I DO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接