我正在尝试允许用户使用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();
发布于 2014-06-18 11:43:29
要回答这个问题: PDFsharp没有内置的功能,允许图像跨多个页面传播。
可以在多个页面上的不同位置绘制图像,显示图像的不同部分。打印后,可以将这些页面缝合在一起。图像将仅包含在PDF文件中一次
PDFsharp支持自定义页面大小。
发布于 2014-06-18 11:38:22
我想我已经解决了我的问题,我添加了这段代码来检查图像高度,然后输出到正确的页面大小。
PdfPage page = document.AddPage();
if (image.Height > 1000)
{
page.Size = PageSize.A1;
}
else
{
page.Size = PageSize.A2;
}
通过这种方式,它将一个大图像放到一个A1页面上,然后我让adobe知道如何打印页面,在查看和打印方面似乎效果很好
发布于 2016-04-20 12:48:55
我花了一段时间才得到正确的数字,但这是我得到的,似乎是一个单独的图像,只要你需要它的长度,并将其切割成更小的块,将每个块放在各自的页面上。当然,你需要根据你做了多少来调整宽度,但同样,它只是在玩弄数字。
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();
https://stackoverflow.com/questions/24282731
复制