How to Delete Pages from PDF Files with Java
This step-by-step tutorial explains how a Java application can delete pages from PDF files through the Split PDF API Tool. The code uses Split PDF ranges to retain every required page while intentionally omitting pages that should be removed. After reviewing the example, you'll be ready to delete pages from PDF files with your own input.
Why Delete Pages from PDF Files with Java?
A scanning workflow may insert separator or blank pages that should not appear in the final case file. Defining retained ranges lets Java produce the cleaned document without editing pages locally.
Split PDF uses each pages[] value to define an output range. The tutorial adapts the Java sample to keep pages before and after the page being removed.
Java Code Example
import io.github.cdimascio.dotenv.Dotenv;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.*;
import org.json.JSONObject;
public class DeletePagesFromPDF {
// By default, we use the US-based API service. This is the primary endpoint for global use.
private static final String API_URL = "https://api.pdfrest.com";
// For GDPR compliance and enhanced performance for European users, you can switch to the EU-based
// service by commenting out the URL above and uncommenting the URL below.
// For more information visit https://pdfrest.com/pricing#how-do-eu-gdpr-api-calls-work
// private static final String API_URL = "https://eu-api.pdfrest.com";
// Specify the path to your file here, or as the first argument when running the program.
private static final String DEFAULT_FILE_PATH = "/path/to/file.pdf";
// Specify your API key here, or in the environment variable PDFREST_API_KEY.
// You can also put the environment variable in a .env file.
private static final String DEFAULT_API_KEY = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
public static void main(String[] args) {
File inputFile;
if (args.length > 0) {
inputFile = new File(args[0]);
} else {
inputFile = new File(DEFAULT_FILE_PATH);
}
final Dotenv dotenv = Dotenv.configure().ignoreIfMalformed().ignoreIfMissing().load();
final RequestBody inputFileRequestBody =
RequestBody.create(inputFile, MediaType.parse("application/pdf"));
RequestBody requestBody =
new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", inputFile.getName(), inputFileRequestBody)
.addFormDataPart("pages[]", "1-3,5-last")
.addFormDataPart("output", "pdfrest_pages_deleted")
.build();
Request request =
new Request.Builder()
.header("Api-Key", dotenv.get("PDFREST_API_KEY", DEFAULT_API_KEY))
.url(API_URL + "/split-pdf")
.post(requestBody)
.build();
try {
OkHttpClient client =
new OkHttpClient().newBuilder().readTimeout(60, TimeUnit.SECONDS).build();
Response response = client.newCall(request).execute();
System.out.println("Result code " + response.code());
if (response.body() != null) {
System.out.println(prettyJson(response.body().string()));
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static String prettyJson(String json) {
// https://stackoverflow.com/a/9583835/11996393
return new JSONObject(json).toString(4);
}
}
Source: Java sample on GitHub. The linked source provides the common request pattern; the code shown here applies it to Delete Pages from PDF.
Breaking Down the Code
Load the Java HTTP and JSON dependencies
import io.github.cdimascio.dotenv.Dotenv; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import okhttp3.*; import org.json.JSONObject;
The sample combines OkHttp networking with dotenv configuration and org.json processing.
Choose the input and load credentials
// service by commenting out the URL above and uncommenting the URL below.
// For more information visit https://pdfrest.com/pricing#how-do-eu-gdpr-api-calls-work
// private static final String API_URL = "https://eu-api.pdfrest.com";
// Specify the path to your file here, or as the first argument when running the program.
private static final String DEFAULT_FILE_PATH = "/path/to/file.pdf";
// Specify your API key here, or in the environment variable PDFREST_API_KEY.
// You can also put the environment variable in a .env file.
private static final String DEFAULT_API_KEY = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
public static void main(String[] args) {
File inputFile;
if (args.length > 0) {
inputFile = new File(args[0]);
} else {
inputFile = new File(DEFAULT_FILE_PATH);
}
final Dotenv dotenv = Dotenv.configure().ignoreIfMalformed().ignoreIfMissing().load();
final RequestBody inputFileRequestBody =
The configuration block supports quick local testing while allowing normal callers to provide their own path and PDFREST_API_KEY.
Build the multipart request body
final RequestBody inputFileRequestBody =
RequestBody.create(inputFile, MediaType.parse("application/pdf"));
RequestBody requestBody =
new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", inputFile.getName(), inputFileRequestBody)
.addFormDataPart("pages[]", "1-3,5-last")
.addFormDataPart("output", "pdfrest_pages_deleted")
.build();
Request request =
new Request.Builder()
.header("Api-Key", dotenv.get("PDFREST_API_KEY", DEFAULT_API_KEY))
.url(API_URL + "/split-pdf")
.post(requestBody)
.build();
try {
OkHttpClient client =
Split PDF uses each pages[] value to define an output range. The tutorial adapts the Java sample to keep pages before and after the page being removed. The form-data setup collects the named parts before OkHttp calculates the final multipart header and body encoding.
Send the request to pdfRest
.build();
Request request =
new Request.Builder()
.header("Api-Key", dotenv.get("PDFREST_API_KEY", DEFAULT_API_KEY))
.url(API_URL + "/split-pdf")
.post(requestBody)
.build();
try {
OkHttpClient client =
new OkHttpClient().newBuilder().readTimeout(60, TimeUnit.SECONDS).build();
Response response = client.newCall(request).execute();
The client request adds the API key header, selects the operation URL, and attaches the prepared body; changing the base constant switches between US and EU service hosts.
Read the API response
try {
OkHttpClient client =
new OkHttpClient().newBuilder().readTimeout(60, TimeUnit.SECONDS).build();
Response response = client.newCall(request).execute();
System.out.println("Result code " + response.code());
if (response.body() != null) {
System.out.println(prettyJson(response.body().string()));
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static String prettyJson(String json) {
// https://stackoverflow.com/a/9583835/11996393
return new JSONObject(json).toString(4);
The response check shows the raw outcome for learning purposes; production code can retain output IDs and branch on reported errors.
Beyond the Tutorial
The completed example gives you a practical Java starting point for learning how to delete pages from PDF files. With that foundation, you can use range omission to remove cover sheets, blank pages, superseded sections, or accidental scans.
As you apply the pattern to real documents, keep in mind that the API receives ranges to keep, not a list of pages to destroy, so calculate complements carefully when page counts vary. Preserve the original PDF until the retained-page result has been verified, especially when page numbers come from user input or another service.
Before integrating this workflow, test representative documents with the Delete Pages from PDF operation in API Lab. Then use the Split PDF API Tool documentation to review every available parameter and response field.
Note: The Delete Pages from PDF example above uses multipart form data; to reuse a resource ID, review how the JSON payload example constructs the request.