2015-04-13 1 views
0

Je dois exporter plusieurs milliers de pages html de la base de connaissances vers le fichier pdf. J'utilise la bibliothèque de soucoupes volantes (parce qu'elle sait comment rendre correctement html + css), qui a utilisé itextpdf sous le capot pour la manipulation de pdf.soucoupe volante pdf + itextpdf: comment ajouter du texte à la dernière page d'un fichier pdf existant?

Le problème est que pour l'énorme quantité de documents html, notre serveur échoue avec une erreur OOM. Cela arrive parce que la soucoupe volante rend le contenu avant la création du pdf, et c'est une opération très coûteuse.

Je diviser les pages d'exportation en "buckets", et je les ajoute simplement au fichier résultat (comme suggéré here). Mais le problème est que chaque nouveau "compartiment" commence à partir de la nouvelle page, même s'il y a suffisamment d'espace sur la dernière page du compartiment précédent.

Ainsi, au lieu d'avoir ceci:

Page 
--------------------------- 
| last row of N-1th bucket| 
| first row of Nth bucket | 
|.........................| 
|_________________________| 

J'ai ceci:

Page 
--------------------------- 
| last row of N-1th bucket| 
|       | 
|       | 
|_________________________| 

Page 
--------------------------- 
| first row of Nth bucket | 
|.........................| 
|.........................| 
|_________________________| 

J'ai trouvé fil lié - ITextSharp - merge two pdfs in a single page, mais peut-être il y a un moyen d'ajouter du contenu à la dernière page lors de VFI création?

Toute aide est fortement appréciée. J'ai également essayé de trouver un exemple relatif sur http://itextpdf.com/sandbox, mais sans n'importe quelle chance.

Nous vous remercions à l'avance

+0

Si vous utilisiez [XML Worker] (http://itextpdf.com/product/xml_worker) (qui prend également en charge XHTML + CSS), nous serions en mesure de vous aider, mais vous utilisez Flying Saucer qui est un outil développé par des personnes qui ne sont pas affiliées à iText Group de quelque façon que ce soit, vous devrez donc espérer que ces personnes fournissent un support sur StackOverflow. –

+0

Merci pour votre réponse. J'utilise Flying Saucer b/c il rend html correctement avec des styles spécifiques. C'est la plus haute priorité pour nos clients. Je vais essayer XML Worker et voir comment ça se passe. – Maks

+0

btw comment gère-t-il d'énormes fichiers html avec des milliers de pages? Comme je l'ai mentionné dans ma question, Flying Saucer «restitue» tout le contenu en utilisant différents outils graphiques, puis le «copie» en pdf (bien sûr, c'est un niveau élevé). Ce contexte rendu consomme beaucoup d'espace. Comment fonctionne XML Worker? Ne vais-je pas rencontrer les mêmes problèmes sur un gros fichier (des milliers de pages html)? Ou voulez-vous dire que XML Worker permet juste d'ajouter du contenu à la dernière page? – Maks

Répondre

0

Je résolu problème pour mon cas, l'affichage si la réponse si quelqu'un est intéressé.

Le problème a été résolu en "tweaking" bibliothèque de soucoupe volante - ici le pull request with my changes. Un autre effet secondaire positif est le passage d'un écouteur doc qui permet de suivre la progression réelle du rendu des pages, ce qui peut être utile pour la visualisation des processus de longue durée.