示例#1
0
        /// <summary>
        /// Calculates the actual spreadsheet range that will be printed. This is given by:
        /// 1)If you specified non zero values on PrintRange, this will be used.
        /// 2)If any value in PrintRange is zero and there is a Print Area defined on the
        /// spreadsheet, the Print Area will be used.
        /// 3)If there is no PrintRange and no Print Area defined, the visible cells on the
        /// sheet will be printed.
        /// </summary>
        ///<returns>The area that will be exported.</returns>
        public TXlsCellRange CalcPrintArea()
        {
            Workbook.Recalc(false);
            PdfCanvas = new PdfWriter();
            PdfGraphics RealCanvas = new PdfGraphics(PdfCanvas);

            PrepareCanvas();
            IFlxGraphics aCanvas = RealCanvas;

            FRenderer.SetCanvas(aCanvas);
            try
            {
                FRenderer.CreateFontCache();
                try
                {
                    return(FRenderer.InternalCalcPrintArea(FPrintRange)[0]);
                }
                finally
                {
                    FRenderer.DisposeFontCache();
                }
            }
            finally
            {
                FRenderer.SetCanvas(null);
            }
        }
示例#2
0
        private TImgExportInfo GetExportInfo(IFlxGraphics aCanvas)
        {
            TImgExportInfo Result = new TImgExportInfo();

            if (AllVisibleSheets)
            {
                int FirstVisibleSheet = -1;
                int SaveActiveSheet   = Workbook.ActiveSheet;
                try
                {
                    Result.Sheets = new TOneImgExportInfo[Workbook.SheetCount];
                    for (int sheet = 1; sheet <= Workbook.SheetCount; sheet++)
                    {
                        Workbook.ActiveSheet = sheet;
                        if (Workbook.SheetVisible != TXlsSheetVisible.Visible)
                        {
                            continue;
                        }
                        if (FirstVisibleSheet < 0)
                        {
                            FirstVisibleSheet = sheet;
                        }

                        TOneImgExportInfo OneResult = new TOneImgExportInfo();

                        OneResult.FPrintRanges = FRenderer.InternalCalcPrintArea(FPrintRange);
                        TPaperDimensions pd = GetRealPageSize();
                        OneResult.FPageBounds = new RectangleF(0, 0, pd.Width, pd.Height);

                        FRenderer.InitializePrint(aCanvas, OneResult.PageBounds, OneResult.PageBounds, OneResult.PrintRanges, out OneResult.FPaintClipRect, out OneResult.FTotalPages, out OneResult.FPagePrintRange);
                        Result.Sheets[sheet - 1] = OneResult;
                    }
                }
                finally
                {
                    Workbook.ActiveSheet = SaveActiveSheet;
                }

                Result.CurrentSheet = FirstVisibleSheet;
            }
            else
            {
                TOneImgExportInfo OneResult = new TOneImgExportInfo();
                OneResult.FPrintRanges = FRenderer.InternalCalcPrintArea(FPrintRange);
                TPaperDimensions pd = GetRealPageSize();
                OneResult.FPageBounds = new RectangleF(0, 0, pd.Width, pd.Height);

                FRenderer.InitializePrint(aCanvas, OneResult.PageBounds, OneResult.PageBounds, OneResult.PrintRanges, out OneResult.FPaintClipRect, out OneResult.FTotalPages, out OneResult.FPagePrintRange);
                Result.Sheets       = new TOneImgExportInfo[1];
                Result.Sheets[0]    = OneResult;
                Result.CurrentSheet = Workbook.ActiveSheet;
            }
            Result.ResetCurrentPage();
            LastInitSheet = 0;
            return(Result);
        }
示例#3
0
        private int TotalPagesInSheet(PrintPageEventArgs e, IFlxGraphics aCanvas, RectangleF VisibleClipInches100)
        {
            TXlsCellRange[] MyPrintRange = FRenderer.InternalCalcPrintArea(FPrintRange);
            TXlsCellRange   PagePrintRange;

            RectangleF[] PaintClipRect;

            int  TotalPages;
            bool Landscape = (Workbook.PrintOptions & TPrintOptions.Orientation) == 0;

            FRenderer.InitializePrint(aCanvas, ConvertToUnits(e.PageBounds, Landscape != e.PageSettings.Landscape),
                                      ConvertToMargins(e.Graphics, e.PageBounds, VisibleClipInches100, e.PageSettings.Landscape != Landscape),
                                      MyPrintRange, out PaintClipRect, out TotalPages, out PagePrintRange);

            return(TotalPages);
        }