Some test text!

Discord Logo

Chat with us

PDFTron is now Apryse, learn more here.

Android / Changelog / v7.0.5


PDFTron is now Apryse, learn more here.

Version 7.0.5 Changelog (February 3, 2020)


Release Date: February 3, 2020

New features

Document with imagesReflow with images
Dotted pageIsometric dotted page
  • Korean translation is now shipped with the library

Dependency changes

  • Compile and target Android version is changed from 28 to 29
  • com.squareup.picasso:picasso version is changed from 2.5.2 to 2.71828
  • com.pdftron:floatingactionbutton is now removed from the PDFViewCtrlTools library project and all samples
  • com.github.clans:fab is now added to the PDFViewCtrlTools library project and all samples


  • Fixed issue where the page number indicator is clickable when hidden
  • Fixed issue where ink and ink highlighter annotations appear to be incorrect size when resizing
  • Fixed issue where author is missing for stamp type annotations
  • Fixed issue where font entry in style picker showing incorrect selected font
  • Fixed issue where RTL setting is not preserved when using PdfViewCtrlTabHostFragment
  • Fixed issue where new free text will be wrongly populated with previous free text content
  • Fixed issue where sticky note with custom appearance will disappear when selected
  • Fixed potential crash related to showing toast on API 25
  • Fixed potential crash in CollabViewerTabHostFragment when initial load of XFDF is too large
  • Many UI polish improvements


Apryse package


new method: void docLockRead(LockRunnable)

new method: void docLock(boolean, LockRunnable)

PDFViewCtrlTools package


new method: void setAllowDragAmongSections(boolean)


new method: boolean isQuickScaleEnabled()

new method: PDFViewCtrlConfig setQuickScaleEnabled(boolean)


new method: EraserType getCustomEraserType(Context, int, String)

new method: boolean getCustomPressureSensitive(Context, int, String)

new method: boolean getDefaultPressureSensitivity(Context, int)

new method: boolean getDefaultPressureSensitivity(Context, int, int)

new method: String getEraserTypeKey(int, String)

new method: String getPressureSensitiveKey(int, String)


new method: Builder hideViewModeItems(ViewModePickerItems[])

new method: Builder showEditMenuOption(boolean)

new method: Builder showReflowOption(boolean)

new method: Builder useStandardLibrary(boolean)


new static final field: PageType Dotted

new static final field: PageType IsometricDotted


new method: void setCanShowPressureSwitch(boolean)


new method: void setCanShowPressureSwitch(boolean)


new field: ViewerBuilder mViewerBuilder


new method: void onEditToolbarMenu()

new method: void restoreSavedMenu()


new constructor: ThumbnailsViewAdapter(Context, EditPagesListener, FragmentManager, PDFViewCtrl, List<Integer>, int, ViewHolderBindListener)

new method: void add(Integer)

new method: void addAll(List<Integer>)

new method: void clear()

new method: int getPositionForPage(int)

new method: void insert(Integer, int)

new method: boolean remove(Integer)

new method: void setData(List<Integer>)

new method: void setItem(int, int)

removed constructor: ThumbnailsViewAdapter(Context, EditPagesListener, FragmentManager, PDFViewCtrl, List<Map<String, Object>>, int, ViewHolderBindListener)

removed method: void add(Map<String, Object>)

removed method: void clearOffScreenResources()

removed method: void insert(Map<String, Object>, int)

removed method: boolean remove(Map<String, Object>)

modified class: ThumbnailsViewAdapter

From:public class ThumbnailsViewAdapter extends SimpleRecyclerViewAdapter<Map<String, Object>, PageViewHolder> implements ThumbAsyncListener, ItemTouchHelperAdapter, PasswordDialogFragmentListener
To:public class ThumbnailsViewAdapter extends SimpleRecyclerViewAdapter<Integer, PageViewHolder> implements ThumbAsyncListener, ItemTouchHelperAdapter, PasswordDialogFragmentListener


new class: ThumbnailsViewFilterMode

new constructor: ThumbnailsViewFilterMode(Integer)

new method: Integer getFilterMode()

new method: void observeFilterTypeChanges(LifecycleOwner, Observer<Integer>)

new method: void publishFilterTypeChange(Integer)


new static final field: int FILTER_MODE_ANNOTATED

new static final field: int FILTER_MODE_BOOKMARKED

new static final field: int FILTER_MODE_NORMAL


removed static final field: int ITEM_ID_USERCROP


new final class: ViewModePickerItems

new static final field: ViewModePickerItems ITEM_ID_COLORMODE

new static final field: ViewModePickerItems ITEM_ID_CONTINUOUS

new static final field: ViewModePickerItems ITEM_ID_FACING_COVER

new static final field: ViewModePickerItems ITEM_ID_REFLOW

new static final field: ViewModePickerItems ITEM_ID_ROTATION

new static final field: ViewModePickerItems ITEM_ID_TEXT_SIZE

new static final field: ViewModePickerItems ITEM_ID_USERCROP

new method: int getValue()

new static method: ViewModePickerItems valueOf(String)

new static method: ViewModePickerItems[] values()


new class: MenuEditorAdapter

new constructor: MenuEditorAdapter()

new constructor: MenuEditorAdapter(ArrayList<MenuEditorItem>)

new static final field: int VIEW_TYPE_CONTENT

new static final field: int VIEW_TYPE_HEADER

new method: int getItemCount()

new method: int getItemViewType(int)

new method: void insert(MenuEditorItem, int)

new method: boolean isHeader(int)

new method: void notifyHeadersChanged()

new method: void onBindViewHolder(ViewHolder, int)

new method: ViewHolder onCreateViewHolder(ViewGroup, int)

new method: void onItemDismiss(int)

new method: void onItemDrop(int, int)

new method: boolean onItemMove(int, int)

new method: MenuEditorItem removeAt(int)

new method: void setData(ArrayList<MenuEditorItem>)

new method: void setDragging(boolean)

new method: void setViewModel(MenuEditorViewModel)


new class: MenuEditorDialogFragment

new constructor: MenuEditorDialogFragment()

new static final field: String TAG

new static method: MenuEditorDialogFragment newInstance()

new method: void onCreate(Bundle)

new method: View onCreateView(LayoutInflater, ViewGroup, Bundle)

new method: void onDismiss(DialogInterface)

new method: void onViewCreated(View, Bundle)

new method: void setMenuEditorDialogFragmentListener(MenuEditorDialogFragmentListener)


new interface: MenuEditorDialogFragmentListener

new method: void onMenuEditorDialogDismiss()


new class: MenuEditorEvent

new method: Type getEventType()


new final class: Type

new static final field: Type RESET

new static method: Type valueOf(String)

new static method: Type[] values()


new class: MenuEditorViewModel

new constructor: MenuEditorViewModel(Application)

new method: LiveData<ArrayList<MenuEditorItem>> getItemsLiveData()

new final method: Observable<MenuEditorEvent> getObservable()

new method: void onReset()

new method: void setItems(ArrayList<MenuEditorItem>)


new interface: MenuEditorItem

new static final field: int GROUP_SHOW_IF_ROOM

new static final field: int GROUP_SHOW_NEVER

new method: boolean isHeader()


new class: MenuEditorItemContent

new constructor: MenuEditorItemContent(int, String, Drawable)

new constructor: MenuEditorItemContent(int, String, int)

new method: Drawable getDrawable()

new method: int getIconRes()

new method: int getId()

new method: String getTitle()

new method: boolean isHeader()


new class: MenuEditorItemHeader

new constructor: MenuEditorItemHeader(int, int, int)

new constructor: MenuEditorItemHeader(int, String, String)

new method: String getDescription()

new method: int getDescriptionId()

new method: String getDraggingTitle()

new method: int getDraggingTitleId()

new method: int getGroup()

new method: String getTitle()

new method: int getTitleId()

new method: boolean isHeader()

new method: void setDraggingTitle(String)

new method: void setDraggingTitleId(int)


new method: EraserType getEraserType()

new method: boolean getPressureSensitive()

new method: boolean hasPressureSensitivity()

new method: boolean isEraser()

new method: void setEraserType(EraserType)

new method: void setPressureSensitivity(boolean)


new static method: String getParentRelativePath(Uri, String)


new method: void setupAnnotProperty(AnnotStyle)

removed method: void setupAnnotProperty(int, float, float, int, String, String)


new static method: ArrayList<ArrayList<PointF>> createPageStrokesFromArrayObj(Obj)

new static method: List<List<PointF>> createStrokeListFromArrayObj(Obj)

new method: String getPressureSensitiveKey()

new method: void setPressureSensitive(boolean)

new method: void setupAnnotProperty(AnnotStyle)

new method: void setupEraserProperty(AnnotStyle)

removed static method: PointF convPagePtToDrawingPt(PDFViewCtrl, float, float, int, PointF)

removed static method: ArrayList<ArrayList<PointF>> createDrawingStrokesFromPageStrokes(PDFViewCtrl, ArrayList<ArrayList<PointF>>, boolean, int)

removed static method: ArrayList<ArrayList<PointF>> createDrawingStrokesFromPageStrokes(PDFViewCtrl, ArrayList<ArrayList<PointF>>, boolean, int, PointF)

removed method: void onLayout(boolean, int, int, int, int)

removed method: void onRenderingFinished()

removed method: void setupEraserProperty(float)

removed static method: void setupInkItem(Ink, InkItem, int)


removed method: boolean canInkUndo()

removed method: void takeInitialInkSnapshot()

removed method: void undoToPreviousInitialInk()


new method: void setEraseInkOnlyEnabled(boolean)

new method: void setPressureSensitiveEnabled(boolean)

new method: void setRichTextEnabled(boolean)


new static final field: int EVENT_AUTO_DRAW_OPTION

new static final field: int EVENT_STYLE_PICKER_OPTIONS


new static method: HashMap<String, String> stylePickerSelectEraserParam(boolean, int, String)

new static method: HashMap<String, String> stylePickerSelectPressureParam(boolean, int, String)

new static method: HashMap<String, String> stylePickerSelectRichTextParam(boolean, int, String)


new static method: int getAnnotationCountOnPage(PDFViewCtrl, int, ArrayList<Integer>)


new static method: void copyAnnot(Context, ArrayList<Annot>, PDFViewCtrl, OnClipboardTaskListener)


new static method: ArrayList<Integer> getPdfBookmarkedPageNumbers(PDFDoc)


new static method: void drawInk(PDFViewCtrl, Canvas, ArrayList<InkItem>, Matrix, PointF)

removed static method: void drawInk(PDFViewCtrl, Canvas, ArrayList<InkItem>, boolean)

removed static method: void drawInk(PDFViewCtrl, Canvas, ArrayList<InkItem>, boolean, Matrix, PointF, boolean)


new constructor: HTML2PDF(WebView, Uri)


new static final field: String KEY_PREF_THUMB_LIST_FILTER

new static method: boolean getInRTLMode(Context)

new static method: String getSavedHomeToolbarMenu(Context)

new static method: int getThumbListFilterMode(Context, int)

new static method: void setSavedHomeToolbarMenu(Context, String)

new static method: void updateInRTLMode(Context, boolean)

new static method: void updateThumbListFilterMode(Context, int)


new class: PressureInkUtils

new constructor: PressureInkUtils()

new static method: void clearThicknessList(Annot)

new static method: EraserData erasePoints(PDFViewCtrl, Ink, List<PointF>, float)

new static method: EraserData erasePointsAndThickness(List<List<PointF>>, List<List<Float>>, PDFViewCtrl, List<List<PointF>>, float, Rect)

new static method: List<double[]> generateOutlines(List<List<PointF>>, List<List<Float>>, float)

new static method: List<double[]> getThicknessArrays(Ink)

new static method: List<List<Float>> getThicknessList(Ink)

new static method: boolean isPressureSensitive(Annot)

new static method: boolean refreshCustomAppearanceForNewAnnot(PDFViewCtrl, Annot)

new static method: boolean refreshCustomInkAppearanceForExistingAnnot(Annot)

new static method: void setInkList(Ink, List<List<PointF>>)

new static method: void setThicknessList(Ink, List<List<Float>>)


new class: EraserData

new constructor: EraserData(boolean, List<List<PointF>>, List<List<Float>>)

new final field: boolean hasErased

new final field: List<List<PointF>> newStrokeList

new final field: List<List<Float>> newThicknessList


new static method: Single<File> duplicateInDownload(Context, ContentResolver, Uri, String)

new static method: File getExternalDownloadDirectory(Context)

new static method: boolean isAndroidQ()

removed static method: Single<File> duplicateInDownload(ContentResolver, Uri, String)


new static method: ArrayList<MenuEditorItem> getMenuEditorItemsArray(String)

new static method: String getMenuEditorItemsJSON(ArrayList<MenuEditorItem>)


new method: boolean hasIcon()


new method: boolean hasIcon()


new class: PTFloatingActionButton

new constructor: PTFloatingActionButton(Context)

new constructor: PTFloatingActionButton(Context, AttributeSet)

new constructor: PTFloatingActionButton(Context, AttributeSet, int)

new constructor: PTFloatingActionButton(Context, AttributeSet, int, int)


new class: PTFloatingActionMenu

new constructor: PTFloatingActionMenu(Context)

new constructor: PTFloatingActionMenu(Context, AttributeSet)

new constructor: PTFloatingActionMenu(Context, AttributeSet, int)


new method: void setDrawCircle(boolean)


new class: UniformWidthRelativeLayout

new constructor: UniformWidthRelativeLayout(Context)

new constructor: UniformWidthRelativeLayout(Context, AttributeSet)

new constructor: UniformWidthRelativeLayout(Context, AttributeSet, int)

pdfnet-demo-utils package


new class: AllDocumentFilesDataSource

new constructor: AllDocumentFilesDataSource(FileDao)

new method: void add(FileInfo)

new method: void delete(FileInfo)


new static method: FileEntity documentFileToFileEntity(DocumentFile, String)

removed static method: FileEntity fileToFileEntity(FileInfo)


new abstract class: DocumentFileDatabase

new constructor: DocumentFileDatabase()

new abstract method: FileDao fileDao()

new static method: DocumentFileDatabase getInstance(Context)


new method: void insertFolderInBackground(FolderEntity)


new interface: DocumentTreeDao

new method: void deleteRoot(DocumentTreeEntity)

new method: List<DocumentTreeEntity> getRoots()

new method: void insertRoot(DocumentTreeEntity)


new abstract class: DocumentTreeDatabase

new constructor: DocumentTreeDatabase()

new abstract method: DocumentTreeDao folderDao()

new static method: DocumentTreeDatabase getInstance(Context)


new class: DocumentTreeEntity

new constructor: DocumentTreeEntity(String)

new method: String getDocumentFileUri()


new static final field: FileListState MISSING_ROOT


new class: LocalDocumentFileViewFragment

new constructor: LocalDocumentFileViewFragment()

new method: String getFilterText()

new static method: LocalDocumentFileViewFragment newInstance()

new method: boolean onActionItemClicked(ActionMode, MenuItem)

new method: void onActivityResult(int, int, Intent)

new method: void onAttach(Context)

new method: boolean onBackPressed()

new method: void onConversionFailed(String)

new method: void onConversionFinished(String, boolean)

new method: void onCreate(Bundle)

new method: boolean onCreateActionMode(ActionMode, Menu)

new method: void onCreateOptionsMenu(Menu, MenuInflater)

new method: View onCreateView(LayoutInflater, ViewGroup, Bundle)

new method: void onDataChanged()

new method: void onDestroy()

new method: void onDestroyActionMode(ActionMode)

new method: void onDestroyView()

new method: void onDetach()

new method: void onDrawerOpened()

new method: void onDrawerSlide()

new method: void onExternalFileDeleted(ArrayList<ExternalFileInfo>)

new method: void onExternalFileDuplicated(ExternalFileInfo)

new method: void onExternalFileMerged(ArrayList<FileInfo>, ArrayList<FileInfo>, FileInfo)

new method: void onExternalFileMoved(Map<ExternalFileInfo, Boolean>, ExternalFileInfo)

new method: void onExternalFileMoved(Map<ExternalFileInfo, Boolean>, File)

new method: void onExternalFileRenamed(ExternalFileInfo, ExternalFileInfo)

new method: void onExternalFolderCreated(ExternalFileInfo, ExternalFileInfo)

new method: void onExternalFolderSelected(int, Object, ExternalFileInfo)

new method: void onFileClicked(FileInfo)

new method: boolean onKeyUp(int, KeyEvent)

new method: void onLocalFolderSelected(int, Object, File)

new method: void onLowMemory()

new method: void onMergeConfirmed(ArrayList<FileInfo>, ArrayList<FileInfo>, String)

new method: boolean onOptionsItemSelected(MenuItem)

new method: void onPause()

new method: void onPreLaunchViewer()

new method: boolean onPrepareActionMode(ActionMode, Menu)

new method: void onPrepareOptionsMenu(Menu)

new method: void onProcessNewIntent()

new method: boolean onQueryTextChange(String)

new method: boolean onQueryTextSubmit(String)

new method: void onResume()

new method: void onRootsRemoved(ArrayList<ExternalFileInfo>)

new method: void onSaveInstanceState(Bundle)

new method: void onStart()

new method: void onStop()

new method: void onViewCreated(View, Bundle)

new method: void resetFileListFilter()

new method: void setLocalFileViewFragmentListener(LocalFileViewFragmentListener)


new method: void setLocalFileViewFragmentListener(LocalFileViewFragmentListener)

removed method: void setLocalFileViewFragmentListener(LocalFileViewFragmentListener)


removed interface: LocalFileViewFragmentListener

removed method: void onLocalFileHidden()

removed method: void onLocalFileShown()


new interface: LocalFileViewFragmentListener

new method: void onLocalFileHidden()

new method: void onLocalFileShown()


new method: String buildPath(String)

removed method: String buildPath()


new static method: void setupDrawer(Context, DrawerLayout, NavigationView, ViewGroup)

removed static method: void setupDrawer(Context, DrawerLayout, NavigationView, LinearLayout)

removed static method: void setupDrawer(Context, DrawerLayout, NavigationView, ConstraintLayout)


new static method: void handleDocumentTreePickerResult(Activity, Uri, ContentResolver, Consumer<Uri>)

new static method: void launchDocumentTreePicker(Fragment)

new static method: void sortDocumentFileList(List<DocumentFile>, Comparator<DocumentFile>)

pdftron-collab package


modified method: LiveData<List<AnnotationEntity>> getAnnotations(String)

From:public LiveData<List> getAnnotations(String)
To:public Flowable<List> getAnnotations(String)


new static method: File getXfdfCachePath()


modified method: LiveData<List<AnnotationEntity>> getAnnotations(String)

From:public abstract LiveData<List> getAnnotations(String)
To:public abstract Flowable<List> getAnnotations(String)


new static method: String getXfdfFile(String)

new static method: String getXfdfFromFile(String)


modified method: LiveData<List<AnnotationEntity>> getAnnotations()

From:public LiveData<List> getAnnotations()
To:public Flowable<List> getAnnotations()

pdftron-collab-wvs package


new method: boolean isStarted()

Get the answers you need: Support