import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.IOUtils;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.AcroFields.FieldPosition;
import com.itextpdf.text.pdf.Barcode128;
import com.itextpdf.text.pdf.BarcodeQRCode;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.TextField;
public class EPdfUtil {
public static void main(String[] args) throws Exception {
String rpath="D:/zzzzzzzz/";
String file="tdz_model.pdf";
String newfile="zzzhhh2.pdf";
String templatePath=rpath+file;
String newPDFPath =rpath+newfile;
OutputStream out=new FileOutputStream(new File(newPDFPath));
Document doc = new Document();
Map<String,String> text=new HashMap<String,String>();
Map<String,String> img=new HashMap<String,String>();
text.put("fill_1", "是打飞机的发生1");
text.put("fill_2", "ssss的发生1受持读诵");
text.put("Text2", "2012年4月2日");
img.put("img1", rpath+"zzzzz.png");
img.put("img2", rpath+"xxx.png");
getdoc(out, doc, text, img, templatePath);
}
public static void getdoc(OutputStream out,Document doc,Map<String,String> text
,Map<String ,String> img,String templatePath){
PdfReader reader =null;
ByteArrayOutputStream bos =null;
PdfStamper stamper =null;
PdfCopy copy =null;
try{
reader = new PdfReader(templatePath);
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
//文本
if(text!=null&&text.size()>0){
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(bf, 10.45f, Font.NORMAL);
for(String key : text.keySet()){
FieldPosition f=form.getFieldPositions(key).get(0);
createText(stamper.getOverContent(f.page), font, f.position, text.get(key));
}
}
if(img!=null&&img.size()>0){
for(String key : img.keySet()){
FieldPosition f=form.getFieldPositions(key).get(0);
createImg(f, img.get(key), stamper.getOverContent(f.page));
}
}
stamper.setFormFlattening(true);
stamper.close();
copy = new PdfCopy(doc, out);
doc.open();
PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importPage);
doc.close();
}catch (Exception e){
e.printStackTrace();
}finally{
if(stamper!=null){
try {
stamper.close();
} catch (Exception e) {
}
}
if(doc!=null){
try {
doc.close();
} catch (Exception e) {
}
}
if(copy!=null){
try {
copy.close();
} catch (Exception e) {
}
}
}
}
public static void createText(PdfContentByte p,Font font,Rectangle rect,String con) throws Exception{
ColumnText columnText = new ColumnText(p);
columnText.setSimpleColumn(rect);
Paragraph elements = new Paragraph(con,font);
columnText.addElement(elements);
columnText.go();
}
public static void createImg(FieldPosition f,String imgpath,PdfContentByte under) throws Exception{
Rectangle signRect = f.position;
float x = signRect.getLeft();
float y = signRect.getBottom();
Image image = Image.getInstance(imgpath);
//图片大小自适应
image.scaleToFit(signRect.getWidth(), signRect.getHeight());
image.setAbsolutePosition(x, y);
under.addImage(image);
}
}
参考文章:
0.https://blog.csdn.net/tanga842428/article/details/79450092
1.https://blog.csdn.net/qq_26173219/article/details/81629038
2.https://blog.csdn.net/qq_36537108/article/details/86635613
3.https://rensanning.iteye.com/blog/1538689