itext

来源:互联网 发布:明星对赌协议知乎 编辑:程序博客网 时间:2024/05/20 22:15
/**
 *
 */
package com.hsbc.gltc.itext.test;

import java.awt.Color;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import org.apache.commons.lang.StringUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;






import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.ColumnText;
import com.lowagie.text.pdf.PdfAcroForm;
import com.lowagie.text.pdf.PdfAnnotation;
import com.lowagie.text.pdf.PdfAppearance;
import com.lowagie.text.pdf.PdfBorderDictionary;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfFormField;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import com.lowagie.text.pdf.PdfTemplate;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.RadioCheckField;
import com.lowagie.text.pdf.TextField;

import junit.framework.TestCase;

/**
 * @author 43454131
 *
 */
public class ITextTestCase_CNS_KYC_en extends TestCase {
    
       public static final String[] page1RadioCheckBoxes = { "AT_1_A", "AT_1_B", "AT_1_C", "AT_1_D", "AT_1_E","AT_1_F","AT_1_G"};
    
     public static final String[] page1Radios_Y = { "AT_2_A", "AT_3_A", "AT_4_A", "AT_5_A", "AT_6_A","AT_7_A","AT_8_A","AT_9_A"};
     public static final String[] page1Radios_N = { "AT_2_B", "AT_3_B", "AT_4_B", "AT_5_B", "AT_6_B","AT_7_B","AT_8_B","AT_9_B"};
    
     public static final String[] page1InputTexts = { "AN_2_A", "AN_3_A", "AN_4_A", "AN_5_A", "AN_6_A","AN_7_A","AN_9_A"};
    
     public static final String[] page2Radios_Y = { "6_Y", "7_Y", "8A_Y", "8B_Y", "9_Y"};
     public static final String[] page2Radios_N = { "6_N", "7_N", "8A_N", "8B_N", "9_N"};

    
    
    /** The original PDF file. */
    public static final String DATASHEET
        //= "src/test/resources/datasheet.pdf";
   // = "src/test/resources/CNS2.0_EN_v0.2.pdf";
    = "src/test/resources/CNS2.0_CN_change.PDF";
    /** The resulting PDF file. */
    public static final String RESULT
        = "c:/helloworld.pdf";
    public static final String RESULT2
    = "c:/helloworld2.pdf";
    public static final String IMAGE_RES
    = "src/test/resources/hsbclogo.gif";
    /* (non-Javadoc)
     * @see junit.framework.TestCase#setUp()
     */
    protected void setUp() throws Exception {
        super.setUp();
    }

    public void testGenPDFByForm() throws Exception{
        
        this.generatePDFByForm("c:/CNS2.0 CN_change1.PDF", "c:/CNS2.0 CN_change2.PDF", "attdRisk", this.getStr());
        System.out.println("done"+getStr());
    }
    
    public void testGenPDFByDoc() throws Exception{

        
        this.generatePDFByDoc(getStr());
        System.out.println("done"+getStr());
    }
    
    public void testCreatePDFWithForm() throws Exception{
        String path1 = "c:/ctpdf1.pdf";
        String path2 = "c:/ctpdf2.pdf";
        String path3 = "c:/ctpdf3.pdf";
//        this.createPdf(path1, false, false, this.getStr());
       // this.createPdf(null, path2, true, false, this.getStr());
//        this.createPdf(path3, false, true, this.getStr());
       // this.generatePDFByForm(path2, RESULT, "description", this.getStr()+"\u66f4\u6539\u7e73\u4ed8\u4fdd\u8cbb\u6307\u793a");
    }
    
    private BaseFont getBaseFont() throws DocumentException, IOException{
//        BaseFont font = BaseFont.createFont("MSung-Light", "UniCNS-UCS2-H", BaseFont.NOT_EMBEDDED);
        BaseFont font = BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.MACROMAN, BaseFont.NOT_EMBEDDED);
        return font;
    }
    
    private BaseFont getBaseFontChinese() throws DocumentException, IOException{
        BaseFont font = BaseFont.createFont("MSung-Light", "UniCNS-UCS2-H", BaseFont.NOT_EMBEDDED);
//        BaseFont font = BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.MACROMAN, BaseFont.NOT_EMBEDDED);
        return font;
    }
    
    
    public void generatePDFByForm(String filepath, String result,String fieldname, String str) throws Exception{
        PdfReader reader = new PdfReader(filepath);

        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(result));
        stamper.getWriter().getAcroForm().setNeedAppearances(true);
        AcroFields form = stamper.getAcroFields();
        BaseFont font = this.getBaseFont();
        
        form.setFieldProperty(fieldname,"textfont",font,null);
        
        form.setField(fieldname, str );
        stamper.setFormFlattening(true);
        
//        PdfContentByte cb = stamper.getUnderContent(1);
//        Image img;
//        java.awt.Image awtImage = Toolkit.getDefaultToolkit().createImage(IMAGE_RES);
//        img = Image.getInstance(awtImage, null);
//        cb.addImage(img, 200, 10, 10, 10, 10, 10);
        
        stamper.close();
    }
    
    public void generatePDFByDoc(String str)throws Exception{
        Document document = new Document();
        // step 2
        PdfWriter.getInstance(document, new FileOutputStream(RESULT2));
        // step 3
        document.open();
        // step 4
        BaseFont bf;
        
        bf = this.getBaseFont();
        Font font = new Font(bf, 12);
        document.add(new Paragraph(str, font));
        // step 5
        document.close();

    }
    
    public String getStr(){
        final ApplicationContext ctx = new ClassPathXmlApplicationContext(
                new String[] {"/gltc/helloworld/intg/itext/tmpl/config.xml",});

        String testMessage = (String) ctx.getBean("riskStr");
        
        return testMessage + "\u53d6\u6d88\u6307\u793a";
    }
    
    public void createPdf(String input,String filename, boolean appearances, boolean font,
            String str) throws IOException, DocumentException {
        // step 1
        Document document = new Document();
        // step 2
        PdfWriter writer = PdfWriter.getInstance(document,
                new FileOutputStream(filename));
        // step 3
        document.open();
        PdfReader reader = null;
/*********************Page 1 START*****************************************/    
        if(StringUtils.isNotBlank(input)){
            reader = new PdfReader(new FileInputStream (new File (input)));
            
            //add template
            PdfContentByte pdfContentByte = writer.getDirectContent();                
            PdfImportedPage page = writer.getImportedPage(reader, 1);
            pdfContentByte.addTemplate(page,0,0);
        }

        

//            cb.moveTo(0, 0);
//            rect = new Rectangle(49, 300, 59, 310);
//        drawCheckbox(writer, rect, "ckaCheckBox","Off");
        writer.getAcroForm().setNeedAppearances(appearances);
        
        PdfContentByte cb = writer.getDirectContent();
        cb.moveTo(0, 0);
        
        // Add the check boxes
        PdfContentByte canvas = writer.getDirectContent();
        PdfFormField field;
        PdfFormField field2;

        PdfAppearance[] onOff = new PdfAppearance[2];
        onOff[0] = canvas.createAppearance(20, 20);
        onOff[0].rectangle(1, 1, 18, 18);
        onOff[0].stroke();
        onOff[1] = canvas.createAppearance(20, 20);
        onOff[1].setRGBColorFill(255, 128, 128);
        onOff[1].rectangle(1, 1, 18, 18);
        onOff[1].fillStroke();
        onOff[1].moveTo(1, 1);
        onOff[1].lineTo(19, 19);
        onOff[1].moveTo(1, 19);
        onOff[1].lineTo(19, 1);
        onOff[1].stroke();
        RadioCheckField checkbox;
        RadioCheckField checkbox2;
        Rectangle[] rectArrays = new Rectangle[12];
        rectArrays[0] = new Rectangle(460, 482, 490, 452);
        rectArrays[1] = new Rectangle(460, 445, 490, 415);
        rectArrays[2] = new Rectangle(460, 412, 490, 382);
        rectArrays[3] = new Rectangle(460, 372, 490, 342);
        rectArrays[4] = new Rectangle(460, 312, 490, 282);
        rectArrays[5] = new Rectangle(460, 265, 490, 237);
        rectArrays[6] = new Rectangle(460, 237, 490, 211);
        rectArrays[7] = new Rectangle(460, 211, 490, 183);
        rectArrays[8] = new Rectangle(460, 183, 490, 157);
        rectArrays[9] = new Rectangle(460, 157, 490, 130);
        rectArrays[10] = new Rectangle(460, 130, 490, 102);
        rectArrays[11] = new Rectangle(460, 102, 490, 74);
        
        Rectangle[] rectArrays2 = new Rectangle[12];
        rectArrays2[0] = new Rectangle(510, 482, 540, 452);
        rectArrays2[1] = new Rectangle(510, 445, 540, 415);
        rectArrays2[2] = new Rectangle(510, 412, 540, 382);
        rectArrays2[3] = new Rectangle(510, 372, 540, 342);
        rectArrays2[4] = new Rectangle(510, 312, 540, 282);
        rectArrays2[5] = new Rectangle(510, 265, 540, 237);
        rectArrays2[6] = new Rectangle(510, 237, 540, 211);
        rectArrays2[7] = new Rectangle(510, 211, 540, 183);
        rectArrays2[8] = new Rectangle(510, 183, 540, 157);
        rectArrays2[9] = new Rectangle(510, 157, 540, 130);
        rectArrays2[10] = new Rectangle(510, 130, 540, 102);
        rectArrays2[11] = new Rectangle(510, 102, 540, 74);
        
        for (int i = 0; i < page1Radios_Y.length; i++) {
            checkbox = new RadioCheckField(writer, rectArrays[i], page1Radios_Y[i], "on");
            checkbox.setCheckType(RadioCheckField.TYPE_CHECK);
            field = checkbox.getCheckField();
            checkbox.setBorderColor(Color.white);
//            field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "Off", onOff[0]);
            field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "On", onOff[1]);
            writer.addAnnotation(field);
        }
        
        for (int i = 0; i < page1Radios_N.length; i++) {
            checkbox2 = new RadioCheckField(writer, rectArrays2[i], page1Radios_N[i], "on");
            checkbox2.setCheckType(RadioCheckField.TYPE_CHECK);
            field2 = checkbox2.getCheckField();
            checkbox2.setBorderColor(Color.WHITE);
//            field2.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "Off", onOff[0]);
            field2.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "On", onOff[1]);
            writer.addAnnotation(field2);
        }
        
        //for textFields
//        Rectangle[] page1TextFieldRectArrays = new Rectangle[12];
//        page1TextFieldRectArrays[0] = new Rectangle(510, 482, 540, 452);
//        page1TextFieldRectArrays[1] = new Rectangle(510, 445, 540, 415);
//        page1TextFieldRectArrays[2] = new Rectangle(510, 412, 540, 382);
//        page1TextFieldRectArrays[3] = new Rectangle(510, 372, 540, 342);
//        page1TextFieldRectArrays[4] = new Rectangle(510, 312, 540, 282);
//        page1TextFieldRectArrays[5] = new Rectangle(510, 265, 540, 237);
//        page1TextFieldRectArrays[6] = new Rectangle(510, 237, 540, 211);
//        page1TextFieldRectArrays[7] = new Rectangle(510, 211, 540, 183);
//        page1TextFieldRectArrays[8] = new Rectangle(510, 183, 540, 157);
//        page1TextFieldRectArrays[9] = new Rectangle(510, 157, 540, 130);
//        page1TextFieldRectArrays[10] = new Rectangle(510, 130, 540, 102);
//        page1TextFieldRectArrays[11] = new Rectangle(510, 102, 540, 74);
//        
//        for(int i = 0;i<page1InputTexts.length;i++){
//            TextField textField= new TextField(writer,page1TextFieldRectArrays[i], page1InputTexts[i]);
//            textField.setFontSize(9);
//            textField.setOptions(TextField.MULTILINE);
//            writer.addAnnotation(textField.getTextField());
//        }
        
/*********************Page 1 END*****************************************/        
        
        
/*********************Page 2 START*****************************************/    
        if (StringUtils.isNotBlank(input)) {
            document.newPage();
            writer.getDirectContent().addTemplate(
                    writer.getImportedPage(reader, 2), 0, 0);
            
        }
        PdfContentByte cb3 = writer.getDirectContent();

        cb3.moveTo(0, 0);
        
        // Add the check boxes
        PdfContentByte canvas3 = writer.getDirectContent();
        PdfFormField field3;
        PdfFormField field4;

        
        PdfAppearance[] onOff3 = new PdfAppearance[2];
        onOff3[0] = canvas3.createAppearance(20, 20);
        onOff3[0].rectangle(1, 1, 18, 18);
        onOff3[0].stroke();
        onOff3[1] = canvas3.createAppearance(20, 20);
        onOff3[1].setRGBColorFill(255, 128, 128);
        onOff3[1].rectangle(1, 1, 18, 18);
        onOff3[1].fillStroke();
        onOff3[1].moveTo(1, 1);
        onOff3[1].lineTo(19, 19);
        onOff3[1].moveTo(1, 19);
        onOff3[1].lineTo(19, 1);
        onOff3[1].stroke();
        RadioCheckField checkbox3;
        RadioCheckField checkbox4;
        Rectangle[] rectArrays3 = new Rectangle[5];
        rectArrays3[0] = new Rectangle(460, 626, 490, 596);
        rectArrays3[1] = new Rectangle(460, 526, 490, 496);
        rectArrays3[2] = new Rectangle(460, 446, 490, 416);
        rectArrays3[3] = new Rectangle(460, 405, 490, 375);
        rectArrays3[4] = new Rectangle(460, 326, 490, 296);
        
        Rectangle[] rectArrays4 = new Rectangle[5];
        rectArrays4[0] = new Rectangle(510, 626, 540, 596);
        rectArrays4[1] = new Rectangle(510, 526, 540, 496);
        rectArrays4[2] = new Rectangle(510, 446, 540, 416);
        rectArrays4[3] = new Rectangle(510, 405, 540, 375);
        rectArrays4[4] = new Rectangle(510, 326, 540, 296);
       
        for (int i = 0; i < page2Radios_Y.length; i++) {
            checkbox3 = new RadioCheckField(writer, rectArrays3[i], page2Radios_Y[i], "on");
            checkbox3.setCheckType(RadioCheckField.TYPE_CHECK);
            field3 = checkbox3.getCheckField();
            checkbox3.setBorderColor(Color.WHITE);
//            field3.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "Off", onOff3[0]);
            field3.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "On", onOff3[1]);
            writer.addAnnotation(field3);
        }
        
        for (int i = 0; i < page2Radios_N.length; i++) {
            checkbox4 = new RadioCheckField(writer, rectArrays4[i], page2Radios_N[i], "on");
            checkbox4.setCheckType(RadioCheckField.TYPE_CHECK);
            field4 = checkbox4.getCheckField();
            checkbox4.setBorderColor(Color.WHITE);
//            field4.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "Off", onOff3[0]);
            field4.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "On", onOff3[1]);
            writer.addAnnotation(field4);
        }
        
        
      //for textFields
//        Rectangle[] page2TextFieldRectArrays = new Rectangle[12];
//        page2TextFieldRectArrays[0] = new Rectangle(510, 482, 540, 452);
//        page2TextFieldRectArrays[1] = new Rectangle(510, 445, 540, 415);
//        page2TextFieldRectArrays[2] = new Rectangle(510, 412, 540, 382);
//        page2TextFieldRectArrays[3] = new Rectangle(510, 372, 540, 342);
//        page2TextFieldRectArrays[4] = new Rectangle(510, 312, 540, 282);
//        page2TextFieldRectArrays[5] = new Rectangle(510, 265, 540, 237);
//        page2TextFieldRectArrays[6] = new Rectangle(510, 237, 540, 211);
//        page2TextFieldRectArrays[7] = new Rectangle(510, 211, 540, 183);
//        page2TextFieldRectArrays[8] = new Rectangle(510, 183, 540, 157);
//        page2TextFieldRectArrays[9] = new Rectangle(510, 157, 540, 130);
//        page2TextFieldRectArrays[10] = new Rectangle(510, 130, 540, 102);
//        page2TextFieldRectArrays[11] = new Rectangle(510, 102, 540, 74);
//        
//        for(int i = 0;i<page1InputTexts.length;i++){
//            TextField textField= new TextField(writer,page2TextFieldRectArrays[i], page1InputTexts[i]);
//            textField.setFontSize(9);
//            textField.setOptions(TextField.MULTILINE);
//            writer.addAnnotation(textField.getTextField());
//        }
//        
//        writer.getAcroForm().setNeedAppearances(appearances);
        
/*********************Page 2 END*****************************************/    
        
        /*********************Page 3 START*****************************************/
        if (StringUtils.isNotBlank(input)) {
            document.newPage();
            writer.getDirectContent().addTemplate(
                    writer.getImportedPage(reader, 3), 0, 0);
            
        }
        
//        writer.getAcroForm().setNeedAppearances(appearances);
        
        /*********************Page 3 END*****************************************/    
        document.close();
    }
    
    public void testCreatePDFWithForm2() throws Exception{
        String pdfTempl = "C:/Users/43709342/Desktop/task/QAS FOLDERS/pdf/HistoryPrintPDF/originalPDF/KYC.pdf";
        String outPDF = "C:/Users/43709342/Desktop/task/QAS FOLDERS/pdf/HistoryPrintPDF/templatePDF/CNS8.0_EN.pdf";
      this.createPdf(pdfTempl, outPDF, true, true, this.getStr());
    }

    
}