Esempio n. 1
0
        /// <summary>
        /// Writes the pages numbers
        /// </summary>
        /// <param name="font">Font</param>
        /// <param name="fontSize">Fonr size</param>
        /// <param name="xPt">X position from the bottom in points</param>
        /// <param name="yPt">Y position from the bottom in points</param>
        /// <param name="rgb">RGB color. Blue is the lower byte</param>
        public void WritePagesNumbers(PdfFont font, int fontSize, int xPt, int yPt, int rgb)
        {
            string color     = FormatRGB(rgb);
            int    pageCount = _pages.Count;

            for (int i = 0; i < pageCount; i++)
            {
                PdfPage page     = _pages[i];
                string  txt      = (i + 1) + "/" + pageCount;
                float   txtWidth = font.MesureWidth(txt, fontSize);
                int     xPtAbs   = xPt < 0 ? (int)(xPt + page.Width - txtWidth) : xPt;

                StringBuilder sb = new StringBuilder();
                sb.Append("BT ");
                sb.Append(color + " rg ");
                sb.Append(font.CodeName + " " + fontSize + " Tf ");
                sb.Append(xPtAbs + " " + yPt + " Td\n");
                sb.Append("(" + txt + ")Tj\n");
                sb.Append("ET");

                int id = WriteStreamObject(sb);
                page.AddContent(id);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Adds an image.
        /// Encodes in JPEG if the image is already in JPEG and in PNG otherwise.
        /// </summary>
        /// <param name="bitmap">Bitmap</param>
        /// <param name="xPt">X position from the bottom in points</param>
        /// <param name="yPt">Y position from the bottom in points</param>
        /// <param name="widthPt">Width in points</param>
        /// <param name="heightPt">Height in points</param>
        public void WriteBitmap(Bitmap bitmap, int xPt, int yPt, int widthPt, int heightPt)
        {
            int    idImg       = _xRefs.CreateObject();
            int    idImgLength = _xRefs.CreateObject();
            string imgName     = "/I" + idImg;
            bool   isJpeg      = bitmap.RawFormat.Guid == ImageFormat.Jpeg.Guid;
            int    dataLength  = 0;

            _xRefs.RegisterObject(idImg);
            _pdfWriter.WriteLine(idImg + " 0 obj");
            _pdfWriter.WriteLine("<<");
            _pdfWriter.WriteLine("/Type /XObject");
            _pdfWriter.WriteLine("/Subtype /Image");
            _pdfWriter.WriteLine("/ColorSpace /DeviceRGB");
            _pdfWriter.WriteLine("/BitsPerComponent 8");
            if (isJpeg)
            {
                _pdfWriter.WriteLine("/Filter /DCTDecode");
            }
            else
            {
                _pdfWriter.WriteLine("/Filter /FlateDecode");
                _pdfWriter.WriteLine("/DecodeParms <<");
                _pdfWriter.WriteLine(" /Columns " + bitmap.Width);
                _pdfWriter.WriteLine(" /Colors 3");
                _pdfWriter.WriteLine(" /Predictor 15");
                _pdfWriter.WriteLine(">>");
            }
            _pdfWriter.WriteLine("/Name " + imgName);
            _pdfWriter.WriteLine("/Height " + bitmap.Height);
            _pdfWriter.WriteLine("/Width " + bitmap.Width);
            _pdfWriter.WriteLine("/Length " + idImgLength + " 0 R");
            _pdfWriter.WriteLine(">>");
            _pdfWriter.WriteLine("stream");
            _pdfWriter.Flush();
            if (isJpeg)
            {
                dataLength = PdfImage.WriteJPEG(bitmap, _pdfStream);
            }
            else
            {
                dataLength = PdfImage.WritePNG(bitmap, _pdfStream);
            }
            _pdfWriter.WriteLine();
            _pdfWriter.WriteLine("endstream");
            _pdfWriter.WriteLine("endobj");

            //Writes the length object
            _xRefs.RegisterObject(idImgLength);
            _pdfWriter.WriteLine(idImgLength + " 0 obj");
            _pdfWriter.WriteLine(dataLength);
            _pdfWriter.WriteLine("endobj");

            //create image content and borders
            StringBuilder sb = new StringBuilder();

            sb.Append("q ");
            sb.Append(widthPt + " 0 0 " + heightPt + " " + xPt + " " + yPt + " cm ");
            sb.Append(imgName);
            sb.Append(" Do Q\n");
            sb.Append("0.5 w 0.2 G ");
            sb.Append(xPt + " " + yPt + " " + widthPt + " " + heightPt + " re s");
            int idContent = WriteStreamObject(sb);

            //add the created objects to the page
            _currentPage.AddContent(idContent);
            _currentPage.AddXObject(idImg, imgName);
        }