c# - 如何调整 PDF 文档的大小以适合位图

标签 c# windows graphics bitmap pdfsharp

(我正在使用 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 页面的位图完全可见。

谢谢!!

Snapshot shows that the overflow of the Bitmap is not visible

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

我添加了一个更新版本,左边的快照是在浏览器中呈现的原始 .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 页面大小 -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;
        }
    }

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

enter image description here

最佳答案

也许这就是您正在寻找的: http://www.pdfsharp.net/wiki/PageSizes-sample.ashx

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

oPage.Width = ...
oPage.Height = ...

关于c# - 如何调整 PDF 文档的大小以适合位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550511/

相关文章:

php - 启用 APC 后页面超时

c# - 具有单个值的枚举是否合适?

c# - 如何在 jquery 变量中获取业务类属性值

windows - 什么是 named.exe 进程以及如何避免消耗高 CPU 率

c++ - 无法使 wx-widget 与 netbeans 一起工作

r - 为什么 ggplot 会忽略 R 中的指南命令?

c# - 搜索字典的值

c# - 实现具有 3 个或更多参数的排序机制

c++ - 递归光线追踪器中的不正确反射

java - 使用滚动条或微调器的值设置 FillRect() 的颜色