Search in sources :

Example 6 with PdfStamper

use of com.itextpdf.text.pdf.PdfStamper in project portal by ixinportal.

the class PDFUtils method readPDF.

public static ByteArrayOutputStream readPDF(InputStream is, String enterpriseName, String realName, String mPhone, String email, String info, String info2) throws Exception {
    // 模版文件目录
    PdfReader reader = new PdfReader(is);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    PdfStamper ps = new PdfStamper(reader, bos);
    AcroFields s = ps.getAcroFields();
    // Item item = null;
    // 
    // Map<String, Item> fieldMap = s.getFields(); // pdf表单相关信息展示
    // for (Entry<String, Item> entry : fieldMap.entrySet()) {
    // String name = entry.getKey(); // name就是pdf模版中各个文本域的名字
    // item = (Item) entry.getValue();
    // System.out.println("[name]:" + name + ", [value]: " + item);
    // }
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
    s.setFieldProperty("enterpriseName", "textfont", bfChinese, null);
    s.setFieldProperty("realName", "textfont", bfChinese, null);
    s.setFieldProperty("mPhone", "textfont", bfChinese, null);
    s.setFieldProperty("email", "textfont", bfChinese, null);
    s.setFieldProperty("department", "textfont", bfChinese, null);
    s.setFieldProperty("certNo", "textfont", bfChinese, null);
    s.setFieldProperty("nowdate", "textfont", bfChinese, null);
    s.setField("enterpriseName", enterpriseName);
    s.setField("realName", realName);
    s.setField("mPhone", mPhone);
    s.setField("email", email);
    s.setField("department", info);
    s.setField("certNo", info2);
    s.setField("nowdate", format.format(new Date()));
    // 这句不能少
    ps.setFormFlattening(true);
    ps.close();
    reader.close();
    return bos;
}
Also used : PdfStamper(com.itextpdf.text.pdf.PdfStamper) AcroFields(com.itextpdf.text.pdf.AcroFields) BaseFont(com.itextpdf.text.pdf.BaseFont) PdfReader(com.itextpdf.text.pdf.PdfReader) ByteArrayOutputStream(java.io.ByteArrayOutputStream) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date)

Example 7 with PdfStamper

use of com.itextpdf.text.pdf.PdfStamper 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();
}
Also used : PdfStamper(com.itextpdf.text.pdf.PdfStamper) DocumentException(com.itextpdf.text.DocumentException) PdfContentByte(com.itextpdf.text.pdf.PdfContentByte) PdfReader(com.itextpdf.text.pdf.PdfReader) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) Image(com.itextpdf.text.Image)

Example 8 with PdfStamper

use of com.itextpdf.text.pdf.PdfStamper 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();
        }
    }
}
Also used : PdfSignatureAppearance(com.itextpdf.text.pdf.PdfSignatureAppearance) PdfReader(com.itextpdf.text.pdf.PdfReader) Image(com.itextpdf.text.Image) PdfStamper(com.itextpdf.text.pdf.PdfStamper)

Aggregations

PdfReader (com.itextpdf.text.pdf.PdfReader)8 PdfStamper (com.itextpdf.text.pdf.PdfStamper)8 ByteArrayOutputStream (java.io.ByteArrayOutputStream)5 DocumentException (com.itextpdf.text.DocumentException)3 BaseFont (com.itextpdf.text.pdf.BaseFont)3 IOException (java.io.IOException)3 Image (com.itextpdf.text.Image)2 AcroFields (com.itextpdf.text.pdf.AcroFields)2 PdfContentByte (com.itextpdf.text.pdf.PdfContentByte)2 PdfSignatureAppearance (com.itextpdf.text.pdf.PdfSignatureAppearance)2 CurriculoMinimoDTO (com.tomasio.projects.trainning.dto.CurriculoMinimoDTO)2 CoreException (com.tomasio.projects.trainning.exeption.CoreException)2 SimpleDateFormat (java.text.SimpleDateFormat)2 Date (java.util.Date)2 Chapter (com.itextpdf.text.Chapter)1 Paragraph (com.itextpdf.text.Paragraph)1 Phrase (com.itextpdf.text.Phrase)1 Rectangle (com.itextpdf.text.Rectangle)1 PdfPCell (com.itextpdf.text.pdf.PdfPCell)1 PdfPTable (com.itextpdf.text.pdf.PdfPTable)1