Skip to content

Instantly share code, notes, and snippets.

@JoelGeraci-Datalogics
Last active June 10, 2016 18:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JoelGeraci-Datalogics/2527cf26ba67eab55b768baadd61a097 to your computer and use it in GitHub Desktop.
Save JoelGeraci-Datalogics/2527cf26ba67eab55b768baadd61a097 to your computer and use it in GitHub Desktop.
Saves a file using various settings
/*
* Copyright Datalogics, Inc. 2015
*/
package pdfjt.cookbook.document;
import com.adobe.internal.io.ByteReader;
import com.adobe.internal.io.ByteWriter;
import com.adobe.internal.io.InputStreamByteReader;
import com.adobe.pdfjt.pdf.document.PDFDocument;
import com.adobe.pdfjt.pdf.document.PDFOpenOptions;
import com.adobe.pdfjt.pdf.document.PDFSaveFullOptions;
import com.adobe.pdfjt.pdf.document.PDFSaveIncrementalOptions;
import com.adobe.pdfjt.pdf.document.PDFSaveOptions;
import com.adobe.pdfjt.pdf.page.PDFPageTree;
import com.adobe.pdfjt.services.manipulations.PMMService;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.text.DecimalFormat;
import pdfjt.util.SampleFileServices;
/**
* Saves a file using various settings
*/
public class SaveIncremental {
private static final String inputPDFURL = "http://dev.datalogics.com/cookbook/document/AcrobatDC_js_api_reference.pdf";
private static final String outputDir = "cookbook/Document/output/";
private static final String outputFile1 = "AcrobatDC_js_api_reference_Incremental.pdf";
private static final String outputFile2 = "AcrobatDC_js_api_reference_Full.pdf";
private static final String outputFile3 = "AcrobatDC_js_api_reference_FullCompress.pdf";
private static final DecimalFormat formatter = new DecimalFormat("#,###");
public static void main(String[] args) throws Exception {
/*
* Read in PDF input file
*/
URLConnection connection = new URL(inputPDFURL).openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
connection.connect();
InputStream fis = connection.getInputStream();
ByteReader byteReader = new InputStreamByteReader(fis);
PDFDocument pdfDocument = PDFDocument.newInstance(byteReader, PDFOpenOptions.newInstance());
System.out.println("Original File Size: " + padLeft(formatter.format(pdfDocument.getFileSize()),7));
PMMService pmmService = new PMMService(pdfDocument);
PDFPageTree pages = pdfDocument.requirePages();
System.out.println("Deleting " + String.valueOf(pages.getNumPages()-1) + " pages...");
// Delete from page 10 to the end of the document
pmmService.deletePages(pages.getPage(10), pages.getNumPages()-10);
String outputFileName1 = outputFile1;
ByteWriter outputFile1 = SampleFileServices.getRAFByteWriter(outputDir + outputFileName1);
// Save just the incremental changes to the document
pdfDocument.save(outputFile1, PDFSaveIncrementalOptions.newInstance());
System.out.println("After Incremental Save: " + padLeft(formatter.format(pdfDocument.getFileSize()),7));
String outputFileName2 = outputFile2;
ByteWriter outputFile2 = SampleFileServices.getRAFByteWriter(outputDir + outputFileName2);
// Save Full with a default set of options
pdfDocument.save(outputFile2, PDFSaveFullOptions.newInstance());
System.out.println("After Full Save Default: " + padLeft(formatter.format(pdfDocument.getFileSize()),7));
String outputFileName3 = outputFile3;
ByteWriter outputFile3 = SampleFileServices.getRAFByteWriter(outputDir + outputFileName3);
PDFSaveFullOptions pdfSaveFullOptions = PDFSaveFullOptions.newInstance();
// Save Full and set the compression to compress everything.
pdfSaveFullOptions.setObjectCompressionMode(PDFSaveOptions.OBJECT_COMPRESSION_ALL);
pdfSaveFullOptions.setForceCompress(true);
pdfDocument.save(outputFile3, pdfSaveFullOptions);
System.out.println("After Full Save Compress: " + padLeft(formatter.format(pdfDocument.getFileSize()),7));
}
public static String padLeft(String s, int n) {
return String.format("%1$" + n + "s", s);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment