Hi, > Am 29.08.2016 um 11:09 schrieb Davide Zoni <davide.z...@cedacri.it>: > > Hi everybody again, > > i'm trying to figure out if your method is suitable for my necessities but > everytime i try to access the acroForm (even in a pdf file with scripts and > forms) it's null.
could you upload a sample PDF to a public site to take a look at? An interactive PDF form should have an AcroForm entry. BR Maruan > Am i loading the file in a wrong way? Am i missing something? > > Best regards. > > ________________________________________ > Da: Tilman Hausherr [thaush...@t-online.de] > Inviato: mercoledì 24 agosto 2016 18.24 > A: users@pdfbox.apache.org > Oggetto: Re: Check for scripts in a PDF > > Am 24.08.2016 um 15:41 schrieb Davide Zoni: >> Thank you. This might be helpful but i'm afraid that i would not be able to >> check every possibility. There's a way to check if a PDF is static (or >> dynamic)? For our pourpose that shuold be enough. > > No there is no such method. > > Tilman > > >> Best regards. >> >> Davide Zoni >> >> Cedacri S.p.A. >> >> Tel.: 0521807433 >> >> e-mail: davide.z...@cedacri.it >> >> www.cedacri.it >> >> >> ________________________________________ >> Da: Tilman Hausherr [thaush...@t-online.de] >> Inviato: martedì 23 agosto 2016 18.23 >> A: users@pdfbox.apache.org >> Oggetto: Re: Check for scripts in a PDF >> >> Am 23.08.2016 um 09:35 schrieb Davide Zoni: >>> Yes, i'm seeking to detect files with scripts. Not static. I don't >>> undestand what do you mean with "Maybe compare >>> with the preflight source code to check that you didn't miss something", >>> can you elaborate on that? >> I meant to search for "Javascript" in the source code, and then see >> where it is used. This is just so that you can be more sure what you got >> all when you read the PDF specification. >> >> Btw I once wrote some code to show (some) javascript fields, see below >> or search for "Roberto Nibali Javascript". He also improved that code >> and posted the improved version. It may not find all javascript stuff, >> but it could help show you how to write code. >> >> Tilman >> >> >> public class PrintJavaScriptFields >> { >> >> /** >> * This will print all the fields from the document. >> * >> * @param pdfDocument The PDF to get the fields from. >> * >> * @throws IOException If there is an error getting the fields. >> */ >> public void printFields(PDDocument pdfDocument) throws IOException >> { >> PDDocumentCatalog docCatalog = pdfDocument.getDocumentCatalog(); >> PDAcroForm acroForm = docCatalog.getAcroForm(); >> List<PDField> fields = acroForm.getFields(); >> >> //System.out.println(fields.size() + " top-level fields were >> found on the form"); >> >> for (PDField field : fields) >> { >> processField(field, "|--", field.getPartialName()); >> } >> } >> >> private void processField(PDField field, String sLevel, String >> sParent) throws IOException >> { >> String partialName = field.getPartialName(); >> >> if (field instanceof PDTerminalField) >> { >> PDTerminalField termField = (PDTerminalField) field; >> for (PDAnnotationWidget widget : termField.getWidgets()) >> { >> PDAction action = widget.getAction(); >> if (action instanceof PDActionJavaScript) >> { >> System.out.println(field.getFullyQualifiedName() + >> ": " + action.getClass().getSimpleName() + " js widget action:\n" + >> action.getCOSObject()); >> printPossibleJS(action); >> } >> PDAnnotationAdditionalActions actions = >> widget.getActions(); >> if (actions != null) >> { >> System.out.println(field.getFullyQualifiedName() + >> ": " + actions.getClass().getSimpleName() + " js widget actionS:\n" + >> actions.getCOSObject()); >> >> // Merkwürdig, wieso bekomme ich nicht >> PDFormFieldAdditionalActions sondern ein PDAnnotationAdditionalActions >> in dem ein K ist aber kein getK() ? >> PDFormFieldAdditionalActions ffActions = new >> PDFormFieldAdditionalActions((COSDictionary) actions.getCOSObject()); >> printPossibleJS(ffActions.getK()); >> printPossibleJS(ffActions.getC()); >> printPossibleJS(ffActions.getF()); >> printPossibleJS(ffActions.getV()); >> } >> } >> } >> >> if (field instanceof PDNonTerminalField) >> { >> if (!sParent.equals(field.getPartialName())) >> { >> if (partialName != null) >> { >> sParent = sParent + "." + partialName; >> } >> } >> //System.out.println(sLevel + sParent); >> >> for (PDField child : ((PDNonTerminalField) >> field).getChildren()) >> { >> processField(child, "| " + sLevel, sParent); >> } >> } >> else >> { >> String fieldValue = field.getValueAsString(); >> StringBuilder outputString = new StringBuilder(sLevel); >> outputString.append(sParent); >> if (partialName != null) >> { >> outputString.append(".").append(partialName); >> } >> outputString.append(" = ").append(fieldValue); >> outputString.append(", >> type=").append(field.getClass().getName()); >> //System.out.println(outputString); >> } >> } >> >> private void printPossibleJS(PDAction kAction) >> { >> if (kAction instanceof PDActionJavaScript) >> { >> PDActionJavaScript jsAction = (PDActionJavaScript) kAction; >> String jsString = jsAction.getAction(); >> if (!jsString.contains("\n")) >> { >> // Sonst erscheint in Netbeans nichts?! >> jsString = jsString.replaceAll("\r", >> "\n").replaceAll("\n\n", "\n"); >> } >> System.out.println(jsString); >> System.out.println(); >> } >> } >> >> /** >> * This will read a PDF file and print out the form elements. <br /> >> * see usage() for commandline >> * >> * @param args command line arguments >> * >> * @throws IOException If there is an error importing the FDF document. >> */ >> public static void main(String[] args) throws IOException >> { >> PDDocument pdf = null; >> try >> { >> pdf = PDDocument.load(new File(XXXXXX)); >> PrintJavaScriptFields exporter = new PrintJavaScriptFields(); >> exporter.printFields(pdf); >> } >> finally >> { >> if (pdf != null) >> { >> pdf.close(); >> } >> } >> } >> >> } >> >> >> >>> Thank you. >>> >>> Davide >>> >>> ________________________________________ >>> Da: Tilman Hausherr [thaush...@t-online.de] >>> Inviato: martedì 23 agosto 2016 8.34 >>> A: users@pdfbox.apache.org >>> Oggetto: Re: Check for scripts in a PDF >>> >>> Am 22.08.2016 um 15:14 schrieb Davide Zoni: >>>> Hallo everybody, >>>> >>>> i'm using PDFbox to check if a PDF file contains malicious scripts. I'm >>>> using the PDF/A-1a validation to check the file. Since i'm searching only >>>> for potential damaging code and not for a true PDF/A-1a standard >>>> accompliance, is it enough to consider 1.x.x, 6.x.x and 7.x.x errors as >>>> "true" errors? Below category description: >>>> >>>> Category Description >>>> 1[.y[.z]] Syntax Error >>>> 2[.y[.z]] Graphic Error >>>> 3[.y[.z]] Font Error >>>> 4[.y[.z]] Transparency Error >>>> 5[.y[.z]] Annotation Error >>>> 6[.y[.z]] Action Error >>>> 7[.y[.z]] Metadata Error >>> Unclear what you're asking. Are you seeking to detect files with >>> javascript? If so, I'd rather build something something from scratch, >>> i.e. read the PDF specification and see where JS is used. Maybe compare >>> with the preflight source code to check that you didn't miss something. >>> >>> Tilman >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org >>> For additional commands, e-mail: users-h...@pdfbox.apache.org >>> >>> Il contenuto e le informazioni di questo messaggio di posta elettronica >>> sono riservate, confidenziali e non vincolanti nè impegnative per Cedacri >>> s.p.a., ne è vietata pertanto la diffusione o divulgazione in qualunque >>> modo eseguita. Qualora Lei non fosse la persona a cui il presente messaggio >>> è destinato La invitiamo ad eliminarlo e a non leggerlo, dandocene >>> gentilmente comunicazione. The content, informations and any attachments of >>> this e-mail are classified, confidential and not binding neither >>> impegnative for Cedacri S.P.A., the spread or spreading in any executed way >>> is prohibited therefore. If you are not named recipient, please notify the >>> sender immediately and do not disclose the contents to another person, use >>> it for any purpose, or store or copy the information in any medium. >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org >>> For additional commands, e-mail: users-h...@pdfbox.apache.org >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org >> For additional commands, e-mail: users-h...@pdfbox.apache.org >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org >> For additional commands, e-mail: users-h...@pdfbox.apache.org >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org > For additional commands, e-mail: users-h...@pdfbox.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org > For additional commands, e-mail: users-h...@pdfbox.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org For additional commands, e-mail: users-h...@pdfbox.apache.org