PDF 파일 처리 – JPG>PDF, PDF+PDF, 비밀번호 주입

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;

public class PdfUtils {

private static final Logger logger = LoggerFactory.getLogger(PdfUtils.class);

/**
 * PDF파일에 비밀번호를 주입한다.
 * @Param input : 원본 PDF파일 Path
 * @Param output : 비밀번호 주입후 저장될 파일 Path
 * @Param userPassword : output에 주입할 비밀번호 
 */
public static void encryptPdf(String input, String output, String userPassword){    
    try {
        //logger.info("Encrypt PDF:"+ input +" > "+ output);
        PdfReader pdfReader = new PdfReader(input);
        PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(output));
        pdfStamper.setEncryption(
                userPassword.getBytes()
                , "HelloJTNet".getBytes()
                , PdfWriter.ALLOW_PRINTING
                , PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA
                );
        pdfStamper.close();
        pdfReader.close();
    } catch (IOException | DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

/**
 * JPG 파일을 PDF로 변환한다.
 * @param jpg : 원본 JPG 파일 Path
 * @param pdf : 변환할 PDF파일 Path
 */
public static boolean convertJpg2Pdf(String jpg, String pdf) {
    try {
        //logger.info("Convert PDF:"+ jpg +" > "+ pdf);
        Image img = Image.getInstance(jpg);
        img.setRotationDegrees(0);
        img.scaleAbsolute(PageSize.A4.getWidth(), PageSize.A4.getWidth()*img.getHeight()/img.getWidth());
        Document document = new Document(PageSize.A4);
        document.setMargins(0, 0, 0, 0);
        FileOutputStream fos = new FileOutputStream(pdf);
        PdfWriter pdfWriter = PdfWriter.getInstance(document,  fos);

        pdfWriter.open();
        document.open();
        document.add(img);
        document.close();
        pdfWriter.close();
        return true;
    } catch (IOException | DocumentException e) {
        //e.printStackTrace();
        return false;
    }
}

/**
 * PDF 파일 병합 변환한다.
 * @param List<InputStream> : 병합할 PDF 파일 리스트
 * @param OutputStream : 병합된 PDF 파일
 */
public static boolean mergePdfFiles(List<InputStream> inputPdfList, OutputStream outputStream){
    //Create document and pdfReader objects.
    Document document = new Document();
    List<PdfReader> readers = new ArrayList<PdfReader>();
    int totalPages = 0;

    //Create pdf Iterator object using inputPdfList.
    Iterator<InputStream> pdfIterator = inputPdfList.iterator();

    try {
        // Create reader list for the input pdf files.
        while (pdfIterator.hasNext()) {
            InputStream pdf = pdfIterator.next();
            PdfReader pdfReader;
            pdfReader = new PdfReader(pdf);
            readers.add(pdfReader);
            totalPages = totalPages + pdfReader.getNumberOfPages();
        }

        // Create writer for the outputStream
        PdfWriter writer;
        writer = PdfWriter.getInstance(document, outputStream);
        //Open document.
        document.open();

        //Contain the pdf data.
        PdfContentByte pageContentByte = writer.getDirectContent();

        PdfImportedPage pdfImportedPage;
        int currentPdfReaderPage = 1;
        Iterator<PdfReader> iteratorPDFReader = readers.iterator();

        // Iterate and process the reader list.
        while (iteratorPDFReader.hasNext()) {
            PdfReader pdfReader = iteratorPDFReader.next();
            //Create page and add content.
            while (currentPdfReaderPage <= pdfReader.getNumberOfPages()) {
                document.newPage();
                pdfImportedPage = writer.getImportedPage(pdfReader,currentPdfReaderPage);
                pageContentByte.addTemplate(pdfImportedPage, 0, 0);
                currentPdfReaderPage++;
            }
            currentPdfReaderPage = 1;
        }

        //Close document and outputStream.
        outputStream.flush();
        document.close();
        outputStream.close();
        System.out.println("Pdf files merged successfully.");
        return true;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("Pdf files merged failed.");
        return false;
    } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("Pdf files merged failed.");
        return false;
    }

}

}

댓글 남기기