/// <summary> /// Ve mot duong thang tren file Pdf /// </summary> /// <param name="line"></param> /// <param name="page"></param> public static void PrintPdfLine(FosLine line, PagePdf page) { PdfContentByte cb = writer.DirectContent; cb.SaveState(); //canh chinh lai toa do cho phu hop //covan de PdfHelper.ConvertToPointPdf(line.PointStart, page); PdfHelper.ConvertToPointPdf(line.PointDest, page); cb.SetLineWidth(line.LineSize); switch (line.LineStyle) { case LineStyle.Dot: cb.SetLineDash(1f, 1f); break; case LineStyle.Nomar: cb.SetLineCap(1); break; } cb.MoveTo(line.PointStart.XPoint, line.PointStart.YPoint); cb.LineTo(line.PointDest.XPoint, line.PointDest.YPoint); cb.Stroke(); cb.RestoreState(); //sau khi ve xong phai tra lai toa do de ve lai trang khac PdfHelper.ConvertToPointPdf(line.PointStart, page); PdfHelper.ConvertToPointPdf(line.PointDest, page); }
public static void PrintPdfFile(FPdfPanel panel, PagePdf pagePdf) { if (doc != null) { if (panel.pnDetail != null && panel.pnDetail.DataSource != null) { FPdfPanel detail = panel.pnDetail; NumberPage = detail.DataSource.Rows.Count / detail.MaxRow; if ((detail.DataSource.Rows.Count % detail.MaxRow) != 0) { NumberPage++; } MaxRow = detail.MaxRow; } for (int i = 1; i <= NumberPage; i++) { // moi vong lap la in mot trang Pdf CurPage = i; // In het cac control trong trang PrintAllControlInPanel(panel, pagePdf, CurPage, new FosPoint(0, 0)); //In het cac line trong trang sau cung foreach (FosLine line in lsLineInpage) { PrintPdfLine(line, pagePdf); } //Neu khong phai trang cuoi thi tao moi trang de in tiep if (i != NumberPage) { CreateNewPage(); } } } }
/// <summary> /// In border cho label /// </summary> /// <param name="tb"></param> /// <param name="page"></param> /// <param name="rootPoint"></param> public static void PrintBorderLabel(FPdfLabel tb, PagePdf page, FosPoint rootPoint) { if (tb.IsShowLineTop) { FosLine lineTop = new FosLine(); lineTop.PointStart = new FosPoint(rootPoint.XPoint + tb.Location.X, rootPoint.YPoint + tb.Location.Y); lineTop.PointDest = new FosPoint(rootPoint.XPoint + tb.Location.X + tb.Width, rootPoint.YPoint + tb.Location.Y); if (tb.LineStyleTop == System.Drawing.Drawing2D.DashStyle.Dot) { lineTop.LineStyle = LineStyle.Dot; } if (CurPage == 1) { lsLineInpage.Add(lineTop); } } if (tb.IsShowLineBottom) { FosLine lineBottom = new FosLine(); lineBottom.PointStart = new FosPoint(rootPoint.XPoint + tb.Location.X, rootPoint.YPoint + tb.Location.Y + tb.Height); lineBottom.PointDest = new FosPoint(rootPoint.XPoint + tb.Location.X + tb.Width, rootPoint.YPoint + tb.Location.Y + tb.Height); if (tb.LineStyleBottom == System.Drawing.Drawing2D.DashStyle.Dot) { lineBottom.LineStyle = LineStyle.Dot; } if (CurPage == 1) { lsLineInpage.Add(lineBottom); } } if (tb.IsShowLineLeft) { FosLine lineLeft = new FosLine(); lineLeft.PointStart = new FosPoint(rootPoint.XPoint + tb.Location.X, rootPoint.YPoint + tb.Location.Y); lineLeft.PointDest = new FosPoint(rootPoint.XPoint + tb.Location.X, rootPoint.YPoint + tb.Location.Y + tb.Height); if (tb.LineStyleLeft == System.Drawing.Drawing2D.DashStyle.Dot) { lineLeft.LineStyle = LineStyle.Dot; } if (CurPage == 1) { lsLineInpage.Add(lineLeft); } } if (tb.IsShowLineRight) { FosLine lineRight = new FosLine(); lineRight.PointStart = new FosPoint(rootPoint.XPoint + tb.Location.X + tb.Width, rootPoint.YPoint + tb.Location.Y); lineRight.PointDest = new FosPoint(rootPoint.XPoint + tb.Location.X + tb.Width, rootPoint.YPoint + tb.Location.Y + tb.Height); if (tb.LineStyleRight == System.Drawing.Drawing2D.DashStyle.Dot) { lineRight.LineStyle = LineStyle.Dot; } if (CurPage == 1) { lsLineInpage.Add(lineRight); } } }
/// <summary> /// In chu len file Pdf dua vao label /// </summary> /// <param name="FPdfText"></param> /// <param name="page"></param> /// <param name="rootPoint"></param> /// <param name="curPage"></param> public static void PrintPdfString(FPdfLabel FPdfLabel, PagePdf page, FosPoint rootPoint, int curPage) { //Inborder PrintBorderLabel(FPdfLabel, page, rootPoint); //InBackColor PrintBackColor(FPdfLabel, page, rootPoint); //khoi tao bien de in text PdfContentByte cb = writer.DirectContent; cb.SaveState(); BaseFont bf; if (FPdfLabel.Font.Italic) { bf = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\ariali.TTF", BaseFont.IDENTITY_H, true); } else { bf = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\Arial.TTF", BaseFont.IDENTITY_H, true); } //set Font float size = (float)FPdfLabel.Font.Size + (float)FPdfLabel.Font.Size / 3; cb.SetFontAndSize(bf, size); if (FPdfLabel.Font.Bold) { cb.SetLineWidth(0.5); cb.SetTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE); } else { cb.SetLineWidth(0); cb.SetTextRenderingMode(PdfContentByte.ALIGN_LEFT); } // tao bien tao do FosPoint point = CreatePointFromLabel(FPdfLabel); // Tuy vao control cha la gi ma chinh lai toa do point.XPoint += rootPoint.XPoint; point.YPoint += rootPoint.YPoint; //canh chinh lai toa do cho phu hop PdfHelper.ConvertToPointPdf(point, page); //Lay du lieu cua dataSource bo vao text GetDataFPdfLabel(FPdfLabel, curPage); string text = FPdfLabel.Text; //if (text.Trim() == "") // return; //canh lai center hoac right point.XPoint += AlignforFPdfLabel(FPdfLabel as FPdfLabel); cb.BeginText(); cb.ShowTextAligned(0, text, point.XPoint, point.YPoint, FPdfLabel.FPdfProperties.Rotation); cb.EndText(); cb.RestoreState(); }
/// <summary> /// In tat ca cac control co trong Panel /// </summary> /// <param name="panel"></param> /// <param name="page"></param> /// <param name="curPage"></param> /// <param name="rootPoint"></param> public static void PrintAllControlInPanel(FPdfPanel panel, PagePdf page, int curPage, FosPoint rootPoint) { //Add line if (panel.lsPdfLine.Count > 0) { foreach (FosLine line in panel.lsPdfLine) { if (curPage == 1) { FosLine lineNew = new FosLine(new FosPoint(), new FosPoint()); lineNew.PointStart.XPoint = rootPoint.XPoint + line.PointStart.XPoint; lineNew.PointStart.YPoint = rootPoint.YPoint + line.PointStart.YPoint; lineNew.PointDest.XPoint = rootPoint.XPoint + line.PointDest.XPoint; lineNew.PointDest.YPoint = rootPoint.YPoint + line.PointDest.YPoint; lsLineInpage.Add(lineNew); } } } // In hinh dau tien foreach (Control c in panel.Controls) { if (c is PictureBox) { PictureBox pB = c as PictureBox; PrinPdfImage(pB, page, rootPoint); } } //Sau do in chu foreach (Control c in panel.Controls) { if (c is FPdfText) { FPdfText FPdfText = c as FPdfText; PrintPdfString(FPdfText, page, rootPoint, curPage); } if (c is FPdfLabel) { FPdfLabel FPdfLabel = c as FPdfLabel; PrintPdfString(FPdfLabel, page, rootPoint, curPage); } //in Panel con if (c is FPdfPanel) { FPdfPanel FPdfPanelChirld = c as FPdfPanel; //inborder if (FPdfPanelChirld.BorderStyle == BorderStyle.FixedSingle) { PrintBorderForControl(FPdfPanelChirld, page, rootPoint); } PrintAllControlInPanel(FPdfPanelChirld, page, curPage, new FosPoint(rootPoint.XPoint + FPdfPanelChirld.Location.X, rootPoint.YPoint + FPdfPanelChirld.Location.Y)); } } }
/// <summary> /// goi ham de chuan bi in mot file Pdf /// </summary> /// <param name="output"></param> /// <param name="pagePdf"></param> public static void BeginPrint(string output, PagePdf pagePdf) { if (doc == null && writer == null) { doc = new Document(); writer = PdfWriter.GetInstance(doc, new FileStream(output, FileMode.Create)); switch (pagePdf.PageType) { case PageType.A4: doc.SetPageSize(new iTextSharp.text.Rectangle(800, 1100)); break; case PageType.A3: doc.SetPageSize(new iTextSharp.text.Rectangle(PageSize.A3)); break; } doc.Open(); } }
/// <summary> /// In BackColor cho control /// </summary> /// <param name="ct"></param> /// <param name="page"></param> /// <param name="rootPoint"></param> public static void PrintBackColor(Control ct, PagePdf page, FosPoint rootPoint) { if (ct.BackColor == Color.White || ct.BackColor == Color.Transparent) { return; } PdfContentByte over = writer.DirectContent; BaseColor bc = new BaseColor(ct.BackColor); over.SaveState(); FosPoint point = new FosPoint(ct.Location.X, ct.Location.Y + ct.Height); point.XPoint += rootPoint.XPoint; point.YPoint += rootPoint.YPoint; PdfHelper.ConvertToPointPdf(point, page); over.Rectangle(point.XPoint, point.YPoint, ct.Width, ct.Height); over.SetColorFill(bc); over.Fill(); over.RestoreState(); }
/// <summary> /// In mot picturebox tren form ra mot hinh anh tren file Pdf /// </summary> /// <param name="pB"></param> /// <param name="page"></param> /// <param name="rootPoint"></param> public static void PrinPdfImage(PictureBox pB, PagePdf page, FosPoint rootPoint) { BaseColor bc = new BaseColor(255, 255, 255); try { var logo = iTextSharp.text.Image.GetInstance(pB.Image, bc); //xet toa do, goc toa do la goc phan |_ FosPoint point = new FosPoint(pB.Location.X + rootPoint.XPoint, pB.Location.Y + pB.Size.Height + rootPoint.YPoint); PdfHelper.ConvertToPointPdf(point, page); logo.SetAbsolutePosition(point.XPoint, point.YPoint); //xet kich thuoc logo.ScaleAbsoluteHeight(pB.Size.Height); logo.ScaleAbsoluteWidth(pB.Size.Width); doc.Add(logo); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
/// <summary> /// tao border cho cac control /// </summary> /// <param name="ct"></param> /// <param name="page"></param> /// <param name="rootPoint"></param> public static void PrintBorderForControl(Control ct, PagePdf page, FosPoint rootPoint) { FosLine line1 = new FosLine(); line1.PointStart = new FosPoint(rootPoint.XPoint + ct.Location.X, rootPoint.YPoint + ct.Location.Y); line1.PointDest = new FosPoint(rootPoint.XPoint + ct.Location.X + ct.Width, rootPoint.YPoint + ct.Location.Y); if (CurPage == 1) { lsLineInpage.Add(line1); } FosLine line2 = new FosLine(); line2.PointStart = new FosPoint(rootPoint.XPoint + ct.Location.X, rootPoint.YPoint + ct.Location.Y + ct.Height); line2.PointDest = new FosPoint(rootPoint.XPoint + ct.Location.X + ct.Width, rootPoint.YPoint + ct.Location.Y + ct.Height); if (CurPage == 1) { lsLineInpage.Add(line2); } FosLine line3 = new FosLine(); line3.PointStart = new FosPoint(rootPoint.XPoint + ct.Location.X, rootPoint.YPoint + ct.Location.Y); line3.PointDest = new FosPoint(rootPoint.XPoint + ct.Location.X, rootPoint.YPoint + ct.Location.Y + ct.Height); if (CurPage == 1) { lsLineInpage.Add(line3); } FosLine line4 = new FosLine(); line4.PointStart = new FosPoint(rootPoint.XPoint + ct.Location.X + ct.Width, rootPoint.YPoint + ct.Location.Y); line4.PointDest = new FosPoint(rootPoint.XPoint + ct.Location.X + ct.Width, rootPoint.YPoint + ct.Location.Y + ct.Height); if (CurPage == 1) { lsLineInpage.Add(line4); } }
/// <summary> /// Chuyen doi toa đo giua Form va file Pdf /// </summary> /// <param name="point"></param> /// <param name="page"></param> public static void ConvertToPointPdf(FosPoint point, PagePdf page) { point.YPoint = page.Height - point.YPoint; }