Developer Tools
|
Office Productivity Applications
|
Platform-Agnostic APIs
|
Home | Online Demos | Downloads | Buy Now | Support | About Us | News | Working Together | Contact Us
Custom appearances for PDF form fields can be created in almost the same way we created custom appearances for PDF annotations in our September Newsletter article.
Gnostice PDFOne Java makes use of appearance streams to define a custom appearance for a form field and thus giving it a uniform appearance on any viewer that supports Form XObjects rendering.
In this article, you will learn about the use of com.gnostice.pdfone.PdfAppearanceStream
class to create custom form field appearances for the push button form field type.
Please note that in the previous article, we used images for the appearance streams while in this article we will be using generic shapes.
First, two PdfFormPushButton
objects are created and are then added to a PdfPage
object.
Standard appearances for the PdfFormPushButton
objects are created using setBackgroundColor(Color backgroundColor)
and setBorderColor(Color borderColor)
methods of PdfFormPushButton
.
private static void formFieldSimpleAppearanceDemo() throws IOException, PdfException { PdfDocument doc = new PdfDocument(); PdfFont font = PdfFont.create("Helvetica", 10, PdfEncodings.WINANSI); font.setColor(Color.BLACK); PdfPage page; page = new PdfPage(PdfPageSize.A4); page.setMeasurementUnit(PdfMeasurement.MU_INCHES); // X-y coordinates of the PdfFormPushButton int xPos = 1; // One inch int yPos = 1; // One inch // Dimensions for the PdfFormPushButton double buttonWidth = 1.5; // One inch double buttonHeight = 0.5; // Half inch // Creates an object for PdfFormPushButton // with coordinates created above PdfFormPushButton jsButton = new PdfFormPushButton(new PdfRect(xPos, yPos, buttonWidth, buttonHeight)); // Set JavaScript action to the PdfFormPushButton jsButton.addAction(PdfAction.JAVASCRIPT, PdfEvent.ON_MOUSE_DOWN, "app.alert('Gnostice PDFOne on Mouse Down')"); // Set the properties for the PdfFormPushButton jsButton.setBackgroundColor(Color.LIGHT_GRAY); jsButton.setBorderColor(Color.DARK_GRAY); jsButton.setName("button1"); jsButton.setNormalCaption("JavaScript-NormalAP"); jsButton.setRolloverCaption("JavaScript-RolloverAP"); jsButton.setDownCaption("Down"); jsButton.setFont(font); // X-Y coordinates for the second PdfFormPushButton xPos = 1; // One inch yPos = 2; // One inch // Creates the second PdfFormPushButton object // with coordinates created above PdfFormPushButton submitButton = new PdfFormPushButton(new PdfRect(xPos, yPos, buttonWidth, buttonHeight)); // Set submit action to the PdfFormPushButton submitButton.addAction(PdfAction.URI, PdfEvent.ON_MOUSE_DOWN, "http://www.gnostice.com"); // Set properties for the PdfFormPushButton submitButton.setBackgroundColor(Color.LIGHT_GRAY); submitButton.setBorderColor(Color.DARK_GRAY); submitButton.setName("button2"); submitButton.setNormalCaption("Submit-NormalAP"); submitButton.setRolloverCaption("Submit-RolloverAP"); submitButton.setDownCaption("Down"); submitButton.setFont(font); // Add JS button to the page page.addFormField(jsButton); // Add the submit button to the page page.addFormField(submitButton); // Add the page to document doc.add(page); doc.save("FormfieldSimpleAppearanceDemo.pdf"); doc.close(); }
First, custom appearances for both normal mode and rollover mode are created for the two push buttons.
After that, two PdfFormPushButton
objects are created.
The custom appearances are then added to these PdfFormPushButton
objects.
Please note that even when appearances for normal, rollover and down modes for two or more form fields are the same, you should instantiate individual appearance streams for them.
private static void formFieldCustomAppearanceShapeDemo() throws IOException, PdfException { PdfDocument doc = new PdfDocument(); PdfFont font = PdfFont.create("Helvetica",10, PdfEncodings.WINANSI); font.setColor(Color.BLACK); PdfPage page; page = new PdfPage(PdfPageSize.A4); page.setMeasurementUnit(PdfMeasurement.MU_INCHES); // X-Y coordinates of the first PdfFormPushButton int xPos = 1; // One inch int yPos = 1; // One inch // Dimensions of the PdfFormPushButton double buttonWidth = 1.5; // One inch double buttonHeight = 0.5; // Half inch // Dimensions of the PdfFormPushButton in points double buttonWidth_Points = PdfMeasurement.convertToPdfUnit(PdfMeasurement.MU_INCHES, 1.5); double buttonHeight_Points = PdfMeasurement.convertToPdfUnit(PdfMeasurement.MU_INCHES, 0.5); PdfPen pen = new PdfPen(); pen.dashPhase = 3 ; pen.dashLength = 4; pen.dashGap = 2; pen.strokeColor = Color.GREEN; pen.width = 4; PdfBrush brush = new PdfBrush(); brush.fillColor = Color.YELLOW; // Creates a font for normal appearance stream // and set its color PdfFont normal_ap_font = PdfFont.create("Arial", PdfFont.BOLD | PdfFont.ITALIC, 8, PdfEncodings.WINANSI); normal_ap_font.setColor(Color.RED); // Creates a font for rollover appearance stream // and set its color PdfFont rollover_ap_font = PdfFont.create("Helvetica", PdfFont.BOLD | PdfFont.ITALIC, 9, PdfEncodings.WINANSI); rollover_ap_font.setColor(Color.RED); // Creates a rectangle of the same size as the push // button, which will be drawn on all appearance streams PdfRect ap_rect = new PdfRect(0, 0, buttonWidth_Points, buttonHeight_Points); // Creates a TextFormatter to format the text to be // written inside the shape of the appearance stream PdfTextFormatter tf = new PdfTextFormatter(); tf.setAlignment(PdfTextFormatter.CENTER); // Creates a PdfAppearanceStream for the normal // appearance of the first PdfFormPushButton PdfAppearanceStream js_normal_AP = new PdfAppearanceStream(ap_rect); // Draws the rectangle on the appearance stream js_normal_AP.drawRect(ap_rect, pen, brush); // Writes the name of the push button inside the rectangle js_normal_AP.writeText("JavaScript-NormalAP", normal_ap_font, new PdfRect(0, 13, buttonWidth_Points, buttonHeight_Points), tf, PdfMeasurement.MU_POINTS); // Creates a PdfAppearanceStream for the normal // appearance of the second PdfFormPushButton PdfAppearanceStream submit_normal_AP = new PdfAppearanceStream(ap_rect); // Draws the rectangle on the appearance stream submit_normal_AP.drawRect(ap_rect, pen, brush); // Writes the name of the push button inside the rectangle submit_normal_AP.writeText("Submit-NormalAP", normal_ap_font, new PdfRect(0, 13, buttonWidth_Points, buttonHeight_Points), tf, PdfMeasurement.MU_POINTS); pen.strokeColor = Color.RED; brush.fillColor = Color.GREEN; // Creates a PdfAppearanceStream for the rollover // appearance of the first PdfFormPushButton PdfAppearanceStream js_rollover_AP = new PdfAppearanceStream(ap_rect); // Draws the rectangle on the appearance stream js_rollover_AP.drawRect(ap_rect, pen, brush); // Writes the name of the push button inside the rectangle js_rollover_AP.writeText("JavaScript-RolloverAP", rollover_ap_font, new PdfRect(0, 11, buttonWidth_Points, buttonHeight_Points), tf, PdfMeasurement.MU_POINTS); // Creates a PdfAppearanceStream for the rollover // appearance of the second PdfFormPushButton PdfAppearanceStream submit_rollover_AP = new PdfAppearanceStream(ap_rect); // Draws the rectangle on the appearance stream submit_rollover_AP.drawRect(ap_rect, pen, brush); // Writes the name of the push button inside the rectangle submit_rollover_AP.writeText("Submit-RolloverAP", rollover_ap_font, new PdfRect(0, 11, buttonWidth_Points, buttonHeight_Points), tf, PdfMeasurement.MU_POINTS); // Create the first PdfFormPushButton control // with the specified coordinates PdfFormPushButton jsButton = new PdfFormPushButton(new PdfRect(xPos, yPos, buttonWidth, buttonHeight)); // Set JavaScript action to the PdfFormPushButton jsButton.addAction(PdfAction.JAVASCRIPT, PdfEvent.ON_MOUSE_DOWN, "app.alert('Gnostice PDFOne on Mouse Down')"); // Set the properties for the PdfFormPushButton jsButton.setName("button1"); jsButton.setNormalCaption("JavaScript"); // Set the normal appearance jsButton.setNormalAppearance(js_normal_AP); // Set the rollover appearance jsButton.setRolloverAppearance(js_rollover_AP); jsButton.setFont(font); // Add the jsButton to the page page.addFormField(jsButton); // X-Y coordinates for another PdfFormPushButton xPos = 1; // One inch yPos = 2; // One inch // Create the second PdfFormPushButton control // with the specified coordinates PdfFormPushButton submitButton = new PdfFormPushButton(new PdfRect(xPos, yPos, buttonWidth, buttonHeight)); // Set submit action to the PdfFormPushButton submitButton.addAction( PdfAction.URI, PdfEvent.ON_MOUSE_DOWN, "http://www.gnostice.com"); // Set the properties for the PdfFormPushButton submitButton.setName("button2"); submitButton.setNormalCaption("Submit"); // Set the normal appearance submitButton.setNormalAppearance(submit_normal_AP); // Set the rollover appearance submitButton.setRolloverAppearance(submit_rollover_AP); submitButton.setFont(font); // Add submitButton to the page page.addFormField(submitButton); doc.add(page); doc.save("FormfieldCustomAppearanceShapeDemo.pdf"); doc.close(); }
This look and feel of the form fields will be uniform across all viewers. With the addition of rollover appearance, the form fields are now dynamic i.e. it changes with user interaction.
Downloads:
---o0O0o---
Our .NET Developer Tools | |
---|---|
Gnostice Document Studio .NETMulti-format document-processing component suite for .NET developers. |
PDFOne .NETA .NET PDF component suite to create, edit, view, print, reorganize, encrypt, annotate, and bookmark PDF documents in .NET applications. |
Our Delphi/C++Builder developer tools | |
---|---|
Gnostice Document Studio DelphiMulti-format document-processing component suite for Delphi/C++Builder developers, covering both VCL and FireMonkey platforms. |
eDocEngine VCLA Delphi/C++Builder component suite for creating documents in over 20 formats and also export reports from popular Delphi reporting tools. |
PDFtoolkit VCLA Delphi/C++Builder component suite to edit, enhance, view, print, merge, split, encrypt, annotate, and bookmark PDF documents. |
Our Java developer tools | |
---|---|
Gnostice Document Studio JavaMulti-format document-processing component suite for Java developers. |
PDFOne (for Java)A Java PDF component suite to create, edit, view, print, reorganize, encrypt, annotate, bookmark PDF documents in Java applications. |
Our Platform-Agnostic Cloud and On-Premises APIs | |
---|---|
StarDocsCloud-hosted and On-Premises REST-based document-processing and document-viewing APIs |
Privacy | Legal | Feedback | Newsletter | Blog | Resellers | © 2002-2024 Gnostice Information Technologies Private Limited. All rights reserved. |