// measure a paragraph, skip a page if it won't fit, render it into a rectangle, // and update the rectangle for the next paragraph. // // optionally mark the paragraph as an outline entry and as a link target. // // this routine will not break a paragraph across pages. for that, see the Text Flow sample. // public static Rect RenderParagraph(C1PdfDocument pdf, string text, Font font, Rect rcPage, Rect rc, bool outline, bool linkTarget) { // if it won't fit this page, do a page break rc.Height = pdf.MeasureString(text, font, rc.Width).Height; if (rc.Bottom > rcPage.Bottom) { pdf.NewPage(); rc.Y = rcPage.Top; } // draw the string pdf.DrawString(text, font, Colors.Black, rc); // show bounds (mainly to check word wrapping) //pdf.DrawRectangle(Pens.Sienna, rc); // add headings to outline if (outline) { pdf.DrawLine(new Pen(Colors.Black), rc.X, rc.Y, rc.Right, rc.Y); pdf.AddBookmark(text, 0, rc.Y); } // add link target if (linkTarget) { pdf.AddTarget(text, rc); } // update rectangle for next time rc.Y += rc.Height; //rc.Offset(0, rc.Height); return(rc); }
private void makeDocument() { // start a new document C1PdfDocument pdf = new C1PdfDocument(); string name = Thread.CurrentThread.Name; // with two fonts Font font1 = new Font("Tahoma", 10); Font font2 = new Font("Tahoma", 10, FontStyle.Italic); // create document pdf.Clear(); RectangleF rc = pdf.PageRectangle; rc.Inflate(-72, -72); while (rc.Y < pdf.PageRectangle.Bottom - 72) { pdf.DrawString("Hello buddy. This is thread " + name, font1, Brushes.Red, rc); rc.Y += 12; pdf.DrawString("Hello again. Same thread " + name, font2, Brushes.Blue, rc); rc.Y += 12; pdf.DrawLine(Pens.ForestGreen, rc.X, rc.Y, rc.Right, rc.Y); // let other threads work Thread.Sleep(0); } // save document pdf.Save(string.Format(@"c:\temp\test{0}.pdf", name)); }
//================================================================================ // add page footers to a document // // this method is called by all samples in this project. it scans the document // and adds a 'page n of m' footer to each page. the footers are rendered as // vertical text along the right edge of the document. // // adding content to an existing page is easy: just set the CurrentPage property // to point to an existing page and write into it as usual. // public static void AddFooters(C1PdfDocument pdf) { Font fontHorz = new Font("Tahoma", 7, PdfFontStyle.Bold); Font fontVert = new Font("Viner Hand ITC", 14, PdfFontStyle.Bold); StringFormat sfRight = new StringFormat(); sfRight.Alignment = HorizontalAlignment.Right; StringFormat sfVert = new StringFormat(); sfVert.FormatFlags |= StringFormatFlags.DirectionVertical; sfVert.Alignment = HorizontalAlignment.Center; for (int page = 0; page < pdf.Pages.Count; page++) { // select page we want (could change PageSize) pdf.CurrentPage = page; // build rectangles for rendering text var rcPage = GetPageRect(pdf); var rcFooter = rcPage; rcFooter.Y = rcFooter.Bottom + 6; rcFooter.Height = 12; var rcVert = rcPage; rcVert.X = rcPage.Right + 6; // add left-aligned footer string text = pdf.DocumentInfo.Title; pdf.DrawString(text, fontHorz, Colors.Gray, rcFooter); // add right-aligned footer text = string.Format("Page {0} of {1}", page + 1, pdf.Pages.Count); pdf.DrawString(text, fontHorz, Colors.Gray, rcFooter, sfRight); // add vertical text text = pdf.DocumentInfo.Title + " (document created using the C1Pdf component)"; pdf.DrawString(text, fontVert, Colors.LightGray, rcVert, sfVert); // draw lines on bottom and right of the page var pen = new Pen(Colors.Gray, 1.0); pdf.DrawLine(pen, rcPage.Left, rcPage.Bottom, rcPage.Right, rcPage.Bottom); pdf.DrawLine(pen, rcPage.Right, rcPage.Top, rcPage.Right, rcPage.Bottom); } }
private void newPagePDFBorder(C1PdfDocument pdf, Boolean loopfor) { int gapLine = 20, gapX = 40, gapY = 135, xCol2 = 130, xCol1 = 20, xCol3 = 300, xCol4 = 390, xCol5 = 1030; Size size = new Size(); //if(pdf.Pages.Count>1) pdf.NewPage(); //if ((loopfor) && (pdf.CurrentPage != 0)) pdf.NewPage(); if ((loopfor)) { pdf.NewPage(); } RectangleF rcHdr = new RectangleF(); rcHdr.Width = 542; rcHdr.Height = 500; rcHdr.X = gapX; rcHdr.Y = gapY; //rcHdr.Location pdf.DrawRectangle(Pens.Black, rcHdr); // ตารางใหญ่ pdf.DrawLine(Pens.Black, rcHdr.X, rcHdr.Y + 50, rcHdr.X + rcHdr.Width, rcHdr.Y + 50); pdf.DrawLine(Pens.Black, rcHdr.X, rcHdr.Y + 80, rcHdr.X + rcHdr.Width, rcHdr.Y + 80); pdf.DrawLine(Pens.Black, rcHdr.X + rcHdr.Width - 90, rcHdr.Y + 50, rcHdr.X + rcHdr.Width - 90, rcHdr.Y + rcHdr.Height); //เส้นตั้ง จำนวนเงิน pdf.DrawLine(Pens.Black, rcHdr.X + 260, rcHdr.Y, rcHdr.X + 260, rcHdr.Y + 50); // เส้นตั้ง ชื่อ - นามสกุล float xxx = rcHdr.X + rcHdr.Width - 90; float yyy = rcHdr.Y + rcHdr.Height; gapY += 510; rcHdr.Width = rcHdr.X + rcHdr.Width - 230; rcHdr.Height = 30; rcHdr.X = gapX; rcHdr.Y = gapY; pdf.DrawRectangle(Pens.Black, rcHdr); // ตารางจำนวนเงิน ตัวอักษร pdf.DrawLine(Pens.Black, rcHdr.X + 452, rcHdr.Y + 15, rcHdr.X + 542, rcHdr.Y + 15); //เส้นแบ่ง รวมเงิน pdf.DrawLine(Pens.Black, rcHdr.X + 452, rcHdr.Y + 40, rcHdr.X + 542, rcHdr.Y + 40); //เส้นแบ่ง รวมเงิน rcHdr.Width = 500 - xxx + gapX + 42; rcHdr.Height = 75; rcHdr.X = xxx; rcHdr.Y = yyy; pdf.DrawRectangle(Pens.Black, rcHdr); // ตารางรวมเงิน ด้านล่าง }
static void CreateDocumentTOC(C1PdfDocument pdf) { // create pdf document pdf.DocumentInfo.Title = Strings.TableOfContentsDocumentTitle; // add title Font titleFont = new Font("Tahoma", 24, PdfFontStyle.Bold); Rect rcPage = PdfUtils.PageRectangle(pdf); Rect rc = PdfUtils.RenderParagraph(pdf, pdf.DocumentInfo.Title, titleFont, rcPage, rcPage, false); rc.Y += 12; // create nonsense document var bkmk = new List <string[]>(); Font headerFont = new Font("Arial", 14, PdfFontStyle.Bold); Font bodyFont = new Font("Times New Roman", 11); for (int i = 0; i < 30; i++) { // create ith header (as a link target and outline entry) string header = string.Format("{0}. {1}", i + 1, BuildRandomTitle()); rc = PdfUtils.RenderParagraph(pdf, header, headerFont, rcPage, rc, true, true); // save bookmark to build TOC later int pageNumber = pdf.CurrentPage + 1; bkmk.Add(new string[] { pageNumber.ToString(), header }); // create some text rc.X += 36; rc.Width -= 36; for (int j = 0; j < 3 + _rnd.Next(20); j++) { string text = BuildRandomParagraph(); rc = PdfUtils.RenderParagraph(pdf, text, bodyFont, rcPage, rc); rc.Y += 6; } rc.X -= 36; rc.Width += 36; rc.Y += 20; } // start Table of Contents pdf.NewPage(); // start TOC on a new page int tocPage = pdf.CurrentPage; // save page index (to move TOC later) rc = PdfUtils.RenderParagraph(pdf, Strings.TableOfContentsDocumentTitle, titleFont, rcPage, rcPage, true); rc.Y += 12; rc.X += 30; rc.Width -= 40; // render Table of Contents Pen dottedPen = new Pen(Colors.Gray, 1.5f); dottedPen.DashStyle = C1.Xaml.Pdf.DashStyle.Dot; StringFormat sfRight = new StringFormat(); sfRight.Alignment = HorizontalAlignment.Right; rc.Height = bodyFont.Size * 1.2; foreach (string[] entry in bkmk) { // get bookmark info string page = entry[0]; string header = entry[1]; // render header name and page number pdf.DrawString(header, bodyFont, Colors.Black, rc); pdf.DrawString(page, bodyFont, Colors.Black, rc, sfRight); #if true // connect the two with some dots (looks better than a dotted line) string dots = ". "; var wid = pdf.MeasureString(dots, bodyFont).Width; var x1 = rc.X + pdf.MeasureString(header, bodyFont).Width + 8; var x2 = rc.Right - pdf.MeasureString(page, bodyFont).Width - 8; var x = rc.X; for (rc.X = x1; rc.X < x2; rc.X += wid) { pdf.DrawString(dots, bodyFont, Colors.Gray, rc); } rc.X = x; #else // connect with a dotted line (another option) var x1 = rc.X + pdf.MeasureString(header, bodyFont).Width + 5; var x2 = rc.Right - pdf.MeasureString(page, bodyFont).Width - 5; var y = rc.Top + bodyFont.Size; pdf.DrawLine(dottedPen, x1, y, x2, y); #endif // add local hyperlink to entry pdf.AddLink(Strings.PoundSign + header, rc); // move on to next entry rc = PdfUtils.Offset(rc, 0, rc.Height); if (rc.Bottom > rcPage.Bottom) { pdf.NewPage(); rc.Y = rcPage.Y; } } // move table of contents to start of document PdfPage[] arr = new PdfPage[pdf.Pages.Count - tocPage]; pdf.Pages.CopyTo(tocPage, arr, 0, arr.Length); pdf.Pages.RemoveRange(tocPage, arr.Length); pdf.Pages.InsertRange(0, arr); }
static void CreateDocumentGraphics(C1PdfDocument pdf) { // set up to draw Rect rc = new Rect(50, 70, 300, 300); string text = Strings.DocumentGraphicsText; Font font = new Font("Segoe UI Light", 16, PdfFontStyle.Italic); // draw to pdf document int penWidth = 0; byte penRGB = 0; pdf.FillPie(Colors.DarkRed, rc, 0, 20f); pdf.FillPie(Colors.Green, rc, 20f, 30f); pdf.FillPie(Colors.Teal, rc, 60f, 12f); pdf.FillPie(Colors.Orange, rc, -80f, -20f); for (float startAngle = 0; startAngle < 360; startAngle += 40) { Color penColor = Color.FromArgb(0xff, penRGB, penRGB, penRGB); Pen pen = new Pen(penColor, penWidth++); penRGB = (byte)(penRGB + 20); pdf.DrawArc(pen, rc, startAngle, 40f); } //pdf.DrawRectangle(Colors.Red, rc); rc = new Rect(10, 20, 300, 50); pdf.DrawString(text, font, Colors.Black, rc); // show a Bezier curve var pts = new Point[] { new Point(400, 100), new Point(420, 30), new Point(500, 140), new Point(530, 20), }; // draw Bezier pdf.DrawBezier(new Pen(Colors.Green, 4), pts[0], pts[1], pts[2], pts[3]); // show Bezier control points pdf.DrawLines(Colors.Gray, pts); foreach (Point pt in pts) { pdf.FillRectangle(Colors.Orange, pt.X - 2, pt.Y - 2, 4, 4); } // title pdf.DrawString(Strings.Bezier, font, Colors.Black, new Rect(450, 180, 100, 100)); // figures Color clr = Color.FromArgb(255, 250, 250, 0); Pen linePen = new Pen(clr, 2); linePen.DashStyle = C1.Xaml.Pdf.DashStyle.DashDotDot; pdf.DrawLine(linePen, 120, 700, 550, 300); pts = new Point[] { new Point(200, 400), new Point(500, 300), new Point(500, 560), new Point(370, 660), new Point(250, 600), new Point(200, 400), }; clr = Color.FromArgb(120, 0, 255, 0); pdf.FillPolygon(clr, pts); rc = new Rect(120, 350, 300, 300); clr = Color.FromArgb(150, 0, 0, 255); pdf.FillEllipse(clr, rc); rc = new Rect(100, 400, 250, 250); clr = Color.FromArgb(100, 255, 0, 0); pdf.FillRectangle(clr, rc); }
private void printReserveVaccinePDF() { String pathFolder = "", filename = "", datetick = ""; int gapLine = 20, gapLine1 = 15, gapX = 40, gapY = 20, xCol2 = 200, xCol1 = 160, xCol3 = 300, xCol4 = 390, xCol5 = 500; Size size = new Size(); C1PdfDocument pdf = new C1PdfDocument(); C1PdfDocumentSource pds = new C1PdfDocumentSource(); StringFormat _sfRight, _sfRightCenter; //Font _fontTitle = new Font("Tahoma", 15, FontStyle.Bold); _sfRight = new StringFormat(); _sfRight.Alignment = StringAlignment.Far; _sfRightCenter = new StringFormat(); _sfRightCenter.Alignment = StringAlignment.Far; _sfRightCenter.LineAlignment = StringAlignment.Center; Font titleFont = new Font(bc.iniC.pdfFontName, bc.pdfFontSizetitleFont, FontStyle.Bold); Font hdrFont = new Font(bc.iniC.pdfFontName, bc.pdfFontSizehdrFont, FontStyle.Regular); Font hdrFontB = new Font(bc.iniC.pdfFontName, 16, FontStyle.Bold); Font ftrFont = new Font(bc.iniC.pdfFontName, 8); Font txtFont = new Font(bc.iniC.pdfFontName, bc.pdfFontSizetxtFont, FontStyle.Regular); pdf.FontType = FontTypeEnum.Embedded; RectangleF rcPage = pdf.PageRectangle; rcPage = RectangleF.Empty; rcPage.Inflate(-72, -92); rcPage.Location = new PointF(rcPage.X, rcPage.Y + titleFont.SizeInPoints + 10); rcPage.Size = new SizeF(0, titleFont.SizeInPoints + 3); rcPage.Width = 110; Image loadedImage; loadedImage = Resources.LOGO_BW_tran; float newWidth = loadedImage.Width * 100 / loadedImage.HorizontalResolution; float newHeight = loadedImage.Height * 100 / loadedImage.VerticalResolution; float widthFactor = 4.8F; float heightFactor = 4.8F; if (widthFactor > 1 | heightFactor > 1) { if (widthFactor > heightFactor) { widthFactor = 1; newWidth = newWidth / widthFactor; newHeight = newHeight / widthFactor; //newWidth = newWidth / 1.2; //newHeight = newHeight / 1.2; } else { newWidth = newWidth / heightFactor; newHeight = newHeight / heightFactor; } } RectangleF recf = new RectangleF(15, 15, (int)newWidth, (int)newHeight); pdf.DrawImage(loadedImage, recf); rcPage.X = gapX + recf.Width - 10; rcPage.Y = gapY; RectangleF rc = rcPage; string[] filePaths = Directory.GetFiles(System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\slip\\", txtID.Text.Trim() + "*.jpg"); if (filePaths.Length > 0) { int i = 1, xx = 40; foreach (String filename1 in filePaths) { Image loadedImage1, resizedImage1 = null; loadedImage1 = Image.FromFile(filename1); int originalWidth = 0; originalWidth = loadedImage1.Width; int newWidth1 = 200; resizedImage1 = loadedImage1.GetThumbnailImage(newWidth1, (newWidth1 * loadedImage1.Height) / originalWidth, null, IntPtr.Zero); RectangleF recf1 = new RectangleF(i == 1?xx: newWidth1 + 10, 380, (int)newWidth1, (int)resizedImage1.Height); pdf.DrawImage(loadedImage1, recf1); i++; } } Image qrcode = c1BarCode1.Image; RectangleF recf2 = new RectangleF(350, 500, qrcode.Width, qrcode.Height); pdf.DrawImage(qrcode, recf2); size = bc.MeasureString(bc.iniC.hostname, titleFont); rcPage.Width = size.Width; pdf.DrawString(bc.iniC.hostname, titleFont, Brushes.Black, rcPage); gapY += gapLine; rcPage.Y = gapY; size = bc.MeasureString(bc.iniC.hostaddresst, hdrFont); rcPage.Width = size.Width; pdf.DrawString(bc.iniC.hostaddresst, hdrFont, Brushes.Black, rcPage); String dose = "", amt11 = ""; int amt111 = 0; dose = txtDose.Text.Replace("จอง", "").Replace("เข็ม", "").Replace("3,300", "").Replace("1,650", "").Replace("4,950", "").Trim().Replace("6,600", "").Trim().Replace("8,250", "") .Replace("8,250", "").Replace("9,900", "").Replace("11,500", "").Replace("13,200", "").Replace("14,850", "").Replace("16,500", "").Replace("18,150", "").Replace("19,800", "").Trim(); int.TryParse(dose, out amt111); amt111 *= 1650; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapX = xCol1; rc.X = (pdf.PageSize.Width / 2) - 15; rc.Y = gapY; pdf.DrawString("ใบจองวัคซีน", titleFont, Brushes.Black, rc); gapY += gapLine; gapY += gapLine; gapX = 30; rc.X = gapX; rc.Y = gapY; pdf.DrawString("ข้าพเจ้า ชื่อ-นามสกุล", txtFont, Brushes.Black, rc); rc.X = 110; rc.Y = rc.Y - 4; pdf.DrawString(txtName.Text, hdrFont, Brushes.Black, rc); pdf.DrawLine(Pens.Gray, 100, gapY + 15, 380, gapY + 15); rc.X = 400; rc.Y = gapY; pdf.DrawString("เลขที่ประชาชน", txtFont, Brushes.Black, rc); rc.X = 470; rc.Y = rc.Y - 4; pdf.DrawString(txtPID.Text, hdrFont, Brushes.Black, rc); pdf.DrawLine(Pens.Gray, 455, gapY + 15, 590, gapY + 15); gapY += gapLine; gapX = 30; rc.X = gapX; rc.Y = gapY; pdf.DrawString("ที่อยู่ปัจจุบัน", txtFont, Brushes.Black, rc); rc.X = 75; rc.Y = rc.Y - 4; pdf.DrawString(txtAddress.Text, hdrFont, Brushes.Black, rc); pdf.DrawLine(Pens.Gray, 70, gapY + 15, 400, gapY + 15); rc.X = 420; rc.Y = gapY; pdf.DrawString("เบอร์ที่ติดต่อได้", txtFont, Brushes.Black, rc); rc.X = 480; rc.Y = rc.Y - 4; pdf.DrawString(txtMobile.Text, hdrFont, Brushes.Black, rc); pdf.DrawLine(Pens.Gray, 470, gapY + 15, 590, gapY + 15); gapY += gapLine; gapX = 30; rc.X = gapX; rc.Y = gapY; rc.Width = 610; pdf.DrawString("ขอจองวัคซีนทางเลือก MODERNA และชำระเงิน จำนวน โดส ราคา 1,650 บาทต่อโดส", txtFont, Brushes.Black, rc); rc.X = 19; rc.Y = rc.Y - 4; pdf.DrawString(dose, hdrFont, Brushes.Black, rc); pdf.DrawLine(Pens.Gray, 215, gapY + 15, 220, gapY + 15); gapY += gapLine; gapX = 30; rc.X = gapX; rc.Y = gapY; pdf.DrawString("ราคาดังกล่าวเป็นราคาที่ รวมค่าวัคซีน ค่าประกัน ค่าบริการสำหรับการฉีด ไม่รวมค่าแพทย์ ถ้าต้องการพบแพทย์ โดยชำระเงินเต็มจำนวน", txtFont, Brushes.Black, rc); gapY += gapLine; gapX = 30; rc.X = gapX; rc.Y = gapY; pdf.DrawString("โดสละ 1,650 รวม โดส เป็นเงิน บาท ตามใบเจองเลขที่ ", txtFont, Brushes.Black, rc); rc.X = 100; rc.Y = rc.Y - 4; pdf.DrawString(dose, hdrFont, Brushes.Black, rc); rc.X = 175; rc.Y = rc.Y; pdf.DrawString(amt111.ToString("#,###.00"), hdrFont, Brushes.Black, rc); rc.X = 310; rc.Y = rc.Y; pdf.DrawString(txtID.Text.Trim(), hdrFont, Brushes.Black, rc); pdf.DrawLine(Pens.Gray, 95, gapY + 15, 100, gapY + 15); pdf.DrawLine(Pens.Gray, 165, gapY + 15, 220, gapY + 15); pdf.DrawLine(Pens.Gray, 340, gapY + 15, 470, gapY + 15); gapY += gapLine; gapX = 30; rc.X = gapX; rc.Y = gapY; pdf.DrawString("หมายเหตุ 1.ทางโรงพยาบาลจะนัดรับวัคซีนหลังจาก โรงพยาบาลได้รับการจัดสรรจากหน่วยงานภาครัฐ ตามที่อยู่และเบอร์โทรที่ได้ให้ไว้", txtFont, Brushes.Black, rc); gapY += gapLine; gapX = 30; rc.X = 67; rc.Y = gapY; pdf.DrawString("2.กรณีได้รับจัดสรรวัคซีนมาไม่เพียงพอต่อการจองที่โรงพยาบาลได้รับจองตามที่ได้รับจัดสรร ทางโรงพยาบาลจะเรียงลำดับการเข้ารับวัคซีนตามลำดดับการจองก่อน-หลัง", txtFont, Brushes.Black, rc); gapY += gapLine; gapX = 30; rc.X = 67; rc.Y = gapY; pdf.DrawString("และจะคืนเงินมัดจำให้เต็มจำนวน กรณีจองแล้วไม่ได้", txtFont, Brushes.Black, rc); gapY += gapLine; gapX = 30; rc.X = 67; rc.Y = gapY; pdf.DrawString("3.ทางโรงพยาบาลสงวนสิทธิ์ยกเลิกการของโดยไม่คืนเงินกรณีผู้จองไม่มารับวัคซีนตามช่วงเวลาที่กำหนด", txtFont, Brushes.Black, rc); gapY += gapLine; gapX = 30; rc.X = 67; rc.Y = gapY; pdf.DrawString("4.ห้ามนำวัคซีนไปขายต่อเพราะเป็นสินค้าควบคุมราคา", txtFont, Brushes.Black, rc); gapY += gapLine; gapX = 30; rc.X = 67; rc.Y = gapY; pdf.DrawString("5.ต้องมารับบริการฉีดวัคซีน ที่โรงพยาบาล บางนา5 เท่านั้น", txtFont, Brushes.Black, rc); gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapX = 30; rc.X = 370; rc.Y = gapY; pdf.DrawString("ผู้จอง", txtFont, Brushes.Black, rc); pdf.DrawLine(Pens.Gray, 400, gapY + 15, 500, gapY + 15); gapY += gapLine; gapX = 30; rc.X = 370; rc.Y = gapY; pdf.DrawString("ผู้รับจอง on line", txtFont, Brushes.Black, rc); pdf.DrawLine(Pens.Gray, 400, gapY + 15, 500, gapY + 15); String txt = ""; if (txtDate.Text.Trim().Length > 9) { txt = bc.datetoShow(txtDate.Text.Trim()) + " " + txtDate.Text.Substring(10).Trim(); } else { txt = txtDate.Text.Trim(); } gapY += gapLine; gapX = 30; rc.X = 370; rc.Y = gapY; pdf.DrawString("วันที่จอง " + txt, txtFont, Brushes.Black, rc); pdf.DrawLine(Pens.Gray, 400, gapY + 15, 500, gapY + 15); gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapY += gapLine; gapX = 30; rc.X = gapX; rc.Y = gapY; pdf.DrawString("สอบถามเพิ่มเติมโทร 02 138 1155-60 ต่อ 143 ", txtFont, Brushes.Black, rc); gapY += gapLine; gapX = 30; rc.X = gapX; rc.Y = gapY; pdf.DrawString("วันจันทร์ ถึง วันศุกร์ เวลา 8.00 - 16.00 น. (ปิดพักเที่ยง) ", txtFont, Brushes.Black, rc); gapY += gapLine; gapX = 30; rc.X = gapX; rc.Y = gapY; pdf.DrawString("line @657bkkyq", txtFont, Brushes.Black, rc); RectangleF rcHdr = new RectangleF(); rcHdr.Width = pdf.PageSize.Width - 20; rcHdr.Height = pdf.PageSize.Height - 20; rcHdr.X = 10; rcHdr.Y = 10; String PathName = "medical", fileName = ""; datetick = DateTime.Now.Ticks.ToString(); if (!Directory.Exists("report")) { Directory.CreateDirectory("report"); } fileName = "report\\" + txtID.Text.Trim() + "_" + datetick + ".pdf"; if (File.Exists(fileName)) { File.Delete(fileName); System.Threading.Thread.Sleep(100); } pdf.DrawRectangle(Pens.Black, rcHdr); // ตาราง String path = Path.GetDirectoryName(Application.ExecutablePath); pdf.Save(path + "\\" + fileName); Process.Start(fileName); }
static void CreateDocumentTOC(C1PdfDocument pdf) { // create pdf document pdf.DocumentInfo.Title = "Document with Table of Contents"; // add title Font titleFont = new Font("Tahoma", 24, PdfFontStyle.Bold); Rect rcPage = PdfUtils.PageRectangle(pdf); Rect rc = PdfUtils.RenderParagraph(pdf, pdf.DocumentInfo.Title, titleFont, rcPage, rcPage, false); rc.Y += 12; // create nonsense document var bkmk = new List<string[]>(); Font headerFont = new Font("Arial", 14, PdfFontStyle.Bold); Font bodyFont = new Font("Times New Roman", 11); for (int i = 0; i < 30; i++) { // create ith header (as a link target and outline entry) string header = string.Format("{0}. {1}", i + 1, BuildRandomTitle()); rc = PdfUtils.RenderParagraph(pdf, header, headerFont, rcPage, rc, true, true); // save bookmark to build TOC later int pageNumber = pdf.CurrentPage + 1; bkmk.Add(new string[] { pageNumber.ToString(), header }); // create some text rc.X += 36; rc.Width -= 36; for (int j = 0; j < 3 + _rnd.Next(20); j++) { string text = BuildRandomParagraph(); rc = PdfUtils.RenderParagraph(pdf, text, bodyFont, rcPage, rc); rc.Y += 6; } rc.X -= 36; rc.Width += 36; rc.Y += 20; } // start Table of Contents pdf.NewPage(); // start TOC on a new page int tocPage = pdf.CurrentPage; // save page index (to move TOC later) rc = PdfUtils.RenderParagraph(pdf, "Table of Contents", titleFont, rcPage, rcPage, true); rc.Y += 12; rc.X += 30; rc.Width -= 40; // render Table of Contents Pen dottedPen = new Pen(Colors.Gray, 1.5f); dottedPen.DashStyle = DashStyle.Dot; StringFormat sfRight = new StringFormat(); sfRight.Alignment = HorizontalAlignment.Right; rc.Height = bodyFont.Size * 1.2; foreach (string[] entry in bkmk) { // get bookmark info string page = entry[0]; string header = entry[1]; // render header name and page number pdf.DrawString(header, bodyFont, Colors.Black, rc); pdf.DrawString(page, bodyFont, Colors.Black, rc, sfRight); #if true // connect the two with some dots (looks better than a dotted line) string dots = ". "; var wid = pdf.MeasureString(dots, bodyFont).Width; var x1 = rc.X + pdf.MeasureString(header, bodyFont).Width + 8; var x2 = rc.Right - pdf.MeasureString(page, bodyFont).Width - 8; var x = rc.X; for (rc.X = x1; rc.X < x2; rc.X += wid) { pdf.DrawString(dots, bodyFont, Colors.Gray, rc); } rc.X = x; #else // connect with a dotted line (another option) var x1 = rc.X + pdf.MeasureString(header, bodyFont).Width + 5; var x2 = rc.Right - pdf.MeasureString(page, bodyFont).Width - 5; var y = rc.Top + bodyFont.Size; pdf.DrawLine(dottedPen, x1, y, x2, y); #endif // add local hyperlink to entry pdf.AddLink("#" + header, rc); // move on to next entry rc = PdfUtils.Offset(rc, 0, rc.Height); if (rc.Bottom > rcPage.Bottom) { pdf.NewPage(); rc.Y = rcPage.Y; } } // move table of contents to start of document PdfPage[] arr = new PdfPage[pdf.Pages.Count - tocPage]; pdf.Pages.CopyTo(tocPage, arr, 0, arr.Length); pdf.Pages.RemoveRange(tocPage, arr.Length); pdf.Pages.InsertRange(0, arr); }