On 03/14/12 11:53, Leonard Rosenthol wrote:
> I would start by doing it manually with Adobe Acrobat and then looking at the
> output PDF in RUPS. Then work backwards to the code...
I was finally able to use Adobe Acrobat to add javascript to one of the
f1040 fields (IIRC, I was unable to do that before because Acrobat
wouldn't let me edit the javascript and *maybe* Acrobat wouldn't
allow that because it was reader enabled or something similar.
I really don't know).
I did look at the rups diagram and it showed a dictionary(the ?'s
signify rups icons of some sort which I can't reproduce in this text):
? /AA: Dictionary
|- ? /Bl: 2035 0 R -> Dictionary
|-? Dictionary
|-? /s:/JavaScript
|-S /JS: this.getField(....)
However, I still can't figure out how to add the /AA: Dictionary.
As I mentioned I tried the attached (which was slightly modified
from the previous one); however, the resulting rups diagram showed
no /AA: Dictionary and running the code produced no errors that
might have helped me diagnose what I might be doing wrong.
Any further suggestions would be appreciated.
-kind regards,
Larry
>
> -----Original Message-----
> From: Larry Evans [mailto:[email protected]]
> Sent: Wednesday, March 14, 2012 12:43 PM
> To: [email protected]
> Subject: Re: [iText-questions] Howto get PdfFormField from AcroFields and
> field name
>
> On 03/04/12 12:43, Larry Evans wrote:
>> On 03/04/12 10:32, Larry Evans wrote:
>> [snip]
>>> However, what I need is to get a PdfFormField from and AcroFields
>>> instance and a field name. I then need to use that PdfFormField to
>>> specify an action for the field.
>>>
>>> The AcroFields class does have a method:
>>>
>>> http://api.itextpdf.com/itext/com/itextpdf/text/pdf/AcroFields.html#g
>>> etFieldItem%28java.lang.String%29
>>>
>>> however, looking at the AcrodFields.Item class shows nothing, AFAICT,
>>> that will produce a PdfFormField which I could then use to set some
>>> action for the field.
>> [snip]
>>
>> A brief look here:
>>
>> http://www.itextpdf.com/examples/iia.php?id=238
>>
>> suggests maybe a way to use AcroFields.Item to set the action for a
>> field.
>>
> Apparently, attaching an action to an f1040.pdf field as not as easy is
> copy/past from that example. With the attached, which is
> AddJavaScriptToForm.java modified to use f1040.pdf as the form to which an
> action is to be added, nothing happens when the "Your first name and initial"
> field is modified.
>
> So, how does one figure out how to add an action to a field on the f1040 form?
>
> TIA.
>
> -Larry
>
>
> ------------------------------------------------------------------------------
> Virtualization & Cloud Management Using Capacity Planning
> Cloud computing makes use of virtualization - but cloud computing
> also focuses on allowing computing to be delivered as a service.
> http://www.accelacomm.com/jaw/sfnl/114/51521223/
> _______________________________________________
> iText-questions mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/itext-questions
>
> iText(R) is a registered trademark of 1T3XT BVBA.
> Many questions posted to this list can (and will) be answered with a
> reference to the iText book: http://www.itextpdf.com/book/
> Please check the keywords list before you ask for examples:
> http://itextpdf.com/themes/keywords.php
>
/*
* ChangeLog:
* @@2012-03-14.1107CST
* WHO: Larry Evans
* WHAT:
* Resorted to trial and error to figure out how to set action for selected TextField
* Made several changes just to avoid getting null pointer exception.
* Achieved that; however, no app.alert window appears when FIELDINP is
* formatted. Hence, the method chosen, which avoided any run-time
* exception, did not achieve desired result of attaching some javascript
* action triggered by formatting event to a field.
* WHY:
* Closer reading of the AddJavaScriptToForm.java file revealed the form
* created had no relationship ot any irs f1040 form; hence, trying to use similar
* code to AddJavaScript to actual f1040 form was foolish.
*
* Also, attempts at using rups to examine the f1040.pdf to get some hint
* at how to get the actions dictionaly failed:
* http://article.gmane.org/gmane.comp.java.lib.itext.general/61335
* Hence, the need for trial and error.
* NEXT:
* Read the itext book more, or some Acrobat User Guide to try and
* infer how to get the action dictionary from an AcroFields.Item instance.
* @@2012-03-12.2212CST
* WHO: Larry Evans
* WHAT:
* Modified to mimic code in Listing 13.16 on page 450 of book.
* WHY:
* Because IRS form was mentioned on previous page, which hints that
* maybe the Listing 13.16 method of attaching actions to a form
* is better suited to IRS forms.
* @@2012-03-05.0500CST
* WHO: Larry Evans
* WHAT:
* Copied from:
* http://examples.itextpdf.com/src/part4/chapter13/ReplaceURL.java
* which was partly contained in Listing 13.15 of the book:
* "iText in Action - 2nd Edition"
* written by Bruno Lowagie (ISBN: 9781935182610)
*/
package part4.chapter13;
import java.io.FileOutputStream;
import java.io.IOException;
import part2.chapter08.ChildFieldEvent;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.GrayColor;
import com.itextpdf.text.pdf.PdfAction;
import com.itextpdf.text.pdf.PdfDictionary;
import com.itextpdf.text.pdf.PdfFormField;
import com.itextpdf.text.pdf.PdfName;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfString;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PushbuttonField;
import com.itextpdf.text.pdf.TextField;
public class F1040AddAction {
/** The input form */
public static final String FORMINP
= "resources/pdfs/f1040.pdf";
/** The resulting manipulating FORMINP. */
public static final String FORMOUT
= "results/part4/chapter13/F1040AddAction.pdf";
/** The input field, first name. */
public static final String FIELDINP
= "topmostSubform[0].Page1[0].p1-t4[0]";
/** The output field, last name. */
public static final String FIELDOUT
= "topmostSubform[0].Page1[0].p1-t5[0]";
/**
* Manipulates a PDF file src with the file dest as result
* @param src the original PDF
* @param dest the resulting PDF
* @throws IOException
* @throws DocumentException
*/
public void manipulatePdf(String src, String dest)
throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
reader.removeUsageRights();
PdfStamper stamper
= new PdfStamper
( reader
, new FileOutputStream(dest)
, '\0'
, true
);
PdfWriter writer = stamper.getWriter();
AcroFields form = reader.getAcroFields();
AcroFields.Item inp_item = form.getFieldItem(FIELDINP);
PdfDictionary widgetRefDict =
(PdfDictionary) PdfReader.getPdfObject( inp_item.getWidgetRef(0));
PdfDictionary actionDict = widgetRefDict.getAsDict(PdfName.AA);
if(actionDict == null) actionDict=new PdfDictionary();
actionDict.put
( PdfName.E
, PdfAction.javaScript
( "app.alert('FIELDINP');}"
, writer
)
);
widgetRefDict.put(PdfName.AA, actionDict);
stamper.close();
}
/**
* Main method.
*
* @param args no arguments needed
* @throws DocumentException
* @throws IOException
*/
public static void main(String[] args)
throws IOException, DocumentException {
F1040AddAction form = new F1040AddAction();
form.manipulatePdf(FORMINP, FORMOUT);
}
}
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions
iText(R) is a registered trademark of 1T3XT BVBA.
Many questions posted to this list can (and will) be answered with a reference
to the iText book: http://www.itextpdf.com/book/
Please check the keywords list before you ask for examples:
http://itextpdf.com/themes/keywords.php