> For the complete documentation index, see [llms.txt](https://docs.apryse.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.apryse.com/android/annotation/toolmanager-config.md).

# Customize ToolManager

Learn how to build and customize ToolManager for PDF interaction tools with ToolManagerBuilder. Create custom ToolManager styles and integrate image stamps and signatures seamlessly. Check out our gui

You will need to use [`ToolManager`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/tools/ToolManager.html) for PDF interaction tools to work. You can build it easily using [`ToolManagerBuilder`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ToolManagerBuilder.html), a helper class for configuring and creating `ToolManager`. It also sets `ToolManager` to a specific [`PDFViewCtrl`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/PDFViewCtrl.html).

## Build a default ToolManager

To build a default `ToolManager`, use `ToolManagerBuilder` and pass in an instance of `PDFViewCtrl`:

{% tabs %}
{% tab title="Java" %}
{% code lineNumbers="true" %}

```java
ToolManager mToolManager = ToolManagerBuilder.from()
    .build(getActivity(), pdfViewCtrl);
```

{% endcode %}
{% endtab %}

{% tab title="Kotlin" %}
{% code lineNumbers="true" %}

```kotlin
val mToolManager = ToolManagerBuilder.from()
    .build(getActivity(), pdfViewCtrl)
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Build a custom ToolManager programmatically

You can customize the `ToolManager` programmatically with `ToolManagerBuilder`:

{% tabs %}
{% tab title="Java" %}
{% code lineNumbers="true" %}

```java
ToolManager mToolManager = ToolManagerBuilder.from()
    .setEditInk(true)
    .setOpenToolbar(true)
    .setBuildInPageIndicator(false)
    .setCopyAnnot(true)
    .disableToolModes(new ToolManager.ToolMode[]{
        ToolManager.ToolMode.TEXT_ANNOT_CREATE,
        ToolManager.ToolMode.TEXT_CREATE,
        ToolManager.ToolMode.TEXT_SQUIGGLY,
        ToolManager.ToolMode.INK_ERASER,
        ToolManager.ToolMode.FORM_CHECKBOX_CREATE,
        ToolManager.ToolMode.RECT_CREATE,
        ToolManager.ToolMode.TEXT_LINK_CREATE
    })
    .build(getActivity(), pdfViewCtrl);
```

{% endcode %}
{% endtab %}

{% tab title="Kotlin" %}
{% code lineNumbers="true" %}

```kotlin
val mToolManager = ToolManagerBuilder.from()
    .setEditInk(true)
    .setOpenToolbar(true)
    .setBuildInPageIndicator(false)
    .setCopyAnnot(true)
    .disableToolModes(
      arrayOf(
        ToolManager.ToolMode.TEXT_ANNOT_CREATE,
        ToolManager.ToolMode.TEXT_CREATE,
        ToolManager.ToolMode.TEXT_SQUIGGLY,
        ToolManager.ToolMode.INK_ERASER,
        ToolManager.ToolMode.FORM_CHECKBOX_CREATE,
        ToolManager.ToolMode.RECT_CREATE,
        ToolManager.ToolMode.TEXT_LINK_CREATE
      )
    )
    .build(getActivity(), pdfViewCtrl)
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Supporting image stamp and image signatures

Image stamps and image signatures require a source image in order to create the annotation. If you are using `PDFViewCtrl` with `ToolManager`, will need to handle this manually in your app by implementing the methods `ToolManager.AdvancedAnnotationListener.imageStamperSelected(PointF)` and `ToolManager.AdvancedAnnotationListener.imageSignatureSelected(PointF, int, Long)`.

For reference you can check out our PDFViewCtrl integration guide [here](https://github.com/ApryseSDK/pdftron-android-samples/tree/master/PDFViewCtrlViewer/)

## Build a custom ToolManager with style

You can also customize the `ToolManager` by defining an Android style resource and passing it to `ToolManagerBuilder`:

1. Create a custom style in your `res/values/styles.xml` file:For additional customization, a list of supported style attributes are defined in this table.

{% tabs %}
{% tab title="XML" %}
{% code lineNumbers="true" %}

```xml
<style name="MyToolManager"> <!-- allow editing ink annotations (only works if annotation toolbar is present) --> <item name="edit_ink_annots">true</item> <!-- when ink selected in annotation toolbar, it should open its own ink toolbar --> <item name="open_toolbar_on_pan_ink_selected">true</item> <!-- hide the built-in page number indicator --> <item name="build_in_page_number_indicator">false</item> <!-- whether to copy marked-up text of TextMarkup annot to annotation's 'content' property upon TextMarkup annotation creation --> <item name="copy_annotated_text_to_note">true</item> <!-- remove some tools from AnnotationToolbarComponent and QuickMenu --> <item name="disable_tool_modes">@array/disable_tool_modes</item> </style>
```

{% endcode %}
{% endtab %}
{% endtabs %}

1. In the previous step, `@array/disable_tool_modes` is a string array defining tool modes that should be disabled. You can define it in `res/values/arrays.xml`:Each `<item>` in the array needs to be a string matching one of the enum values from [`ToolManager.ToolMode`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/tools/ToolManager.ToolMode.html).

{% tabs %}
{% tab title="XML" %}
{% code lineNumbers="true" %}

```xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="disable_tool_modes">
        <item>TEXT_ANNOT_CREATE</item>
        <item>TEXT_CREATE</item>
        <item>TEXT_SQUIGGLY</item>
        <item>INK_ERASER</item>
        <item>FORM_CHECKBOX_CREATE</item>
        <item>RECT_CREATE</item>
        <item>TEXT_LINK_CREATE</item>
    </string-array>
</resources>
```

{% endcode %}
{% endtab %}
{% endtabs %}

{% hint style="info" %}
You can also set up ToolManagerBuilder programmatically. For a list of settings available, see the [`ToolManagerBuilder API`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ToolManagerBuilder.html)[.](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ToolManagerBuilder.html)
{% endhint %}

1. Lastly, build the `ToolManager` using `ToolManagerBuilder` and pass in your custom style and an instance of `PDFViewCtrl`:Alternatively, you can pass the `ToolManager` style resource directly to [`ViewerConfig.Builder`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html). You can learn more about configuring `ToolManager` with `ViewerConfig` in the viewer configuration guides.

{% tabs %}
{% tab title="Java" %}
{% code lineNumbers="true" %}

```java
ToolManager mToolManager = ToolManagerBuilder.from(context, R.style.MyToolManager)
    .build(getActivity(), pdfViewCtrl);
```

{% endcode %}
{% endtab %}

{% tab title="Kotlin" %}
{% code lineNumbers="true" %}

```kotlin
val mToolManager = ToolManagerBuilder.from(context, R.style.MyToolManager)
    .build(getActivity(), pdfViewCtrl)
```

{% endcode %}
{% endtab %}
{% endtabs %}

## XML style attributes

| Attributes                         | Description                                                                                                                                    | Format            |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- |
| `edit_ink_annots`                  | Controls whether editing ink annotations is allowed (only works if annotation toolbar is present) Default value: false                         | Format: boolean   |
| `open_toolbar_on_pan_ink_selected` | Whether annotation toolbar should open when Ink is selected from quick menu (only works if annotation toolbar is present) Default value: false | Format: boolean   |
| `build_in_page_number_indicator`   | Whether to use/show the built-in page number indicator Default value: true                                                                     | Format: boolean   |
| `annot_permission_check`           | Whether to check annotation author's permission Default value: false                                                                           | Format: boolean   |
| `show_author_dialog`               | Whether to show author dialog the first time the user annotates Default value: false                                                           | Format: boolean   |
| `copy_annotated_text_to_note`      | Whether to copy marked-up text of TextMarkup annot to annotation's 'content' property upon TextMarkup annotation creation Default value: false | Format: boolean   |
| `stylus_as_pen`                    | Whether to enable using stylus to draw without having to enter ink tool Default value: false                                                   | Format: boolean   |
| `ink_smoothing_enabled`            | Whether to smooth ink annotations Default value: true                                                                                          | Format: boolean   |
| `auto_select_annotation`           | Whether to auto-select annotations after they are created Default value: true                                                                  | Format: boolean   |
| `quick_menu_disable`               | Whether disable showing quick menu Default value: false                                                                                        | Format: boolean   |
| `double_tap_to_zoom`               | Whether double-tapping should zoom the viewer Default value: true                                                                              | Format: boolean   |
| `auto_resize_freetext`             | Whether can auto resize free text bounding box when editing Default value: false                                                               | Format: boolean   |
| `realtime_annot_edit`              | Whether annotation editing is real time Default value: true                                                                                    | Format: boolean   |
| `edit_freetext_on_tap`             | Whether can edit freetext on tap Default value: false                                                                                          | Format: boolean   |
| `show_saved_signatures`            | Whether can show saved signatures in signature dialog Default value: true                                                                      | Format: boolean   |
| `show_annot_indicator`             | Whether can show indicator for annotations with comments Default value: true                                                                   | Format: boolean   |
| `disable_tool_modes`               | Array of tools to disable Default value: null                                                                                                  | Format: reference |
| `disable_annot_editing_by_types`   | Array of annotation types to disable editing Default value: null                                                                               | Format: reference |


---

# 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.apryse.com/android/annotation/toolmanager-config.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.
