2017-10-17 9 views
0

J'utilise iText7 pour créer des PDF avec Java. J'utilise certaines polices personnalisées, et ces fichiers sont sur le dossier resources.iTextPdf7 - Récupère les polices des ressources

Alors que je teste et l'exécution de l'application sur NetBeans, cela fonctionne parfaitement:

PdfFontFactory.register("./src/main/resources/GOTHAM-BOLD.otf", "gotham-bold"); 
PdfFont gBold = PdfFontFactory.createRegisteredFont("gotham-bold", PdfEncodings.IDENTITY_H); 

Mais quand je construis, et essayez d'exécuter l'application et générer le fichier PDF, iText ne peut pas trouver les fichiers de police , parce qu'il a besoin du path direct. Quelles sont mes alternatives? J'ai vraiment besoin de cela pour travailler dans n'importe quel PC (comme les autres ressources).

Répondre

2

Je ne sais pas exactement pourquoi vous utilisez des alias. Vous pouvez utiliser d'autres méthodes d'usine qui acceptent les tableaux byte[] en combinaison avec Class.getResourceAsStream(String) pour extraire le contenu de la ressource de police qui peut être utilisée pour créer une instance FontProgram, puis construire un PdfFont.

code Vous pouvez modifier comme suit:

// Apache Commons IO is used, but any way of retrieving bytes from stream will suffice 
byte[] fontContents = IOUtils.toByteArray(getClass().getResourceAsStream("GOTHAM-BOLD.otf")); 

FontProgram fontProgram = FontProgramFactory.createFont(fontContents); 
document.setFont(PdfFontFactory.createFont(fontProgram, PdfEncodings.IDENTITY_H)); 

Si vous travaillez dans un contexte statique, vous pouvez l'utiliser comme Main.class.getResourceAsStream() (mettez votre nom de classe au lieu de Main).

Assurez-vous que la ressource de police apparaît dans l'assemblage final et que vous êtes prêt à partir. Il n'y a pas de dépendance sur les URL dans cette approche.

+0

cela a fonctionné seulement pour quand s'exécutant sur NetBeans ... Mais quand exécutant le construit il ne pourrait toujours pas charger la police. Il donne une exception 'pointeur nul '. J'ai confirmé et les polices sont dans le pot y compris toutes les autres ressources (Aussi, je peux les visualiser pendant "workin" - le problème est lors de la génération de fichier PDF) – Anonirato

+0

@Anonirato est invraisemblable à moins que le pot est mal construit. Alexey a simplement proposé l'approche standard pour la tâche à accomplir. – mkl

+0

@Alexey J'ai eu d'autres problèmes non liés à cette question! Votre réponse a parfaitement fonctionné! Je vous remercie! – Anonirato