(我正在使用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页面的位图完全可见。
谢谢!!
![快照显示位图的溢出不可见](https://istack.dev59.com/coW4s.webp)
我添加了一个更新版本,左侧的快照是在浏览器中呈现原始 .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;
}
}
----更新图片------------
------------------------------上次编辑的有效内容----------------------------
我的做法是将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;
}
}
--快照显示它们产生几乎相同的视图--