(我正在使用 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;
}
}
----更新图片------------
------------------------------最后编辑有效---- ------------
我所做的是将 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;
}
}
--快照显示它们产生几乎相同的视图---------