Esempio n. 1
0
  private static void booklet(String input) throws Exception {
    String output = input.replace(".pdf", "-booklet.pdf");
    PdfReader reader = new PdfReader(input);
    int n = reader.getNumberOfPages();
    Rectangle pageSize = reader.getPageSize(1);

    System.out.println("Input page size: " + pageSize);
    Document doc = new Document(PageSize.A4.rotate(), 0, 0, 0, 0);
    PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(output));
    doc.open();
    splitLine(doc, writer);
    int[] pages = new int[(n + 3) / 4 * 4];
    int x = 1, y = pages.length;
    for (int i = 0; i < pages.length; ) {
      pages[i++] = y--;
      pages[i++] = x++;
      pages[i++] = x++;
      pages[i++] = y--;
    }
    PdfContentByte cb = writer.getDirectContent();
    float bottom = (doc.top() - pageSize.getHeight()) / 2 + kOffset;
    float left = doc.right() / 2 - (pageSize.getWidth() + kTextWidth) / 2 - kMargin;
    float right = doc.right() / 2 - (pageSize.getWidth() - kTextWidth) / 2 + kMargin;

    for (int i = 0; i < pages.length; ) {
      PdfImportedPage page = getPage(writer, reader, pages[i++]);
      if (page != null) cb.addTemplate(page, left, bottom);

      page = getPage(writer, reader, pages[i++]);
      if (page != null) cb.addTemplate(page, right, bottom);

      doc.newPage();
    }
    doc.close();
  }
Esempio n. 2
0
  private static void crop(String input) throws Exception {
    String output = input.replace(".pdf", "-crop.pdf");
    PdfReader reader = new PdfReader(input);
    final int n = reader.getNumberOfPages();
    Rectangle pageSize = reader.getPageSize(1);

    System.out.println("Input page size: " + pageSize);
    float left = (pageSize.getWidth() - kTextWidth) / 2 - kMargin;
    float right = pageSize.getWidth() - left;
    float bottom = (pageSize.getHeight() - kTextHeight) / 2;
    float top = pageSize.getHeight() - bottom;
    PdfRectangle rect = new PdfRectangle(left, bottom + kOffset, right, top + kOffset);
    for (int i = 1; i <= n; i++) {
      PdfDictionary pageDict = reader.getPageN(i);
      pageDict.put(PdfName.CROPBOX, rect);
    }
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(output));
    stamper.close();
  }
  @Override
  public void postProcess(ITextContext context, File fileIn, File fileOut) {
    FileInputStream in = null;
    FileOutputStream out = null;

    try {
      in = new FileInputStream(fileIn);
      out = new FileOutputStream(fileOut);

      PageNumber pageNumber = context.pageNumber();

      int startPage = pageNumber.lookupFrontMatterLastPage();
      ColumnText ct = generateTableOfContent(context);
      pageNumber.continueFrontMatter();

      PdfReader reader = new PdfReader(in);
      Rectangle pageSize = reader.getPageSize(1);
      PdfStamper stamper = new PdfStamper(reader, out);
      while (true) {
        stamper.insertPage(++startPage, pageSize);

        PdfContentByte under = stamper.getUnderContent(startPage);
        pageNumber.notifyPageChange();
        headerFooter.drawFooter(under, pageNumber.pageInfos());

        PdfContentByte canvas = stamper.getOverContent(startPage);
        ct.setCanvas(canvas);
        ct.setSimpleColumn(36, 36, 559, 770);
        if (!ColumnText.hasMoreText(ct.go())) break;
      }
      stamper.close();

    } catch (FileNotFoundException e) {
      log.error("Unable to reopen temporary generated file ({})", fileIn, e);
    } catch (DocumentException e) {
      log.error("Error during report post-processing from: {}, to: {}", fileIn, fileOut, e);
    } catch (IOException e) {
      log.error("Error during report post-processing from: {}, to: {}", fileIn, fileOut, e);
    } finally {
      IOUtils.closeQuietly(out);
      IOUtils.closeQuietly(in);
    }
  }