> 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/changelogs/version-7/v7-1-3.md).

# Version 7.1.3 Changelog (June 10, 2020)

World's #1 PDF SDK Library for Web, Mobile, Server, Desktop

Version: 7.1.3.75118

Release Date: June 10, 2020

## New features

* Ability to crop existing image stamps

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-cfd7103f7a47f7b7d648b43c6f170a3b25e0d065%2Fdabdf632d5c0d5c3d6c3c0691e089c5ebc1ff277-410x854.gif?alt=media)

* [New API](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ToolManagerBuilder.html#addAnnotStyleProperty\(com.pdftron.pdf.model.AnnotStyleProperty\)) to control which items should show up in the annotation style picker, see guide: [Customize style picker](/android/annotation/customize-color-picker.md)
* [New API](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/controls/ReflowControl.OnReflowLongPressListener.html) to customize long press behaviour in reflow mode
* \[New API]\(<https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/utils/AnnotUtils.html#xfdfCommandExtract(com.pdftron.pdf.PDFDoc>, java.util.List\<java.lang.String>, java.util.List\<java.lang.String>, java.util.List\<java.lang.String>)) to generate XFDF command string from annotation ids
* [New API](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#reflowOrientation\(int\)) in [`ViewerConfig.Builder`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html) to specify reflow mode orientation
* [`CollabViewerBuilder`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/collab/ui/viewer/CollabViewerBuilder.html) now supports all APIs supported in [`ViewerBuilder`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerBuilder.html)

## Dependency changes

* `com.pdftron:pagecropper` is now **removed** from the `PDFViewCtrlTools` library project and all samples
* `com.edmodo:cropper` is now **added** to the `PDFViewCtrlTools` library project and all samples

## Fixed

* Fixed issue where it is possible for `PDFViewCtrl.openUrlAsync` to succeed but document still do not show up
* Fixed issue where signature dialog is small in landscape mode on phones
* Fixed issue where annotations may not show up correctly in collaboration viewer if `importAnnotationCommand` is called too many times at the same time
* Fixed issue where page number may not show up correctly in reflow mode when `PDFViewCtrl` is in continuous mode
* Fixed issue where double tap zoom had unexpected behaviour when `PDFViewCtrl` is in `ZOOM` view mode
* Fixed issue where individual annotation permission check does not work if `AnnotManager` is set
* Fixed crash when app label is not a string resource
* Fixed potential ANR when quickly changing pages in reflow mode
* Fixed unexpected behaviour when `userBookmarksListEditingEnabled` is set to false
* Performance improvement in eraser tool

## APIs

### Apryse package

#### PDFDraw

*new* method: `Bitmap getBitmap(Page, Bitmap.Config)`

#### PDFViewCtrl

*new* method: `Rect jumpToAnnotOnPage(Annot, int)`

### PDFViewCtrlTools package

#### ToolManagerBuilder

*new* method: `ToolManagerBuilder addAnnotStyleProperty(AnnotStyleProperty)`

#### ViewerConfig

*new* method: `int getReflowOrientation()`

#### ViewerConfig.Builder

*new* method: `Builder reflowOrientation(int)`

#### AnnotStyleDialogFragment

*new* method: `void setAnnotStyleProperties(HashMap<Integer, AnnotStyleProperty>)`

#### AnnotStyleView

*new* method: `void setAnnotStyleProperties(HashMap<Integer, AnnotStyleProperty>)`

#### AnnotToolbarOverflowPopupWindow

*new* method: `void showAsDropDown(View, int, int, int)`

#### AnnotationToolbar

*new* method: `boolean canExpand()`

#### PdfViewCtrlTabFragment

*new* method: `ReflowControl getReflowControl()`

*new* method: `boolean handleKeyShortcut(int, KeyEvent)`

#### TabListener

*new* method: `boolean onHandleKeyShortcutEvent(int, KeyEvent)`

#### PdfViewCtrlTabHostFragment

*new* method: `void addReflowControlListener(ReflowControlListener)`

*new* method: `void clearReflowControlListeners()`

*new* method: `boolean handleKeyShortcutEvent(int, KeyEvent)`

*new* method: `boolean onHandleKeyShortcutEvent(int, KeyEvent)`

*new* method: `void removeReflowControlListener(ReflowControlListener)`

#### ReflowControlListener

*new* interface: `ReflowControlListener`

*new* method: `void onToggleReflowMode()`

#### ReflowControl

*new* method: `void addReflowLongPressListener(OnReflowLongPressListener)`

*new* method: `void clearReflowLongPressListeners()`

*new* method: `void onReflowPagerLongPress(WebView, MotionEvent)`

*new* method: `void onReflowPagerSingleTapUp(WebView, MotionEvent)`

*new* method: `void removeReflowLongPressListener(OnReflowLongPressListener)`

*removed* method: `void onReflowPagerSingleTapUp(MotionEvent)`

#### OnReflowLongPressListener

*new* interface: `OnReflowLongPressListener`

*new* method: `void onReflowLongPress(WebView, MotionEvent)`

#### ReflowPagerAdapter

*new* method: `void onReflowWebViewLongPress(WebView, MotionEvent)`

#### ReflowPagerAdapterCallback

*new* method: `void onReflowPagerLongPress(WebView, MotionEvent)`

*new* method: `void onReflowPagerSingleTapUp(WebView, MotionEvent)`

*removed* method: `void onReflowPagerSingleTapUp(MotionEvent)`

#### UserBookmarkDialogFragment

*new* static final field: `String BUNDLE_ALLOW_EDITING`

*new* method: `UserBookmarkDialogFragment setAllowEditing(boolean)`

#### CreateSignatureFragment

*new* static method: `CreateSignatureFragment newInstance(int, float, boolean, boolean, HashMap<Integer, AnnotStyleProperty>)`

*removed* static method: `CreateSignatureFragment newInstance(int, float, boolean, boolean)`

#### SignatureDialogFragmentBuilder

*new* method: `SignatureDialogFragmentBuilder usingAnnotStyleProperties(HashMap<Integer, AnnotStyleProperty>)`

#### SignatureFragmentAdapter

*new* constructor: `SignatureFragmentAdapter(FragmentManager, String, String, Toolbar, Toolbar, int, float, boolean, boolean, int, OnCreateSignatureListener, OnSavedSignatureListener, boolean, HashMap<Integer, AnnotStyleProperty>)`

*removed* constructor: `SignatureFragmentAdapter(FragmentManager, String, String, Toolbar, Toolbar, int, float, boolean, boolean, int, OnCreateSignatureListener, OnSavedSignatureListener, boolean)`

#### EditListAdapter

*new* method: `void setAllowEditing(boolean)`

#### AnnotStyleProperty

*new* final class: `AnnotStyleProperty`

*new* constructor: `AnnotStyleProperty(int)`

*new* static final field: `Creator<AnnotStyleProperty> CREATOR`

*new* method: `boolean canShowDateFormat()`

*new* method: `boolean canShowEraserMode()`

*new* method: `boolean canShowEraserType()`

*new* method: `boolean canShowFillColor()`

*new* method: `boolean canShowFont()`

*new* method: `boolean canShowIcons()`

*new* method: `boolean canShowOpacity()`

*new* method: `boolean canShowPreset()`

*new* method: `boolean canShowPressure()`

*new* method: `boolean canShowRichContent()`

*new* method: `boolean canShowRulerPrecision()`

*new* method: `boolean canShowRulerUnit()`

*new* method: `boolean canShowSnap()`

*new* method: `boolean canShowStrokeColor()`

*new* method: `boolean canShowTextColor()`

*new* method: `boolean canShowTextOverlay()`

*new* method: `boolean canShowTextSize()`

*new* method: `boolean canShowThickness()`

*new* method: `int describeContents()`

*new* method: `int getAnnotType()`

*new* method: `AnnotStyleProperty setCanShowDateFormat(boolean)`

*new* method: `AnnotStyleProperty setCanShowEraserMode(boolean)`

*new* method: `AnnotStyleProperty setCanShowEraserType(boolean)`

*new* method: `AnnotStyleProperty setCanShowFillColor(boolean)`

*new* method: `AnnotStyleProperty setCanShowFont(boolean)`

*new* method: `AnnotStyleProperty setCanShowIcons(boolean)`

*new* method: `AnnotStyleProperty setCanShowOpacity(boolean)`

*new* method: `AnnotStyleProperty setCanShowPreset(boolean)`

*new* method: `AnnotStyleProperty setCanShowPressure(boolean)`

*new* method: `AnnotStyleProperty setCanShowRichContent(boolean)`

*new* method: `AnnotStyleProperty setCanShowRulerPrecision(boolean)`

*new* method: `AnnotStyleProperty setCanShowRulerUnit(boolean)`

*new* method: `AnnotStyleProperty setCanShowSnap(boolean)`

*new* method: `AnnotStyleProperty setCanShowStrokeColor(boolean)`

*new* method: `AnnotStyleProperty setCanShowTextColor(boolean)`

*new* method: `AnnotStyleProperty setCanShowTextOverlay(boolean)`

*new* method: `AnnotStyleProperty setCanShowTextSize(boolean)`

*new* method: `AnnotStyleProperty setCanShowThickness(boolean)`

*new* method: `void writeToParcel(Parcel, int)`

#### AnnotEdit

*removed* method: `boolean showMenu(RectF)`

#### ToolManager

*new* method: `void addAnnotStyleProperty(AnnotStyleProperty)`

*new* method: `HashMap<Integer, AnnotStyleProperty> getAnnotStyleProperties()`

*new* method: `boolean isPaused()`

*new* method: `void onPause()`

*new* method: `void onResume()`

#### AnalyticsParam

*new* static method: `HashMap<String, String> passFailParam(boolean)`

#### AnnotUtils

*new* static method: `boolean isImageStamp(Annot)`

*new* static method: `String xfdfCommandExtract(PDFDoc, List<String>, List<String>, List<String>)`

#### PressureInkUtils

*removed* static method: `EraserData erasePoints(PDFViewCtrl, Ink, List<PointF>, float)`

*removed* static method: `EraserData erasePressureStrokes(PDFViewCtrl, Ink, List<PointF>, float)`

#### ReflowWebView

*new* method: `void dispose()`

*new* method: `void setDisposable(Disposable)`

#### ReflowWebViewCallback

*new* method: `void onReflowWebViewLongPress(WebView, MotionEvent)`

#### Utils

*new* static method: `boolean uriHasReadPermission(Context, Uri, CancellationSignal)`

#### AnnotView

*new* method: `PTCropImageView getCropImageView()`

*new* method: `boolean isCropMode()`

*new* method: `void setCropMode(boolean)`

#### PTCropImageView

*new* class: `PTCropImageView`

*new* constructor: `PTCropImageView(Context)`

*new* constructor: `PTCropImageView(Context, AttributeSet)`

*new* constructor: `PTCropImageView(Context, AttributeSet, int)`

*new* method: `RectF getCropRectPercentageMargins()`

*new* method: `boolean hasBitmap()`

*new* method: `boolean onTouchEvent(MotionEvent)`

*new* method: `void setCropImageViewListener(CropImageViewListener)`

*new* method: `void setCropRectPercentageMargins(RectF)`

#### CropImageViewListener

*new* interface: `CropImageViewListener`

*new* method: `void onDown(MotionEvent)`

*new* method: `void onUp(MotionEvent)`

### pdftron-collab package

#### DataRepository

*new* method: `Completable consumeLastAnnotations(ArrayList<String>)`

*new* method: `void consumeLastAnnotationsImpl(ArrayList<String>)`

#### LastAnnotationDao

*new* method: `void deleteByIds(List<String>)`

#### CustomServiceUtils

*modified* static method: `void addLastXfdf(CollabDatabase, String)`

|       | Declaration                                              |
| ----- | -------------------------------------------------------- |
| From: | public static void addLastXfdf(CollabDatabase, String)   |
| To:   | public static String addLastXfdf(CollabDatabase, String) |

#### CollabViewerBuilder

*new* method: `Fragment build(Context)`

*new* method: `Bundle createBundle(Context)`

*new* method: `int describeContents()`

*new* method: `boolean equals(Object)`

*new* method: `int hashCode()`

*new* method: `CollabViewerBuilder usingCacheFolder(boolean)`

*new* method: `CollabViewerBuilder usingConfig(ViewerConfig)`

*new* method: `CollabViewerBuilder usingCustomHeaders(JSONObject)`

*new* method: `CollabViewerBuilder usingCustomToolbar(int[])`

*new* method: `CollabViewerBuilder usingFileType(int)`

*new* method: `CollabViewerBuilder usingNavIcon(int)`

*new* method: `CollabViewerBuilder usingQuitAppMode(boolean)`

*new* method: `CollabViewerBuilder usingTabClass(Class<? extends CollabViewerTabFragment>)`

*new* method: `CollabViewerBuilder usingTabHostClass(Class<? extends CollabViewerTabHostFragment>)`

*new* method: `CollabViewerBuilder usingTabTitle(String)`

*new* method: `void writeToParcel(Parcel, int)`

*modified* class: `CollabViewerBuilder`

|       | Declaration                                                                                                                               |
| ----- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| From: | public class CollabViewerBuilder extends GenericViewerBuilder\<CollabViewerTabHostFragment, CollabViewerTabFragment, CollabViewerBuilder> |
| To:   | public class CollabViewerBuilder extends SkeletalFragmentBuilder                                                                          |

#### AnnotationViewModel

*new* method: `Completable consumeLastAnnotations(ArrayList<String>)`


---

# 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/changelogs/version-7/v7-1-3.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.
