You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@pdfbox.apache.org by "Beutel, Stephan" <sb...@heiler.com> on 2012/05/03 10:44:13 UTC
Create a pdf form with pdfbox
Hello,
I need to create a pdf form which can be filled out with a computer.
In my testcase I want to vreate a simple text field, but I couldn't find any documentation how to handle field creation.
I get an error while setting the value into the test field. Pdfbox can't find the defaultappearence.
If someone could send a small code snippet how to create forms with pdfbox I would be very happy.
Here's my source:
package com.heiler;
import java.io.IOException;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDTextbox;
import org.apache.pdfbox.util.PDFOperator;
public class Main
{
private static String path = "D:/Projects/playground";
private void run() throws COSVisitorException, IOException
{
TestObject obj = new TestObject();
String filename = Long.toString( GregorianCalendar.getInstance().getTimeInMillis() );
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage( page );
PDFont font = PDType1Font.HELVETICA_BOLD;
// create simple text
PDPageContentStream contentStream = new PDPageContentStream( document, page );
contentStream.beginText();
contentStream.setFont( font, 12 );
contentStream.moveTextPositionByAmount( 100, 700 );
contentStream.drawString( "Hello World" );
contentStream.endText();
contentStream.close();
PDResources res = new PDResources();
res.setFonts( createFontMap() );
page.setResources( res );
PDAcroForm acroForm = new PDAcroForm( document );
// creating default resources
PDResources dr = new PDResources();
dr.setFonts( createFontMap() );
acroForm.setDefaultResources( dr );
document.getDocumentCatalog().setAcroForm( acroForm );
COSDictionary dic = new COSDictionary();
PDTextbox textField = new PDTextbox( acroForm, dic );
COSDictionary textFieldDict = textField.getDictionary();
textFieldDict.setName( COSName.FT, "Tx" );
PDRectangle rect = new PDRectangle();
rect.setLowerLeftX( ( float ) 88.14579772949219 );
rect.setLowerLeftY( ( float ) 394.781005859375 );
rect.setUpperRightX( ( float ) 232.9340057373047 );
rect.setUpperRightY( ( float ) 416.5929870605469 );
textField.getWidget().setRectangle( rect );
textField.setPartialName( "Text1" );
page.getAnnotations().add( textField );
page.getAnnotations().add( textField.getWidget() );
acroForm.getFields().add( textField );
textField.setValue( "some text" );
document.save( path + "/" + filename + ".pdf" );
document.close();
}
private Map< String, PDType1Font > createFontMap()
{
Map< String, PDType1Font > fonts = new HashMap< String, PDType1Font >();
fonts.put( PDType1Font.TIMES_ROMAN.getBaseFont(), PDType1Font.TIMES_ROMAN );
fonts.put( PDType1Font.TIMES_BOLD.getBaseFont(), PDType1Font.TIMES_BOLD );
fonts.put( PDType1Font.TIMES_ITALIC.getBaseFont(), PDType1Font.TIMES_ITALIC );
fonts.put( PDType1Font.TIMES_BOLD_ITALIC.getBaseFont(), PDType1Font.TIMES_BOLD_ITALIC );
fonts.put( PDType1Font.HELVETICA.getBaseFont(), PDType1Font.HELVETICA );
fonts.put( PDType1Font.HELVETICA_BOLD.getBaseFont(), PDType1Font.HELVETICA_BOLD );
fonts.put( PDType1Font.HELVETICA_OBLIQUE.getBaseFont(), PDType1Font.HELVETICA_OBLIQUE );
fonts.put( PDType1Font.HELVETICA_BOLD_OBLIQUE.getBaseFont(), PDType1Font.HELVETICA_BOLD_OBLIQUE );
fonts.put( PDType1Font.COURIER.getBaseFont(), PDType1Font.COURIER );
fonts.put( PDType1Font.COURIER_BOLD.getBaseFont(), PDType1Font.COURIER_BOLD );
fonts.put( PDType1Font.COURIER_OBLIQUE.getBaseFont(), PDType1Font.COURIER_OBLIQUE );
fonts.put( PDType1Font.COURIER_BOLD_OBLIQUE.getBaseFont(), PDType1Font.COURIER_BOLD_OBLIQUE );
fonts.put( PDType1Font.SYMBOL.getBaseFont(), PDType1Font.SYMBOL );
fonts.put( PDType1Font.ZAPF_DINGBATS.getBaseFont(), PDType1Font.ZAPF_DINGBATS );
return fonts;
}
public static void main( String[] args )
{
System.out.println( "started" );
Main main = new Main();
try
{
main.run();
}
catch ( COSVisitorException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch ( IOException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Thanks
Stephan
Stephan Beutel
Senior Java Developer HBC
Tel: +49 (711) 13984-277
Fax: +49 (711) 8666301
Mobil:
sbeutel@heiler.com<ma...@heiler.com>
Heiler Software AG
Mittlerer Pfad 5 - 70499 Stuttgart
www.heiler.com<http://www.heiler.com>
Management Board: Rolf J. Heiler, Dr. Wolfgang A. K?stler, Frank Schmidt, Dirk H?u?ermann
Chairman of the Supervisory Board: Antonio Schnieder
Registry Court: Stuttgart District Court, HRB 20399, German VAT ID.DE 146023553
[Heiler Software] <http://www.heiler.com>
E-Procurement Specialist Interview
Amazonization in Catalog Procurement
> Read now!<http://blog.heiler.com/02/2012/specialist-interview-amazonization-in-catalog-procurement/>