Esempio n. 1
0
        /// <summary>
        /// 將 PDF 加上 浮水印
        /// </summary>
        /// <param name="pdfStream"></param>
        /// <param name="arg"></param>
        /// <returns></returns>
        public static MemoryStream AddWatermark(MemoryStream pdfStream, WatermarkArg arg)
        {
            var pdfDocument = new Aspose.Pdf.Document(pdfStream);

            if (!string.IsNullOrWhiteSpace(arg.Watermark))
            {
                var text = new FormattedText(arg.Watermark);
                foreach (var page in pdfDocument.Pages)
                {
                    switch (arg.WMStyle)
                    {
                    case WatermarkStyle.FitPage:
                        AddWatermarkFitPage(page, arg);
                        break;

                    case WatermarkStyle.RepeatHorizontal:
                        AddWatermarkRepeatHorizontal(page, arg);
                        break;

                    default:
                        break;
                    }
                }
            }
            var newPdfStream = new MemoryStream();

            pdfDocument.Save(newPdfStream);
            return(newPdfStream);
        }
Esempio n. 2
0
        protected void btnFooter_Click(object sender, EventArgs e)
        {
            var excelArg = new ExportDataTable2ExcelArg
            {
                dataSource   = GetDataSource(),
                HeaderCenter = "&24 This is Report Header ...",
                HeaderRight  = $"&12 使用者:Rainmaker\r日期:{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")}",
                FooterRight  = "&10 &P/&N",
                ColumnInfos  = new Dictionary <string, Tuple <string, double, Aspose.Cells.Style> >
                {
                    { "ProductID", new Tuple <string, double, Aspose.Cells.Style>($"產品代號", -1, null) },
                    { "ProductName", new Tuple <string, double, Aspose.Cells.Style>("產品名稱", -1, null) },
                    { "ProductDesc", new Tuple <string, double, Aspose.Cells.Style>("產品描述", -1, null) },
                    { "Units", new Tuple <string, double, Aspose.Cells.Style>("產品 庫存", -1, null) },
                    { "CreDte", new Tuple <string, double, Aspose.Cells.Style>("日期", 10, new Aspose.Cells.Style {
                            Number = 14
                        }) }
                },
                PageOrientation           = PageOrientationType.Landscape,
                IsTextWrapped             = false,
                PageScale                 = 80,
                FontName                  = "標楷體",
                HeaderHorizontalAlignment = TextAlignmentType.Center
            };
            var pdfStream          = GenPDFFromDataTable(excelArg);
            var fileNameWithoutExt = $"{Guid.NewGuid().ToString("N")}";
            //string pdfFileName = Path.Combine(Server.MapPath("./data"), $"{fileNameWithoutExt}_temp.pdf");
            //using (FileStream file = new FileStream(pdfFileName, FileMode.Create, System.IO.FileAccess.Write))
            //    pdfStream.CopyTo(file);

            var watermarkArg = new WatermarkArg
            {
                Watermark                = $"* 使用者:亂馬客  *{Environment.NewLine}{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")}",
                WMStyle                  = WatermarkStyle.RepeatHorizontal,
                WatermarkHeight          = 100,
                WatermarkWidth           = 130,
                WatermarkHorizontalSpace = 50,
                WatermarkVerticalSpace   = 30,
                RotateAngle              = 30,
                Opacity                  = .1
            };
            var waterStream = AddFooterAndWatermark(pdfStream, watermarkArg);

            //string watermarkFileName = Path.Combine(Server.MapPath("./data"), $"{fileNameWithoutExt}.pdf");
            //using (FileStream file = new FileStream(watermarkFileName, FileMode.Create, System.IO.FileAccess.Write))
            //    waterStream.CopyTo(file);
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment; filename=" + $"{fileNameWithoutExt}.pdf");
            var fileSize = waterStream.Length;

            byte[] pdfBuffer = new byte[(int)fileSize];
            waterStream.Read(pdfBuffer, 0, (int)fileSize);
            waterStream.Close();
            Response.BinaryWrite(pdfBuffer);
            Response.End();
        }
Esempio n. 3
0
        public static MemoryStream AddFooterAndWatermark(MemoryStream pdfStream, WatermarkArg arg)
        {
            var pdfDocument = new Aspose.Pdf.Document(pdfStream);
            var pdfLastPage = pdfDocument.Pages[pdfDocument.Pages.Count];
            var footer      = new Aspose.Pdf.HeaderFooter();

            //Instantiate a table object
            Aspose.Pdf.Table tab1 = new Aspose.Pdf.Table();
            tab1.HorizontalAlignment = HorizontalAlignment.Center;
            //設定預設的文字格式
            var defaultTextState = new TextState("MingLiU", 8);

            footer.Paragraphs.Add(tab1);
            tab1.DefaultColumnWidth   = "180";
            tab1.DefaultCellTextState = defaultTextState;
            //Create rows in the table and then cells in the rows
            var row1  = tab1.Rows.Add();
            var cellL = row1.Cells.Add("信用資訊查詢主管");

            //cellL.DefaultCellTextState = defaultTextState;
            cellL.Alignment = HorizontalAlignment.Left;
            var cellR = row1.Cells.Add("經辦");

            cellR.Alignment    = HorizontalAlignment.Right;
            pdfLastPage.Footer = footer;

            if (!string.IsNullOrWhiteSpace(arg.Watermark))
            {
                var text = new FormattedText(arg.Watermark);
                foreach (var page in pdfDocument.Pages)
                {
                    switch (arg.WMStyle)
                    {
                    case WatermarkStyle.FitPage:
                        AddWatermarkFitPage(page, arg);
                        break;

                    case WatermarkStyle.RepeatHorizontal:
                        AddWatermarkRepeatHorizontal(page, arg);
                        break;

                    default:
                        break;
                    }
                }
            }
            var newPdfStream = new MemoryStream();

            pdfDocument.Save(newPdfStream);
            return(newPdfStream);
        }
Esempio n. 4
0
        /// <summary>
        /// 浮水印跟頁面一樣大
        /// </summary>
        /// <param name="pdfPage"></param>
        /// <param name="arg"></param>
        private static void AddWatermarkFitPage(Aspose.Pdf.Page pdfPage, WatermarkArg arg)
        {
            //var text = new FormattedText(arg.Watermark);
            var defaultTextState = new TextState("MingLiU");
            var stamp            = new TextStamp(arg.Watermark, defaultTextState);

            stamp.RotateAngle = arg.RotateAngle;
            stamp.XIndent     = arg.WatermarkHorizontalSpace;
            stamp.YIndent     = arg.WatermarkVerticalSpace;
            stamp.Opacity     = arg.Opacity;
            stamp.Width       = pdfPage.CropBox.Width;
            stamp.Height      = pdfPage.CropBox.Height;
            pdfPage.AddStamp(stamp);
        }
Esempio n. 5
0
        /// <summary>
        /// 依 浮水印 水平地蓋滿整個頁面
        /// </summary>
        /// <param name="pdfPage"></param>
        /// <param name="arg"></param>
        private static void AddWatermarkRepeatHorizontal(Aspose.Pdf.Page pdfPage, WatermarkArg arg)
        {
            if (arg.WatermarkHeight < minValue)
            {
                throw new ArgumentException($"{nameof(arg.WatermarkHeight)} must greater than {minValue}");
            }
            if (arg.WatermarkWidth < minValue)
            {
                throw new ArgumentException($"{nameof(arg.WatermarkWidth)} must greater than {minValue}");
            }

            //var text = new FormattedText(arg.Watermark);
            var yIndent   = pdfPage.CropBox.Height - arg.WatermarkHeight;
            var yLimit    = 0 - (arg.WatermarkHeight + arg.WatermarkVerticalSpace);
            var pageWidth = pdfPage.CropBox.Width;
            var xIndent   = 0d;

            while (yIndent > yLimit)
            {
                while (xIndent < pageWidth)
                {
                    var defaultTextState = new TextState("MingLiU");
                    var stamp            = new TextStamp(arg.Watermark, defaultTextState);
                    stamp.RotateAngle = arg.RotateAngle;
                    stamp.XIndent     = xIndent;
                    stamp.YIndent     = yIndent;
                    stamp.Opacity     = arg.Opacity;
                    stamp.Width       = arg.WatermarkWidth;
                    stamp.Height      = arg.WatermarkHeight;
                    pdfPage.AddStamp(stamp);
                    xIndent += (arg.WatermarkWidth + arg.WatermarkHorizontalSpace);
                }
                xIndent = 0;
                var yIdentReduce = (arg.WatermarkHeight + arg.WatermarkVerticalSpace);

                yIndent -= yIdentReduce;
            }
        }
Esempio n. 6
0
        /// <summary>
        /// 以角度線性期function來呈現
        /// </summary>
        /// <param name="pdfPage"></param>
        /// <param name="arg"></param>
        private static void AddWatermarkRepeatRotateAngle(Aspose.Pdf.Page pdfPage, WatermarkArg arg)
        {
            if (arg.WatermarkHeight < minValue)
            {
                throw new ArgumentException($"{nameof(arg.WatermarkHeight)} must greater than {minValue}");
            }
            if (arg.WatermarkWidth < minValue)
            {
                throw new ArgumentException($"{nameof(arg.WatermarkWidth)} must greater than {minValue}");
            }

            var text       = new FormattedText(arg.Watermark);
            var yIndent    = pdfPage.CropBox.Height - arg.WatermarkHeight;
            var yLimit     = 0 - (arg.WatermarkHeight + arg.WatermarkVerticalSpace);
            var pageWidth  = pdfPage.CropBox.Width;
            var pageHeight = pdfPage.CropBox.Height;
            var xIndent    = 0d;

            while (yIndent > yLimit)
            {
                var y = yIndent;
                while (xIndent < pageWidth && y < pageHeight)
                {
                    var stamp = new TextStamp(text);
                    stamp.RotateAngle = arg.RotateAngle;
                    stamp.XIndent     = xIndent;
                    stamp.YIndent     = y;
                    stamp.Opacity     = arg.Opacity;
                    stamp.Width       = arg.WatermarkWidth;
                    stamp.Height      = arg.WatermarkHeight;
                    pdfPage.AddStamp(stamp);
                    xIndent += (arg.WatermarkWidth + arg.WatermarkHorizontalSpace);
                    xIndent  = xIndent + Math.Cos(30) * arg.WatermarkWidth;
                    y        = y + Math.Sign(30) * (arg.WatermarkHeight + arg.WatermarkVerticalSpace);
                }
                xIndent = 0;
                var yIdentReduce = (arg.WatermarkHeight + arg.WatermarkVerticalSpace);
                yIndent -= yIdentReduce;
            }

            //到底了,要再連走 X
            var baseX = 0d;

            while (baseX < pageWidth)
            {
                var y = yIndent;
                xIndent = baseX;
                while (xIndent < pageWidth)
                {
                    var stamp = new TextStamp(text);
                    stamp.RotateAngle = arg.RotateAngle;
                    stamp.XIndent     = xIndent;
                    stamp.YIndent     = y;
                    stamp.Opacity     = arg.Opacity;
                    stamp.Width       = arg.WatermarkWidth;
                    stamp.Height      = arg.WatermarkHeight;
                    pdfPage.AddStamp(stamp);
                    xIndent += (arg.WatermarkWidth + arg.WatermarkHorizontalSpace);
                    xIndent  = xIndent + Math.Cos(30) * arg.WatermarkWidth;
                    y        = y + Math.Sign(30) * (arg.WatermarkHeight + arg.WatermarkVerticalSpace);
                }
                baseX += (arg.WatermarkWidth + arg.WatermarkHorizontalSpace);;
            }
        }