【问题标题】:iTextSharp error document has no page before open itiTextSharp 错误文档在打开之前没有页面
【发布时间】:2014-09-03 09:58:52
【问题描述】:

我有一个问题,我想在我的 pdf 文档中添加页眉和页脚。为此,我曾经使用 PdfPageEventHelper。

我创建了一个类:

    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);
        }
    }

我使用一种方法打开我的文档:

    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;
    }

但是当我尝试执行 myDocument.Open() 时,出现异常“文档没有页面”

你能帮我解决吗?

【问题讨论】:

  • 当我尝试执行 myDocument.Open() 时,我有一个异常“文档没有页面” - 我假设在打开触发退出期间还有一些其他错误using (writer = PdfWriter.GetInstance(myDocument, st)) 的代码尝试关闭文档并失败并显示该消息,因为确实还没有页面。在这种情况下,您最好尝试在失败的行上捕获异常并检查该异常。开场时的实际问题,可能确实是布鲁诺指出的问题。

标签: c# exception itextsharp


【解决方案1】:

您的代码中有两个严重错误:

  1. 如果您阅读文档,您会发现您永远不会OnStartPage() 方法中添加内容。
  2. 如果您阅读文档,您将了解到document 应该用作READ-ONLY 对象。如果是禁止document.Add()。相反,您应该在绝对位置添加页眉和页脚(使用作者的直接内容)。

请丢弃您的代码,在您阅读文档之前 重新开始。部分示例见http://tinyurl.com/itextsharpIIA2C05

【讨论】:

  • 我使用 iTextSharp 打开和修改文档,它的工作,为什么我不能用它来创建页眉和页脚?
  • 这是一个很奇怪的问题。这听起来像是“为什么我不能用叉子吃汤?”或“为什么我不能在收音机上看电视?”当您要打开一个现有文档并在其上标记页眉和页脚时,请使用PdfReaderPdfStamperNOT PdfWriterNOT PdfPageEvents。你读过文档吗? manning.com/lowagie2/samplechapter6.pdf
  • 我不使用现有文档。我创建了一个新文档 pdf,并使用 PdfWriter 将数据放入其中
  • 如果您不使用现有文档,那您为什么要写“我使用 iTextSharp 打开并修改文档”?修改意味着已经有一个文档。另外:为什么你在评论中说“它有效”,但说“你能帮我解决它吗?”在你的问题中。显然有些东西行不通,但你对此很不清楚,显然不愿意听取建议。
  • 它可以在没有 PdfPageEventHelper 的情况下工作,但是为了将页眉和页脚应用于我的 pdf 文档的所有页面,我必须使用它
猜你喜欢
  • 2014-07-27
  • 2012-08-22
  • 2014-07-18
  • 2015-03-18
  • 2012-04-03
  • 2013-10-17
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
相关资源
最近更新 更多