我试图允许用户使用PDF Sharp保存/查看甘特图,我的问题是当用户选择太多行时图像被压缩并且不可读,是否有一种方法可以允许/设置图像拉伸跨多个页面?
所以即时创建两个图像组合它们然后输出到pdf页面,我已经尝试将页面宽度设置为更高,但这没有用。
Bitmap bitmap = new Bitmap(image.Width + imageTest.Width, Math.Max(image.Height, imageTest.Height));
using (Graphics combineG = Graphics.FromImage(bitmap))
{
combineG.DrawImage(imageTest, 0, 0);
combineG.DrawImage(image, imageTest.Width, 0);
}
//convert to pdf
PdfDocument document = new PdfDocument();
document.Info.Title = "Holiday_Year " + year + "&Quarter " + quarter;
PdfPage page = document.AddPage();
page.Orientation = PdfSharp.PageOrientation.Landscape;
XGraphics gfx = XGraphics.FromPdfPage(page);
XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);
gfx.DrawImage(bitmap, new XRect(0, 100, page.Width, 100));
gfx.DrawString("Holiday - Quarter " + quarter + " & Year " + year, font, XBrushes.Black, new XRect(0, 0, page.Width, 40), XStringFormats.Center);
byte[] fileContents = null;
MemoryStream memoryStream = new MemoryStream();
document.Save(memoryStream, true);
fileContents = memoryStream.ToArray();
memoryStream.Close();
Response.Clear();
Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition", "attachment; filename=IEMS-Holiday.pdf");
Response.BinaryWrite(fileContents);
Response.End();
答案 0 :(得分:1)
回答这个问题:PDFsharp没有内置功能,允许图像分布在多个页面上。
可以在不同位置的多个页面上绘制图像,显示图像的不同部分。打印后,这些页面可以拼接在一起。该图像仅包含在PDF文件中
PDFsharp支持自定义页面大小。
答案 1 :(得分:0)
我想我已经解决了我的问题,我在此代码中添加了检查图像高度,然后输出到正确的页面大小。
PdfPage page = document.AddPage();
if (image.Height > 1000)
{
page.Size = PageSize.A1;
}
else
{
page.Size = PageSize.A2;
}
这样它将一个大图像放到A1页面等,然后我让adobe弄清楚如何打印页面,似乎在查看和打印时效果很好
答案 2 :(得分:0)
我花了一点时间才能得到正确的数字,但这就是我所得到的,似乎只需要一张图像,只要你需要它并把它切成小块,把每个块放在自己的页面上。当然,你需要根据你做多少来调整宽度,但同样,它只是在玩数字。
PdfDocument doc = new PdfDocument();
XImage img = XImage.FromFile(ImgPath);
double captureHeight = 610;
double captureWidth = 790;
double totalHeight = img.PixelHeight / 1.5;
double totalWidth = img.PixelWidth;
PdfPage page = null;
int i = 0;
double saveHeight = 0;
while (saveHeight < totalHeight)
{
page = new PdfPage();
page.Size = PdfSharp.PageSize.Letter;
page.Orientation = PdfSharp.PageOrientation.Landscape;
doc.Pages.Add(page);
XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[i]);
xgr.DrawImage(img, 0, (-i * captureHeight), captureWidth, totalHeight);
saveHeight += captureHeight;
i++;
}
doc.Save(PdfPath);
doc.Close();