| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /**
- *
- */
- package test;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.ArrayList;
- import java.util.List;
- import com.itextpdf.text.Document;
- import com.itextpdf.text.pdf.BaseFont;
- import com.itextpdf.text.pdf.PdfContentByte;
- import com.itextpdf.text.pdf.PdfImportedPage;
- import com.itextpdf.text.pdf.PdfReader;
- import com.itextpdf.text.pdf.PdfWriter;
- /**
- * @author xzx
- *
- * 2019年5月5日
- *
- */
- public class MergePDF {
- private static String USER_PASS = "123";
- private static String OWNER_PASS = "321";
- public static void main(String[] args) {
- try {
- List<InputStream> pdfs = new ArrayList<InputStream>();
- pdfs.add(new FileInputStream("D:\\Test.pdf"));
- // pdfs.add(new FileInputStream("D:\\Test1.pdf"));
- OutputStream output = new FileOutputStream("d:\\encry.pdf");
- MergePDF.concatPDFs(pdfs, output, true);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static void concatPDFs(List<InputStream> streamOfPDFFiles, OutputStream outputStream, boolean paginate) {
- Document document = new Document();
- try {
- List<InputStream> pdfs = streamOfPDFFiles;
- List<PdfReader> readers = new ArrayList<PdfReader>();
- int totalPages = 0;
- // Create Readers for the pdfs.
- for (InputStream pdf : pdfs) {
- PdfReader pdfReader = new PdfReader(pdf);
- readers.add(pdfReader);
- totalPages += pdfReader.getNumberOfPages();
- }
- // Create a writer for the outputstream
- PdfWriter writer = PdfWriter.getInstance(document, outputStream);
- writer.setEncryption(USER_PASS.getBytes(), OWNER_PASS.getBytes(), PdfWriter.ALLOW_SCREENREADERS,PdfWriter.STANDARD_ENCRYPTION_128);
- document.open();
- BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
- PdfContentByte cb = writer.getDirectContent(); // Holds the PDF
- // data
- PdfImportedPage page;
- int currentPageNumber = 0;
- int pageOfCurrentReaderPDF = 0;
- // Loop through the PDF files and add to the output.
- for (PdfReader pdfReader : readers) {
- // Create a new page in the target for each source page.
- while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
- document.newPage();
- pageOfCurrentReaderPDF++;
- currentPageNumber++;
- page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
- cb.addTemplate(page, 0, 0);
- // Code for pagination.
- if (paginate) {
- cb.beginText();
- cb.setFontAndSize(bf, 9);
- cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "" + currentPageNumber + " of " + totalPages,
- 520, 5, 0);
- cb.endText();
- }
- }
- pageOfCurrentReaderPDF = 0;
- }
- outputStream.flush();
- document.close();
- outputStream.close();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (document.isOpen())
- document.close();
- try {
- if (outputStream != null)
- outputStream.close();
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- }
- }
- }
|