此问题已解决,正确代码见2楼,后续会对功能加强,到时候再更新2楼的代码在此非常感谢网友liyihz2008的帮助和支持,非常热心的人。
需求:根据d:datasheet.pdf 的PDF模板文件生成一个PDF文档,并且填充PDF模板中的
txtCompany字段。生成的文档保存在 D:a.pdf
问题:生成出来的PDF为空且为损坏的文档,而且当模板为比较大的时候,就溢出了
Java Agent.java
import lotus.domino.*;
public class JavaAgent extends AgentBase { public void NotesMain() { try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
lotus.domino.Database db=agentContext.getCurrentDatabase();
lotus.domino.View view = db.getView("vwMySepHistory");
Document doc=view.getFirstDocument();
System.out.println(doc.getItemValueString("TXTMANAGEDEPARTMENT"));
new testA().createPdf("D:test1.pdf",doc);
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
testA.java
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import lotus.domino.*;
public class testA {
public void createPdf(String outputfilename,lotus.domino.Document doc) throws IOException, DocumentException {
try {
String fileName = "d:datasheet.pdf";
PdfReader reader = new PdfReader(fileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfStamper ps = new PdfStamper(reader, bos);
BaseFont bf = BaseFont.createFont( "STSong-L3ight", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font= new Font(bf,12,Font.NORMAL);
AcroFields s = ps.getAcroFields();
System.out.println("s: " + s);
System.out.println("AcroFields: " + s.getFields());
System.out.println("AcroFields.class: " + s.getFields().getClass());
System.out.println("getSignatureNames: " + s.getSignatureNames());
System.out.println("getSignatureNames: " + s.getTotalRevisions());
System.out.println("s: " + s.getBlankSignatureNames());
System.out.println("s: " + s.getFieldCache());
System.out.println("s: " + s.getSubstitutionFonts());
s.setField("txtCompany", "201001");
ps.setFormFlattening(true);
FileOutputStream fos = new FileOutputStream(outputfilename);
fos.write(bos.toByteArray());
ps.close();
fos.close();
} catch (DocumentException e) {
}
}
}
收起