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 laPdfWriter
être fermée d'abord et ensuite, seulement, laDocument
. Mais le dernier cours de clôture nécessite laPdfWriter
à être encore en suspens. Si vous regardez la iTextSharp échantillons à l'aide d'un explicitePdfWriter
(par exemple, HelloWorldDirect.cs, vous verrez que lePdfWriter
est pas créée dans unusing
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éeusing
est effectivement un problème. Sans l'exception de l'élimination de la lignepdfDoc.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.
Vous devez vous connecter pour publier un commentaire.
Essayez celui-ci:
C'est tout.
using
est inappropriée, la sur-utilisation.