PDF夏普,图像延伸到多个页面

时间:2014-06-18 10:05:21

标签: c# asp.net bitmap pdfsharp

我试图允许用户使用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();

3 个答案:

答案 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();