use of com.itextpdf.text.pdf.PdfReader in project trainning by fernandotomasio.
the class ReportUtil method setBackground.
public byte[] setBackground(byte[] documentSource, String url) {
PdfReader reader = null;
PdfStamper stamp = null;
ByteArrayOutputStream byteArray = null;
try {
byteArray = new ByteArrayOutputStream();
reader = new PdfReader(documentSource);
int n = reader.getNumberOfPages();
// Create a stamper that will copy the document to a new file
stamp = new PdfStamper(reader, byteArray);
int i = 1;
PdfContentByte under;
PdfContentByte over;
Image image = Image.getInstance(url);
image.scaleToFit(PageSize.A4.getWidth(), PageSize.A4.getHeight());
image.setAbsolutePosition(0, 0);
// image.setAbsolutePosition(200, 400);
while (i <= n) {
// Watermark under the existing page
under = stamp.getUnderContent(i);
under.addImage(image);
// Text over the existing page
// over = stamp.getOverContent(i);
// over.beginText();
// over.setFontAndSize(bf, 18);
// over.showText("page " + i);
// over.endText();
i++;
}
stamp.close();
} catch (DocumentException ex) {
Logger.getLogger(ReportUtil.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException e) {
e.printStackTrace();
}
return byteArray.toByteArray();
}
use of com.itextpdf.text.pdf.PdfReader in project pancm_project by xuwujing.
the class DownPdf method createAllPdf.
public void createAllPdf() throws Exception {
// 填充创建pdf
PdfReader reader = null;
PdfStamper stamp = null;
try {
reader = new PdfReader("E:/module.pdf");
SimpleDateFormat simp = new SimpleDateFormat("yyyy-MM-dd");
String times = simp.format(new Date()).trim();
// 创建生成报告名称
String root = "E:/pdf" + File.separator;
if (!new File(root).exists())
new File(root).mkdirs();
File deskFile = new File(root, times + ".pdf");
stamp = new PdfStamper(reader, new FileOutputStream(deskFile));
// 取出报表模板中的所有字段
AcroFields form = stamp.getAcroFields();
// 填充数据
form.setField("name", "zhangsan");
form.setField("sex", "男");
form.setField("age", "15");
// 报告生成日期
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
String generationdate = dateformat.format(new Date());
form.setField("generationdate", generationdate);
stamp.setFormFlattening(true);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stamp != null) {
stamp.close();
}
if (reader != null) {
reader.close();
}
}
}
use of com.itextpdf.text.pdf.PdfReader in project spring-cloud-digital-sign by SpringForAll.
the class Sign method sign.
/**
* 单多次签章通用
* @param src string source pdf
* @param target string target pdf
* @param signatureInfos SignatureInfo
*/
public static void sign(String src, String target, SignatureInfo... signatureInfos) {
InputStream inputStream = null;
FileOutputStream outputStream = null;
ByteArrayOutputStream result = new ByteArrayOutputStream();
try {
inputStream = new FileInputStream(src);
for (SignatureInfo signatureInfo : signatureInfos) {
ByteArrayOutputStream tempArrayOutputStream = new ByteArrayOutputStream();
PdfReader reader = new PdfReader(inputStream);
// 创建签章工具PdfStamper ,最后一个boolean参数是否允许被追加签名
PdfStamper stamper = PdfStamper.createSignature(reader, tempArrayOutputStream, '\0', null, true);
// 获取数字签章属性对象
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setReason(signatureInfo.getReason());
appearance.setLocation(signatureInfo.getLocation());
// 设置签名的签名域名称,多次追加签名的时候,签名预名称不能一样,图片大小受表单域大小影响(过小导致压缩)
appearance.setVisibleSignature(signatureInfo.getFieldName());
// 读取图章图片
Image image = Image.getInstance(signatureInfo.getImagePath());
appearance.setSignatureGraphic(image);
appearance.setCertificationLevel(signatureInfo.getCertificationLevel());
// 设置图章的显示方式,如下选择的是只显示图章(还有其他的模式,可以图章和签名描述一同显示)
appearance.setRenderingMode(signatureInfo.getRenderingMode());
/**
* 粘贴图片
*/
// PdfContentByte over = stamper.getOverContent(1);
// image.setAbsolutePosition(0 , 0);
// image.scaleToFit(300 , 109);
// over.addImage(image);
// 摘要算法
ExternalDigest digest = new BouncyCastleDigest();
// 签名算法
ExternalSignature signature = new PrivateKeySignature(signatureInfo.getPk(), signatureInfo.getDigestAlgorithm(), null);
// 调用itext签名方法完成pdf签章
MakeSignature.signDetached(appearance, digest, signature, signatureInfo.getChain(), null, null, null, 0, signatureInfo.getSubfilter());
// 定义输入流为生成的输出流内容,以完成多次签章的过程
inputStream = new ByteArrayInputStream(tempArrayOutputStream.toByteArray());
result = tempArrayOutputStream;
}
outputStream = new FileOutputStream(new File(target));
outputStream.write(result.toByteArray());
outputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != outputStream) {
outputStream.close();
}
if (null != inputStream) {
inputStream.close();
}
if (null != result) {
result.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Aggregations