简体   繁体   中英

iTextSharp error document has no page before open it

I've a problem, i want to add an header and a footer into me pdf document. For that, i used to PdfPageEventHelper.

i've created a class :

    public class PDFFooter : PdfPageEventHelper
    {
        // write on top of document
        public override void OnOpenDocument(PdfWriter writer, Document document)
        {
            base.OnOpenDocument(writer, document);
        }

        // write on start of each page
        public override void OnStartPage(PdfWriter writer, Document document)
        {
            base.OnStartPage(writer, document);
            EnTeteDePage(document);
        }

        // write on end of each page
        public override void OnEndPage(PdfWriter writer, Document document)
        {
            base.OnEndPage(writer, document);
            PiedDePage(document);
        }

        //write on close of document
        public override void OnCloseDocument(PdfWriter writer, Document document)
        {
            base.OnCloseDocument(writer, document);
        }

        private void EnTeteDePage(Document document)
        {
            Controleur.ControleurParametre CP = new ControleurParametre();
            T_PARAMETRE _param = CP.Charger();
            T_ADRESSE _adresseParam = CP.ChargerAdresse(_param.ID_ADRESSE_SOCIETE);
            iTextSharp.text.Image img = (_param.PATH_LOGO_SOCIETE != "" && _param.PATH_LOGO_SOCIETE != null) ? iTextSharp.text.Image.GetInstance(_param.PATH_LOGO_SOCIETE) : null;
            if (img != null)
            {
                if (img.Width / 150 > img.Height / 150) img.ScalePercent((img.Width / 150) * 100);
                else img.ScalePercent((img.Height / 150) * 100);
                document.Add(img);
            }
            PdfPTable head = new PdfPTable(6);
            PdfPCell cell1 = new PdfPCell(img);
            PdfPCell cell2 = new PdfPCell(new Phrase("Rapport de réception de chantier \n" + _param.NOM_SOCIETE + " - " +
                _adresseParam.ADDR_VOIE + " - " +
                _adresseParam.ADDR_VOIE_BIS + "\n" +
                _adresseParam.ADDR_CP + " - " +
                _adresseParam.ADDR_VILLE + "\n"));
            float[] wid = new float[] { 0.1f, 0.9f };
            head.SetWidths(wid);
            cell1.HorizontalAlignment = 1;
            cell2.HorizontalAlignment = 1;
            head.AddCell(cell1);
            head.AddCell(cell2);
            document.Add(head);
        }
        private void PiedDePage(Document document)
        {
            Paragraph Footer = new Paragraph();

            document.Add(Footer);
        }
    }

i use a method to open my document :

    private async Task<bool> ouvrirPDF(iTextSharp.text.Rectangle re)
    {
        str = await f.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
        st = str.AsStreamForWrite();
        using (myDocument = new Document(re)) //Création du PDF
        {
            using (writer = PdfWriter.GetInstance(myDocument, st))
            {
                PDFFooter foot = new PDFFooter();
                writer.PageEvent = foot;
                myDocument.Open(); //Ouverture du PDF
                cb = writer.DirectContent;
            }
        }
        return true;
    }

But when i try to do myDocument.Open(), i have an exception "The document has no page"

Can you help me to resolve it ?

There are two serious errors in your code:

  1. If you read the documentation, you will learn that you never ever should add content in the OnStartPage() method.
  2. If you read the documentation, you will learn that the document should be used as a READ-ONLY object. If is forbidden to do document.Add() . Instead you should add your header and footer at absolute positions (using the direct content of the writer).

Please throw away your code and don't start anew until after you've read the documentation. For some examples, see http://tinyurl.com/itextsharpIIA2C05

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM