2009-11-13 6 views
1

iTextSharp vraiment, n'aime vraiment pas quand je tente de créer des polices:iTextSharp tombe en panne avec un StackOverflowException lors de l'obtention d'une police

FontFactory.GetFont(Font.HELVETICA, 12) 

Cela me donne un outil convivial StackOverflowException. Donc j'ai essayé ceci:

new Font(Font.HELVETICA, 12) 

qui fait la même chose. Je ai essayé Font.TIMES, et a obtenu la même chose, aussi. J'ai donc essayé laisser tomber un peu plus bas sur la base this answer, ce qui suggère ce qui suit:

BaseFont bf = BaseFont.CreateFont(
      HttpContext.Current.Server.MapPath("/path/to/times.ttf"), 
      BaseFont.IDENTITY_H, 
      BaseFont.EMBEDDED); 
new Font(bf, 12); 

Encore une fois, StackOverflowException. Bien que la cohérence soit bonne, je préférerais que la bibliothèque me laisse choisir une police.

Je suis sûr que j'ai juste une mauvaise configuration quelque part; mais il m'échappe quant à ce que cela pourrait être.

Répondre

1

J'ai trouvé cet article sur nabble qui suggère de créer la police sur un fil séparé afin que vous ayez une pile plus grande à traiter.

FTA

Thread smartCopyThread = new Thread(new ThreadStart(RunSmartCopy), 
0x800000); 
smartCopyThread.Start(); 
smartCopyThread.Join(); 

Ici, RunSmartCopy ferait le travail que vous décrivez.

+0

J'ai trouvé ce lien, aussi, et tout ce qu'il accomplit, c'est que le crash se produit dans un autre thread. Ce n'est pas un petit confort - cela évite la boîte de dialogue modale qui apparaît sur le serveur dans le cas de crash-on-main-thread - mais ce n'est pas propice à la création du PDF réel. – TALlama

Questions connexes