zoukankan      html  css  js  c++  java
  • 新版 itextsharp pdf code

    using System;
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.IO;
    namespace iTextSharp.Demo
    {
    /**//// <summary>
    /// Making a document with a header containing 'page x of y' and with a watermark on every page.
    /// </summary>
        public class PageNumbersWatermark : IPdfPageEvent
    {
    /**//** An Image that goes in the header. */
    public Image headerImage;
    /**//** The headertable. */
    public PdfPTable table;
    /**//** The Graphic state */
    public PdfGState gstate;
    /**//** A template that will hold the total number of pages. */
    public PdfTemplate tpl;
    /**//** The font that will be used. */
    public BaseFont helv;
    public PageNumbersWatermark()
    {
    try
    {
    // step 1: creating the document
                    Document doc = new Document(PageSize.A4, 50, 50, 100, 72);
    // step 2: creating the writer
    
    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream("pageNumbersWatermark.pdf",FileMode.Create));
    // step 3: initialisations + opening the document
                    writer.PageEvent =new PageNumbersWatermark();
    doc.Open();
    // step 4: adding content
                    string text = "some padding text ";
    for (int k = 0; k < 10; ++k)
    text += text;
    Paragraph p = new Paragraph(text);
    p.Alignment=(Element.ALIGN_JUSTIFIED);
    doc.Add(p);
    // step 5: closing the document
                    doc.Close();
    }
    catch ( Exception e )
    {
    System.Diagnostics.Debug.WriteLine(e.StackTrace);
    }
    }
    IPdfPageEvent Members#region IPdfPageEvent Members
    public void OnOpenDocument(PdfWriter writer, Document document)
    {
    try
    {
    // initialization of the header table
                    headerImage = Image.GetInstance("logo.gif");
    table = new PdfPTable(2);
    Phrase p = new Phrase();
    Chunk ck = new Chunk("lowagie.com
    ", new Font(Font.TIMES_ROMAN, 16, Font.BOLDITALIC, Color.BLUE));
    p.Add(ck);
    ck = new Chunk("Ghent
    Belgium", new Font(Font.HELVETICA, 12, Font.NORMAL, Color.DARK_GRAY));
    p.Add(ck);
    table.DefaultCell.BackgroundColor=(Color.YELLOW);
    table.DefaultCell.BorderWidth=(0);
    table.AddCell(p);
    table.DefaultCell.HorizontalAlignment=(Element.ALIGN_RIGHT);
    table.AddCell(new Phrase(new Chunk(headerImage, 0, 0)));
    // initialization of the Graphic State
                    gstate = new PdfGState();
    gstate.FillOpacity=(0.3f);
    gstate.StrokeOpacity=(0.3f);
    // initialization of the template
                    tpl = writer.DirectContent.CreateTemplate(100, 100);
    tpl.BoundingBox=(new Rectangle(-20, -20, 100, 100));
    // initialization of the font
                    helv = BaseFont.CreateFont("Helvetica", BaseFont.WINANSI, false);
    }
    catch(Exception e)
    {
    throw e;
    }
    }
    public void OnCloseDocument(PdfWriter writer, Document document)
    {
    tpl.BeginText();
    tpl.SetFontAndSize(helv, 12);
    tpl.SetTextMatrix(0, 0);
    tpl.ShowText("" + (writer.PageNumber - 1));
    tpl.EndText();
    }
    public void OnParagraph(PdfWriter writer, Document document, float paragraphPosition)
    {
    // TODO:  Add PageNumbersWatermark.OnParagraph implementation
            }
    public void OnEndPage(PdfWriter writer, Document document)
    {
    PdfContentByte cb = writer.DirectContent;
    cb.SaveState();
    // write the headertable
                table.TotalWidth=(document.Right - document.Left);
    table.WriteSelectedRows(0, -1, document.Left, document.PageSize.Height - 50, cb);
    // compose the footer
                String text = "Page " + writer.PageNumber + " of ";
    float textSize = helv.GetWidthPoint(text, 12);
    float textBase = document.Bottom - 20;
    cb.BeginText();
    cb.SetFontAndSize(helv, 12);
    // for odd pagenumbers, show the footer at the left
                if ((writer.PageNumber & 1) == 1)
    {
    cb.SetTextMatrix(document.Left, textBase);
    cb.ShowText(text);
    cb.EndText();
    cb.AddTemplate(tpl, document.Left + textSize, textBase);
    }
    // for even numbers, show the footer at the right
                else
    {
    float adjust = helv.GetWidthPoint("0", 12);
    cb.SetTextMatrix(document.Right - textSize - adjust, textBase);
    cb.ShowText(text);
    cb.EndText();
    cb.AddTemplate(tpl, document.Right - adjust, textBase);
    }
    cb.SaveState();
    // draw a Rectangle around the page
                cb.SetColorStroke(Color.ORANGE);
    cb.SetLineWidth(2);
    cb.Rectangle(20, 20, document.PageSize.Width - 40, document.PageSize.Height - 40);
    cb.Stroke();
    cb.RestoreState();
    // starting on page 3, a watermark with an Image that is made transparent
                if (writer.PageNumber >= 3)
    {
    cb.SetGState(gstate);
    cb.SetColorFill(Color.RED);
    cb.BeginText();
    cb.SetFontAndSize(helv, 48);
    cb.ShowTextAligned(Element.ALIGN_CENTER, "Watermark Opacity " + writer.PageNumber, document.PageSize.Width / 2, document.PageSize.Height / 2, 45);
    cb.EndText();
    try
    {
    cb.AddImage(headerImage, headerImage.Width, 0, 0, headerImage.Height, 440, 80);
    }
    catch(Exception e)
    {
    throw e;
    }
    cb.RestoreState();
    }
    }
    public void OnSection(PdfWriter writer, Document document, float paragraphPosition, int depth, Paragraph title)
    {
    // TODO:  Add PageNumbersWatermark.OnSection implementation
            }
    public void OnSectionEnd(PdfWriter writer, Document document, float paragraphPosition)
    {
    // TODO:  Add PageNumbersWatermark.OnSectionEnd implementation
            }
    public void OnParagraphEnd(PdfWriter writer, Document document, float paragraphPosition)
    {
    // TODO:  Add PageNumbersWatermark.OnParagraphEnd implementation
            }
    public void OnGenericTag(PdfWriter writer, Document document, Rectangle rect, string text)
    {
    // TODO:  Add PageNumbersWatermark.OnGenericTag implementation
            }
    public void OnChapterEnd(PdfWriter writer, Document document, float paragraphPosition)
    {
    // TODO:  Add PageNumbersWatermark.OnChapterEnd implementation
            }
    public void OnChapter(PdfWriter writer, Document document, float paragraphPosition, Paragraph title)
    {
    // TODO:  Add PageNumbersWatermark.OnChapter implementation
            }
    public void OnStartPage(PdfWriter writer, Document document)
    {
    if (writer.PageNumber < 3)
    {
    PdfContentByte cb = writer.DirectContentUnder;
    cb.SaveState();
    cb.SetColorFill(Color.PINK);
    cb.BeginText();
    cb.SetFontAndSize(helv, 48);
    cb.ShowTextAligned(Element.ALIGN_CENTER, "My Watermark Under " + writer.PageNumber, document.PageSize.Width / 2, document.PageSize.Height / 2, 45);
    cb.EndText();
    cb.RestoreState();
    }
    }
    #endregion
    }
    }
  • 相关阅读:
    14、迭代器协议、生成器、装饰器
    13、文件处理
    12、内置函数
    11、函数(def)
    10、基本数据类型(set)
    9、循环语句
    8、基本数据类型(dict)
    7、基本数据类型(tuple)
    6、基本数据类型(list)
    5、基本数据类型(str)
  • 原文地址:https://www.cnblogs.com/xuzai/p/4346852.html
Copyright © 2011-2022 走看看