iTextSharp “Le document n'a pas de pages.” erreur

Je suis de la création d'un fichier pdf, avec un image. Je suis de l'image, d'abord l'enregistrer dans le serveur, après la création d'un iTextSharp image avec elle;

iTextSharp.text.Image backgroundImage = iTextSharp.text.Image.GetInstance(path);

Sur cette ligne, j'obtiens une erreur "Le document n'a pas de pages."

Ici est la StackTrace:

   location: iTextSharp.text.pdf.PdfPages.WritePageTree()
   location: iTextSharp.text.pdf.PdfWriter.Close()
   location: iTextSharp.text.pdf.PdfDocument.Close()
   location: iTextSharp.text.pdf.PdfWriter.Close()
   location: iTextSharp.text.DocWriter.Dispose()
   location: MyProject.Helpers.FileUploadHelper.SaveMarathonCertificateTemplate(HttpRequestBase Request, String _fileName, CertificateOrientation orientation) c:\MyProject\Helpers\FileUploadHelper.cs : line 68
   location: MyProject.Controllers.CertificateController.Add(Int32 marathonId, MarathonCertificate marathonCertificate) c:\MyProject\Controllers\CertificateController.cs: line 74

Hier, le code fonctionne bien, mais bizarrement aujourd'hui je reçois ce message d'erreur. Voici mon code:

using (var fs = new FileStream(pdfFileName, FileMode.Create))
{
    using (var pdfDoc = new iTextSharp.text.Document())
    {
        if (orientation == CertificateOrientation.HORIZONTAL)
            pdfDoc.SetPageSize(PageSize.A4.Rotate());
        using (var w = PdfWriter.GetInstance(pdfDoc, fs))
        {
            pdfDoc.Open();
            pdfDoc.NewPage(); //add Page here

            iTextSharp.text.Image backgroundImage = iTextSharp.text.Image.GetInstance(path);

            if (orientation == CertificateOrientation.HORIZONTAL)
            {
                backgroundImage.ScaleAbsoluteWidth(Config.PdfActualSizeHorizontal[0]);
                backgroundImage.ScaleAbsoluteHeight(Config.PdfActualSizeHorizontal[1]);
            }
            else if (orientation == CertificateOrientation.VERTICAL)
            {
                backgroundImage.ScaleAbsoluteWidth(Config.PdfActualSizeVertical[0]);
                backgroundImage.ScaleAbsoluteHeight(Config.PdfActualSizeVertical[1]);
            }
            backgroundImage.SetAbsolutePosition(0, 0);
            pdfDoc.Add(backgroundImage);

            pdfDoc.Close();
        }
    }
}

Je ne peux pas eu le problème. Est-il une solution?

EDIT:

J'ai ajouté une ligne avant d'obtenir l'Image de l'instance

pdfDoc.Add(new Paragraph(" "));

Après que l'erreur devient à présent:

Système.ObjectDisposedException a été capturé Message=Impossible d'accéder à un
fichier fermé.

Nouveau StackTrace:

location: System.IO.__Error.FileNotOpen()
location: System.IO.FileStream.Write(Byte[] array, Int32 offset, Int32 count)
location: iTextSharp.text.pdf.OutputStreamCounter.Write(Byte[] buffer, Int32 offset, Int32 count)
location: iTextSharp.text.pdf.PdfIndirectObject.WriteTo(Stream os)
location: iTextSharp.text.pdf.PdfWriter.PdfBody.Write(PdfIndirectObject indirect, Int32 refNumber, Int32 generation)
location: iTextSharp.text.pdf.PdfWriter.PdfBody.Add(PdfObject objecta, Int32 refNumber, Int32 generation, Boolean inObjStm)
location: iTextSharp.text.pdf.PdfWriter.PdfBody.Add(PdfObject objecta, PdfIndirectReference refa, Boolean inObjStm)
location: iTextSharp.text.pdf.PdfWriter.PdfBody.Add(PdfObject objecta, PdfIndirectReference refa)
location: iTextSharp.text.pdf.PdfWriter.AddToBody(PdfObject objecta, PdfIndirectReference refa)
location: iTextSharp.text.pdf.Type1Font.WriteFont(PdfWriter writer, PdfIndirectReference piref, Object[] parms)
location: iTextSharp.text.pdf.FontDetails.WriteFont(PdfWriter writer)
location: iTextSharp.text.pdf.PdfWriter.AddSharedObjectsToBody()
location: iTextSharp.text.pdf.PdfWriter.Close()
location: iTextSharp.text.DocWriter.Dispose()
location: MyProject.Helpers.FileUploadHelper.SaveMarathonCertificateTemplate(HttpRequestBase Request, String _fileName, CertificateOrientation orientation) c:\MyProject\Helpers\FileUploadHelper.cs: line 70
location: MyProject.Controllers.CertificateController.Add(Int32 marathonId, MarathonCertificate marathonCertificate) c:\MyProject\Controllers\CertificateController.cs: line 74
  • L'erreur que vous voyez est simplement un effet secondaire de l'erreur d'origine: quelque Chose se passe mal lors de iTextSharp.text.Image.GetInstance(path), d'où une exception est levée. Il n'est pas pris; ainsi, à la clôture de l' using paramètre se produit. Comme rien n'a encore été ajoutée au document, cette dernière échoue et que vous ne voyez que l'exception de ce qui.
  • J'ai juste modifié la question. Pouvez-vous regarder à nouveau?
  • Le plus profond using est faux. Cela provoque la PdfWriter être fermée d'abord et ensuite, seulement, la Document. Mais le dernier cours de clôture nécessite la PdfWriter à être encore en suspens. Si vous regardez la iTextSharp échantillons à l'aide d'un explicite PdfWriter (par exemple, HelloWorldDirect.cs, vous verrez que le PdfWriter est pas créée dans un using clause.
  • Je ne suis pas en mesure d'obtenir le posté code pour lever cette exception, est il y a plus de code que vous n'avez pas posté? Par exemple, avez-vous des try/catch que comme @mkl dit est peut-être avaler d'autres erreurs?
  • Les plus susceptibles de l'OP a un problème dans iTextSharp.text.Image.GetInstance(path) (Mauvais chemin? Pas d'autorisations suffisantes?) lui faisant produire vide fichiers Pdf qui lève des exceptions cacher le problème réel. Et dans ce contexte, le inappropriée using est effectivement un problème. Sans l'exception de l'élimination de la ligne pdfDoc.Close(); est atteint et déjà correctement se ferme tout.
  • C'est pourquoi j'ai demandé sur le try/catch. Je peux obtenir GetInstance() à jeter un tas d'exceptions si je le passe des valeurs que je connais sont mauvais
  • Que votre question a été repoussé à la page d'accueil par la Communauté♦, êtes-vous toujours intéressé à résoudre ce problème? Alors s'il vous plaît répondre aux derniers commentaires. Sinon, envisager de répondre à la question vous-même (si vous finalement résolu le problème) ou de supprimer la question.
  • Comme votre question a de nouveau été repoussé à la page d'accueil par la Communauté♦, êtes-vous toujours intéressé à résoudre ce problème? Alors s'il vous plaît répondre aux derniers commentaires. Sinon, envisager de répondre à la question vous-même (si vous finalement résolu le problème) ou de supprimer la question.