> For the complete documentation index, see [llms.txt](https://docs.pd4ml.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pd4ml.com/pdf-tools/pd4ml-pdf-optimizer/pd4ml-optimize-examples.md).

# Examples

*Available starting from PD4ML v4.1.1*

All examples live under `src/test/java/com/pd4ml/pdf/optimizer/example/usecases/` (test scope -- not shipped in the distributed jar) and are ordinary runnable classes with a `main(String[] args)`. Easiest from an IDE: right-click the class, Run. From the command line:

```bash
mvn test-compile
mvn dependency:build-classpath -Dmdep.outputFile=cp.txt
java -cp "target/test-classes;target/classes;$(cat cp.txt)" \
     com.pd4ml.pdf.optimizer.example.usecases.<ClassName> <args...>
```

Every example builds its own small sample PDF in memory (no external fixture files needed) and was actually run end-to-end -- these aren't untested snippets.

| #  | Class                                 | Demonstrates                                                                                                                               |
| -- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| 01 | `Ex01_BasicCleanup`                   | The minimal call: clean up a PDF with real orphaned objects from an incremental-update edit. Start here.                                   |
| 02 | `Ex02_AlreadyCleanIsANoop`            | Optimizing an already-clean document reports zero removed objects -- a report, not an assumption.                                          |
| 03 | `Ex03_SharedResourceIsNotDuplicated`  | Two pages sharing one font object still share it after optimizing.                                                                         |
| 04 | `Ex04_EncryptedInputRequiresPassword` | Optimizing an encrypted input needs its password; the output is plain by default.                                                          |
| 05 | `Ex05_EncryptOutput`                  | Cleaning a PDF and re-encrypting the output in the same call.                                                                              |
| 06 | `Ex06_ErrorHandlingPatterns`          | Every `PdfOptimizeException` failure mode and how to recognize it.                                                                         |
| 07 | `Ex07_DuplicateContentDeduplication`  | Two originally-distinct but byte-identical font objects are merged into one by default; turning that off with `deduplicateContent(false)`. |

For a ready-made command-line tool covering the same ground without writing any code, see the [pd4optimizecli Reference](/pdf-tools/pd4ml-pdf-optimizer/pd4optimizecli-reference.md) and run `com.pd4ml.pdf.optimizer.cli.Pd4OptimizeCli`.

## See also

* [PD4ML PDF Optimizer Manual](/pdf-tools/pd4ml-pdf-optimizer/pd4ml-optimize-manual.md) -- the programmer's manual behind these examples.
* [pd4optimizecli Reference](/pdf-tools/pd4ml-pdf-optimizer/pd4optimizecli-reference.md) -- command-line reference for `com.pd4ml.pdf.optimizer.cli.Pd4OptimizeCli`.
* [PD4ML COS API Manual](/pdf-tools/pd4ml-pdf-cos/pd4ml-cos-api-manual.md) / [PD4ML COS Examples](/pdf-tools/pd4ml-pdf-cos/pd4ml-cos-examples.md) -- standalone `com.pd4ml.pdf.cos` foundation this package is built on.
* [PD4ML PDF Merge Manual](/pdf-tools/pd4ml-pdf-merge/pd4ml-merge-manual.md) / [PD4ML Merge Examples](/pdf-tools/pd4ml-pdf-merge/pd4ml-merge-examples.md) -- combining page ranges from multiple PDFs, a natural companion pass.
* [PD4ML XFDF Manual](/pdf-tools/pd4ml-pdf-xfdf/pd4ml-xfdf-manual.md) / [PD4ML XFDF Examples](/pdf-tools/pd4ml-pdf-xfdf/pd4ml-xfdf-examples.md) -- importing annotations/form field values, which offers its own `--optimize` post-import cleanup delegating to this same package.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.pd4ml.com/pdf-tools/pd4ml-pdf-optimizer/pd4ml-optimize-examples.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
