iText(java version) and iTextSharp(dotnet version) are very powerful libraries to create and manipulate PDF, but this time, I just want to talk about how to fill PDF form with the help of iText or iTextSharp.
for java version, please visit http://itextdocs.lowagie.com/tutorial/#part5, there are many examples about fill or create PDF form.
for dotnet version(C#),
the easiest example is
PdfReader reader = new PdfReader("SimpleRegistrationForm.pdf");
PdfStamper stamp1 = new PdfStamper(reader, new FileStream("registered.pdf",FileMode.Create));
AcroFields form1 = stamp1.AcroFields;
form1.SetField("name", "Steven");
form1.SetField("address", "https://blog.rubypdf.com");
form1.SetField("postal_code", "200051");
form1.SetField("email", "rocsky@gmail.com");
stamp1.Close();
reader.Close();
and if you want to fill CJK(Chinese, Japanese and Korean) characters to PDF from, have a look the following code,
BaseFont.AddToResourceSearch("iTextAsian-1.0.dll");
BaseFont.AddToResourceSearch("iTextAsianCmaps-1.0.dll");
BaseFont font = BaseFont.CreateFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
//if you want to use truetype fonts
//BaseFont font = BaseFont.CreateFont("c:\\windows\\fonts\\STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
PdfReader reader = new PdfReader("SimpleRegistrationForm.pdf");
PdfStamper stamp1 = new PdfStamper(reader, new FileStream("registered.pdf",FileMode.Create));
AcroFields form1 = stamp1.AcroFields;
//if the field you want to fill CJK characters, but the font it used does not support cjk, you need modify it before fill.
form1.SetFieldProperty("name","textfont",font,null);
//fill the form now
form1.SetField("name", "å°æŽ");
form1.SetField("address", "https://blog.rubypdf.com");
form1.SetField("postal_code", "200051");
form1.SetField("email", "rocsky@gmail.com");
stamp1.Close();
reader.Close();
related resources from my Chinese Blog and my free asp.net hosting,
- I have posted it before on my Chinese version blog, and you can get the source code from the following links,
field_merge: Example code of Early Access iText(how to fill PDF form with iTextSharp) - Fill and Save PDF Form online(also can add more function,such as email and save data to database ),Adobe Reader is enough
- Fill web form and save the data to PDF form online
we can fil any pdf using the following code.
The FillCell() fuction has few parameters which embed the text in the specified co-ordinate.
I am using the edit function to stamp text in the existing Doc.pdf.
public void EditPDF()
{
try
{
PdfReader reader = new PdfReader(Path.Combine(Server.MapPath(“~/pdf”), “Doc.pdf”));
string sPdfName = Path.Combine(Server.MapPath(“~/pdf”), “Doc221.pdf”);
//int n = reader.GetPageSize();
PdfStamper stamp = new PdfStamper(reader, new FileStream(
sPdfName, FileMode.Create));
PdfContentByte over;
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
over = stamp.GetOverContent(1);
//over = stamp.getUnderContent(i);
/*Image img = Image.getInstance(“Blank.JPG”);
img.setAbsolutePosition(170, 279);
over.addImage(img);
*/
over.BeginText();
//over.setFontAndSize(bf, 18);
//over.setTextMatrix(30, 30);
//over.showText(“page ” + i);
over.SetFontAndSize(bf, 10);
FillCell(over, “xyzabc”, 280F, 692F);
over.EndText();
stamp.Close();
reader.Close();
return;
}
catch (Exception e)
{
//e.printStackTrace();
}
}
public void FillCell(PdfContentByte over,String sText,float x,float y)
{
try
{
//System.out.println(sText.length());
float fx=x;;
over.ShowTextAligned(1, sText, fx , y, 0f);
return;
}
catch(Exception e)
{
//e.printStackTrace();
}
}