pdf-generation generate - Existe-t-il des alternatives de création Java PDF à iText?



library template (8)

C'est peut-être un peu tard pour vous, Mike C. Mais si d'autres ont des exigences très simples et des exigences de redistribution, cela vaut la peine de les partager. L'édition Docmosis Community peut être librement redistribuée et produire des documents très volumineux avec une empreinte mémoire constante (traitement par flux). Vous (ou vos clients, puisque vous impliquez la redistribution) devrait être prêt à installer OpenOffice quelque part pour permettre la conversion.

J'essaie de rendre environ 100 000 à 80 enregistrements de colonne via FOP et cela se répète à peu près chaque fois (OutOfMemoryException). Je sais que iText pourrait gérer ce type de charge mais je ne peux pas l'utiliser à cause de la licence LGPL. Existe-t-il des librairies Java alternatives à iText capables de gérer le rendu d’un grand volume de données au format PDF?


Avez-vous essayé d'augmenter la quantité de tas disponible pour la JVM? OUtOfMemory lors du traitement de grandes quantités de données nécessite généralement plus de mémoire.



Qoppa et Crionics proposent tous deux des outils commerciaux pour créer des fichiers PDF.


Jetez un oeil à RenderX pour une alternative à la FOP.

Cela coûte de l'argent, mais si vous avez une solution existante en place, cela pourrait être le moins cher.


Aspose propose un composant PDF pour Java . Aspose est également utilisé pour créer des documents Word, Excel, PowerPoint ... en Java (ou .Net).

Cependant, ce n'est pas un logiciel libre ...



Je peux copier ma réponse à partir d’ici: Le moyen le plus simple de provoquer une fuite de mémoire en Java?

"En informatique, une fuite de mémoire (ou une fuite, dans ce contexte) se produit lorsqu'un programme informatique consomme de la mémoire mais ne peut pas la restituer au système d'exploitation." (Wikipédia)

La réponse facile est: tu ne peux pas. Java gère automatiquement la mémoire et libère des ressources inutiles. Vous ne pouvez pas empêcher cela de se produire. Il sera TOUJOURS capable de libérer les ressources. Dans les programmes avec gestion manuelle de la mémoire, cela est différent. Vous pouvez obtenir de la mémoire en C en utilisant malloc (). Pour libérer la mémoire, vous avez besoin du pointeur renvoyé par malloc et appelez free () dessus. Mais si vous n'avez plus le pointeur (écrasé, ou la durée de vie dépassée), alors vous êtes malheureusement incapable de libérer cette mémoire et vous avez donc une fuite de mémoire.

Toutes les autres réponses à ce jour sont dans ma définition pas vraiment des fuites de mémoire. Ils visent tous à remplir la mémoire avec des trucs inutiles très rapidement. Mais à tout moment, vous pouvez toujours déréférencer les objets que vous avez créés et libérer ainsi la mémoire -> AUCUNE FUITE. La réponse de acconrad est assez proche cependant, comme je dois l'admettre, car sa solution consiste simplement à "écraser" le ramasse-miettes en le forçant dans une boucle sans fin).

La réponse longue est: Vous pouvez obtenir une fuite de mémoire en écrivant une bibliothèque pour Java à l'aide de JNI, qui peut gérer manuellement la mémoire et avoir ainsi des fuites de mémoire. Si vous appelez cette bibliothèque, votre processus Java perdra de la mémoire. Ou bien, vous pouvez avoir des bogues dans la machine virtuelle Java, de sorte que celle-ci perde de la mémoire. Il y a probablement des bogues dans la machine virtuelle, voire même des problèmes connus, car la récupération de place n'est pas si simple, mais c'est quand même un bogue. Par conception, ce n'est pas possible. Vous demandez peut-être du code Java affecté par un tel bogue. Désolé, je n'en connais pas et il est possible que ce ne soit plus un bogue dans la prochaine version de Java.





java pdf pdf-generation itext