2017-02-20 1 views
1

J'utilise Apache pdfbox pour le traitement de fichiers PDF.Mise en cache PDFBox dans AWS Lambda

Exécution locale fonctionne très bien, où j'obtiens l'erreur est sur l'exécution du code sur AWS Lambda. Cela a du sens car pdfbox essaie de mettre à jour le cache des polices, ce qui n'est pas possible sur Lambda.

-je obtenir le massage d'erreur suivant:

Feb 20, 2017 3:22:19 PM org.apache.pdfbox.pdmodel.font.FileSystemFontProvider loadDiskCache 
WARNING: New fonts found, font cache will be re-built 
Feb 20, 2017 3:22:19 PM org.apache.pdfbox.pdmodel.font.FileSystemFontProvider <init> 
WARNING: Building on-disk font cache, this may take a while 
Feb 20, 2017 3:22:20 PM org.apache.pdfbox.pdmodel.font.FileSystemFontProvider saveDiskCache 
SEVERE: Could not write to font cache 

java.io.FileNotFoundException: /home/sbx_user1063/.pdfbox.cache (No such file or directory) 
at java.io.FileOutputStream.open0(Native Method) 
at java.io.FileOutputStream.open(FileOutputStream.java:270) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:213) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:162) 
at java.io.FileWriter.<init>(FileWriter.java:90) 
at org.apache.pdfbox.pdmodel.font.FileSystemFontProvider.saveDiskCache(FileSystemFontProvider.java:290) 
at org.apache.pdfbox.pdmodel.font.FileSystemFontProvider.<init>(FileSystemFontProvider.java:226) 
at org.apache.pdfbox.pdmodel.font.FontMapperImpl$DefaultFontProvider.<clinit>(FontMapperImpl.java:130) 
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.getProvider(FontMapperImpl.java:149) 
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.findFont(FontMapperImpl.java:413) 
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.findFontBoxFont(FontMapperImpl.java:376) 
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.getFontBoxFont(FontMapperImpl.java:350) 
at org.apache.pdfbox.pdmodel.font.PDType1Font.<init>(PDType1Font.java:145) 
at org.apache.pdfbox.pdmodel.font.PDType1Font.<clinit>(PDType1Font.java:79) 
at org.apache.pdfbox.pdmodel.font.PDFontFactory.createFont(PDFontFactory.java:62) 
at org.apache.pdfbox.pdmodel.PDResources.getFont(PDResources.java:143) 
at org.apache.pdfbox.contentstream.operator.text.SetFontAndSize.process(SetFontAndSize.java:60) 
at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:829) 
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:486) 
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:460) 
at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:150) 
at org.apache.pdfbox.text.LegacyPDFStreamEngine.processPage(LegacyPDFStreamEngine.java:139) 
at org.apache.pdfbox.text.PDFTextStripper.processPage(PDFTextStripper.java:391) 
at org.apache.pdfbox.text.PDFTextStripper.processPages(PDFTextStripper.java:319) 
at org.apache.pdfbox.text.PDFTextStripper.writeText(PDFTextStripper.java:266) 
at org.apache.pdfbox.text.PDFTextStripper.getText(PDFTextStripper.java:227) 
at de.scdm.panther.ParsePdf.handleRequest(ParsePdf.java:59) 
at de.scdm.panther.ParsePdf.handleRequest(ParsePdf.java:22) 
at lambdainternal.EventHandlerLoader$PojoHandlerAsStreamHandler.handleRequest(EventHandlerLoader.java:375) 
at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:1139) 
at lambdainternal.AWSLambda$2.call(AWSLambda.java:94) 
at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:285) 
at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:57) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:348) 
at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:94) 

Feb 20, 2017 3:22:20 PM org.apache.pdfbox.pdmodel.font.FileSystemFontProvider <init> 
WARNING: Finished building on-disk font cache, found 52 fonts 

Comment puis-je désactiver la mise à jour du cache de la police? Est-ce que quelqu'un a rencontré un problème similaire?

Merci!

+0

Vous ne pouvez pas le désactiver, mais le message est inoffensif, c'est-à-dire qu'il n'arrêtera pas votre travail. Vous pouvez définir la propriété "pdfbox.fontcache" sur un répertoire dans lequel vous pouvez écrire, par ex./tmp. https://docs.aws.amazon.com/lambda/latest/dg/limits.html cela aide-t-il? –

+0

Salut Tilman, merci pour le conseil. Après avoir changé le répertoire en/tmp, il ne lance plus le message d'erreur! Merci – Max

Répondre

1

Vous ne pouvez pas le désactiver, mais le message est inoffensif, c'est-à-dire qu'il n'arrêtera pas votre travail, mais la prochaine exécution ne sera pas plus rapide car vos polices seront à nouveau examinées.

Vous pouvez définir la propriété "pdfbox.fontcache" sur un répertoire dans lequel vous pouvez écrire, par ex./tmp, ce should exist sur AWS Lambda. PDFBox examine d'abord la propriété "pdfbox.fontcache", si celle-ci n'est pas définie, elle regarde la propriété "user.home" (c'est ce qui est arrivé sur votre système), si celle-ci n'est pas set il regardera la propriété "java.io.tmpdir" pour sélectionner un répertoire pour écrire le cache de police.