MergePDF.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /**
  2. *
  3. */
  4. package test;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.OutputStream;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import com.itextpdf.text.Document;
  13. import com.itextpdf.text.pdf.BaseFont;
  14. import com.itextpdf.text.pdf.PdfContentByte;
  15. import com.itextpdf.text.pdf.PdfImportedPage;
  16. import com.itextpdf.text.pdf.PdfReader;
  17. import com.itextpdf.text.pdf.PdfWriter;
  18. /**
  19. * @author xzx
  20. *
  21. * 2019年5月5日
  22. *
  23. */
  24. public class MergePDF {
  25. private static String USER_PASS = "123";
  26. private static String OWNER_PASS = "321";
  27. public static void main(String[] args) {
  28. try {
  29. List<InputStream> pdfs = new ArrayList<InputStream>();
  30. pdfs.add(new FileInputStream("D:\\Test.pdf"));
  31. // pdfs.add(new FileInputStream("D:\\Test1.pdf"));
  32. OutputStream output = new FileOutputStream("d:\\encry.pdf");
  33. MergePDF.concatPDFs(pdfs, output, true);
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. public static void concatPDFs(List<InputStream> streamOfPDFFiles, OutputStream outputStream, boolean paginate) {
  39. Document document = new Document();
  40. try {
  41. List<InputStream> pdfs = streamOfPDFFiles;
  42. List<PdfReader> readers = new ArrayList<PdfReader>();
  43. int totalPages = 0;
  44. // Create Readers for the pdfs.
  45. for (InputStream pdf : pdfs) {
  46. PdfReader pdfReader = new PdfReader(pdf);
  47. readers.add(pdfReader);
  48. totalPages += pdfReader.getNumberOfPages();
  49. }
  50. // Create a writer for the outputstream
  51. PdfWriter writer = PdfWriter.getInstance(document, outputStream);
  52. writer.setEncryption(USER_PASS.getBytes(), OWNER_PASS.getBytes(), PdfWriter.ALLOW_SCREENREADERS,PdfWriter.STANDARD_ENCRYPTION_128);
  53. document.open();
  54. BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
  55. PdfContentByte cb = writer.getDirectContent(); // Holds the PDF
  56. // data
  57. PdfImportedPage page;
  58. int currentPageNumber = 0;
  59. int pageOfCurrentReaderPDF = 0;
  60. // Loop through the PDF files and add to the output.
  61. for (PdfReader pdfReader : readers) {
  62. // Create a new page in the target for each source page.
  63. while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
  64. document.newPage();
  65. pageOfCurrentReaderPDF++;
  66. currentPageNumber++;
  67. page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
  68. cb.addTemplate(page, 0, 0);
  69. // Code for pagination.
  70. if (paginate) {
  71. cb.beginText();
  72. cb.setFontAndSize(bf, 9);
  73. cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "" + currentPageNumber + " of " + totalPages,
  74. 520, 5, 0);
  75. cb.endText();
  76. }
  77. }
  78. pageOfCurrentReaderPDF = 0;
  79. }
  80. outputStream.flush();
  81. document.close();
  82. outputStream.close();
  83. } catch (Exception e) {
  84. e.printStackTrace();
  85. } finally {
  86. if (document.isOpen())
  87. document.close();
  88. try {
  89. if (outputStream != null)
  90. outputStream.close();
  91. } catch (IOException ioe) {
  92. ioe.printStackTrace();
  93. }
  94. }
  95. }
  96. }