diff --git a/.gitignore b/.gitignore
index 995eb561..312181ef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,5 +6,6 @@ src/main/obj
/local.properties
.idea/
.DS_Store
+.cxx
/build
/captures
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ad91218a..13b968ee 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,19 @@
+## 1.9.4 (2024-03-19)
+* Fix issue for the newest Android devices with API 34+
+
+## 1.9.3 (2024-03-18)
+* Update Gradle plugins and configurations
+* Change minimum SDK to 21
+* Update pdfium libs
+
+## 1.9.1 (2024-03-10)
+* Update Gradle plugins and configurations
+* Update compile sdk to 34
+* Change minimum SDK to 23
+* Remove support-v4 library
+* Drop support for mips
+* Update pdfium libs and refactor to cmake
+
## 1.9.0 (2018-06-29)
* Updated Pdfium library to 7.1.2_r36
* Changed `gnustl_static` to `c++_shared`
diff --git a/README.md b/README.md
index 30a71ada..414b8584 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,22 @@
-# Pdfium Android binding with Bitmap rendering
-Uses pdfium library [from AOSP](https://android.googlesource.com/platform/external/pdfium/)
+The purpose is to remove old support libraries so we no longer need to use jetifier.
-The demo app (for not modified lib) is [here](https://github.com/mshockwave/PdfiumAndroid-Demo-App)
+It will be used with the forked [AndroidPdFViewer](https://github.com/lion1988dev/AndroidPdfViewer)
-Forked for use with [AndroidPdfViewer](https://github.com/barteksc/AndroidPdfViewer) project.
+## What's new in 1.9.4
+* Fix issue for the newest Android devices with API 34+
-API is highly compatible with original version, only additional methods were created.
+## What's new in 1.9.3
+* Update Gradle plugins and configurations
+* Change minimum SDK to 21
+* Update pdfium libs
+
+## What's new in 1.9.1
+* Update Gradle plugins and configurations
+* Update compile sdk to 34
+* Change minimum SDK to 23
+* Remove support-v4 library
+* Drop support for mips
+* Update pdfium libs and refactor to cmake
## What's new in 1.9.0?
* Updated Pdfium library to 7.1.2_r36
@@ -16,9 +27,21 @@ API is highly compatible with original version, only additional methods were cre
* Add support for mips64
## Installation
-Add to _build.gradle_:
+Add to the root _build.gradle_:
+
+```groovy
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ mavenCentral()
+ maven { url 'https://jitpack.io' }
+ }
+ }
+```
+
+Add to the app _build.gradle_:
-`compile 'com.github.barteksc:pdfium-android:1.9.0'`
+`implementation 'com.github.lion1988dev:PdfiumAndroid:1.9.4'`
Library is available in jcenter and Maven Central repositories.
diff --git a/build.gradle b/build.gradle
index 49863608..f6a377a5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,51 +1,45 @@
-buildscript {
- repositories {
- jcenter()
- google()
- }
-
- dependencies {
- classpath 'com.android.tools.build:gradle:3.1.3'
- classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1'
- classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
- }
+plugins {
+ id 'com.android.library' version '8.3.0'
+ id 'maven-publish'
}
-apply plugin: 'com.android.library'
-
ext {
- bintrayRepo = 'maven'
- bintrayName = 'pdfium-android'
+ tools = [
+ minSdk : 21,
+ targetSdk : 34,
+ compileSdk : 34,
+ versionCode: 3,
+ versionName: '1.9.4'
+ ]
+}
- publishedGroupId = 'com.github.barteksc'
- libraryName = 'PdfiumAndroid'
- artifact = 'pdfium-android'
+group "com.github.lion1988dev"
- libraryDescription = 'Fork of library for rendering PDFs on Android\'s Surface or Bitmap'
+android {
+ namespace "com.shockwave.pdfium"
- siteUrl = 'https://github.com/barteksc/PdfiumAndroid'
- gitUrl = 'https://github.com/barteksc/PdfiumAndroid.git'
+ compileSdk rootProject.tools.compileSdk
- libraryVersion = '1.9.0'
+ defaultConfig {
+ minSdkVersion rootProject.tools.minSdkVersion
+ targetSdk rootProject.tools.targetSdk
- developerId = 'barteksc'
- developerName = 'Bartosz Schiller'
- developerEmail = 'barteksch@boo.pl'
+ versionCode rootProject.tools.versionCode
+ versionName "${rootProject.tools.versionName}"
- licenseName = 'The Apache Software License, Version 2.0'
- licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
- allLicenses = ["Apache-2.0"]
-}
+ buildConfigField 'String', 'VERSION_NAME', "\"${defaultConfig.versionName}\""
-android {
- compileSdkVersion 26
+ externalNativeBuild {
+ cmake {
+ cppFlags ""
+ }
+ }
+ }
- defaultConfig {
- minSdkVersion 14
- targetSdkVersion 26
- versionCode 1
- versionName "1.9.0"
+ buildFeatures {
+ buildConfig = true
}
+
buildTypes {
release {
minifyEnabled false
@@ -53,23 +47,50 @@ android {
}
}
- sourceSets{
- main {
- jni.srcDirs = []
- jniLibs.srcDir 'src/main/libs'
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_17
+ targetCompatibility JavaVersion.VERSION_17
+ }
+
+ publishing {
+ publishing {
+ singleVariant("release") {
+ withSourcesJar()
+ withJavadocJar()
+ }
+ }
+ }
+
+ ndkVersion '25.2.9519653'
+
+ externalNativeBuild {
+ cmake {
+ path "src/main/cpp/CMakeLists.txt"
+ version "3.22.1"
}
}
-}
-repositories {
- google()
- jcenter()
+ sourceSets {
+ main {
+ jniLibs.srcDirs = ['src/main/jniLibs']
+ }
+ }
}
dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.android.support:support-v4:26.1.0'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
}
-apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
-apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'
+publishing {
+ publications {
+ release(MavenPublication) {
+ groupId = 'com.github.lion1988dev'
+ artifactId = 'PdfiumAndroid'
+ version = "1.9.4"
+
+ afterEvaluate {
+ from components.release
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 00000000..bfc5365b
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,2 @@
+android.enableJetifier=false
+android.useAndroidX=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 7d202716..363bef6e 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Jun 06 19:49:00 CEST 2017
+#Sat Mar 09 21:57:57 EET 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
diff --git a/jitpack.yml b/jitpack.yml
new file mode 100644
index 00000000..edfa66db
--- /dev/null
+++ b/jitpack.yml
@@ -0,0 +1,2 @@
+jdk:
+ - openjdk17
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 00000000..2da58070
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,17 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal()
+ google()
+ mavenCentral()
+ }
+}
+
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.name = "PdfiumAndroid"
diff --git a/src/androidTest/java/com/shockwave/pdfium/ApplicationTest.java b/src/androidTest/java/com/shockwave/pdfium/ApplicationTest.java
deleted file mode 100644
index 1f24f8cc..00000000
--- a/src/androidTest/java/com/shockwave/pdfium/ApplicationTest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.shockwave.pdfium;
-
-import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * Testing Fundamentals
- */
-public class ApplicationTest extends ApplicationTestCase {
- public ApplicationTest() {
- super(Application.class);
- }
-}
\ No newline at end of file
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 00bf1676..0a0938ae 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -1,3 +1,3 @@
-
+
diff --git a/src/main/cpp/CMakeLists.txt b/src/main/cpp/CMakeLists.txt
new file mode 100644
index 00000000..c2cf7f16
--- /dev/null
+++ b/src/main/cpp/CMakeLists.txt
@@ -0,0 +1,72 @@
+# For more information about using CMake with Android Studio, read the
+# documentation: https://d.android.com/studio/projects/add-native-code.html
+
+# Sets the minimum version of CMake required to build the native library.
+
+cmake_minimum_required(VERSION 3.22.1)
+
+# Declares and names the project.
+
+project("pdfiumandroid")
+
+# Creates and names a library, sets it as either STATIC
+# or SHARED, and provides the relative paths to its source code.
+# You can define multiple libraries, and CMake builds them for you.
+# Gradle automatically packages shared libraries with your APK.
+
+add_library( # Sets the name of the library.
+ pdfiumandroid
+
+ # Sets the library as a shared library.
+ SHARED
+
+ # Provides a relative path to your source file(s).
+ mainJNILib.cpp)
+
+# Searches for a specified prebuilt library and stores the path as a
+# variable. Because CMake includes system libraries in the search path by
+# default, you only need to specify the name of the public NDK library
+# you want to add. CMake verifies that the library exists before
+# completing its build.
+
+find_library( # Sets the name of the path variable.
+ log-lib
+
+ # Specifies the name of the NDK library that
+ # you want CMake to locate.
+ log)
+
+find_library( # Sets the name of the path variable.
+ android-lib
+
+ # Specifies the name of the NDK library that
+ # you want CMake to locate.
+ android)
+
+find_library( # Sets the name of the path variable.
+ jnigraphics-lib
+
+ # Specifies the name of the NDK library that
+ # you want CMake to locate.
+ jnigraphics)
+
+# Specifies libraries CMake should link to your target library. You
+# can link multiple libraries, such as libraries you define in this
+# build script, prebuilt third-party libraries, or system libraries.
+
+target_link_libraries( # Specifies the target library.
+ pdfiumandroid
+
+ libpdfium
+
+ # Links the target library to the log library
+ # included in the NDK.
+ ${log-lib}
+ ${android-lib}
+ ${jnigraphics-lib}
+ )
+
+
+add_library( libpdfium SHARED IMPORTED )
+
+set_target_properties( libpdfium PROPERTIES IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libpdfium.cr.so)
diff --git a/src/main/cpp/include/cpp/fpdf_deleters.h b/src/main/cpp/include/cpp/fpdf_deleters.h
new file mode 100644
index 00000000..55b85d9e
--- /dev/null
+++ b/src/main/cpp/include/cpp/fpdf_deleters.h
@@ -0,0 +1,86 @@
+// Copyright 2017 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PUBLIC_CPP_FPDF_DELETERS_H_
+#define PUBLIC_CPP_FPDF_DELETERS_H_
+
+#include "../fpdf_annot.h"
+#include "../fpdf_dataavail.h"
+#include "../fpdf_edit.h"
+#include "../fpdf_formfill.h"
+#include "../fpdf_javascript.h"
+#include "../fpdf_structtree.h"
+#include "../fpdf_text.h"
+#include "../fpdf_transformpage.h"
+#include "../fpdfview.h"
+
+// Custom deleters for using FPDF_* types with std::unique_ptr<>.
+
+struct FPDFAnnotationDeleter {
+ inline void operator()(FPDF_ANNOTATION annot) { FPDFPage_CloseAnnot(annot); }
+};
+
+struct FPDFAvailDeleter {
+ inline void operator()(FPDF_AVAIL avail) { FPDFAvail_Destroy(avail); }
+};
+
+struct FPDFBitmapDeleter {
+ inline void operator()(FPDF_BITMAP bitmap) { FPDFBitmap_Destroy(bitmap); }
+};
+
+struct FPDFClipPathDeleter {
+ inline void operator()(FPDF_CLIPPATH clip_path) {
+ FPDF_DestroyClipPath(clip_path);
+ }
+};
+
+struct FPDFDocumentDeleter {
+ inline void operator()(FPDF_DOCUMENT doc) { FPDF_CloseDocument(doc); }
+};
+
+struct FPDFFontDeleter {
+ inline void operator()(FPDF_FONT font) { FPDFFont_Close(font); }
+};
+
+struct FPDFFormHandleDeleter {
+ inline void operator()(FPDF_FORMHANDLE form) {
+ FPDFDOC_ExitFormFillEnvironment(form);
+ }
+};
+
+struct FPDFJavaScriptActionDeleter {
+ inline void operator()(FPDF_JAVASCRIPT_ACTION javascript) {
+ FPDFDoc_CloseJavaScriptAction(javascript);
+ }
+};
+
+struct FPDFPageDeleter {
+ inline void operator()(FPDF_PAGE page) { FPDF_ClosePage(page); }
+};
+
+struct FPDFPageLinkDeleter {
+ inline void operator()(FPDF_PAGELINK pagelink) {
+ FPDFLink_CloseWebLinks(pagelink);
+ }
+};
+
+struct FPDFPageObjectDeleter {
+ inline void operator()(FPDF_PAGEOBJECT object) {
+ FPDFPageObj_Destroy(object);
+ }
+};
+
+struct FPDFStructTreeDeleter {
+ inline void operator()(FPDF_STRUCTTREE tree) { FPDF_StructTree_Close(tree); }
+};
+
+struct FPDFTextFindDeleter {
+ inline void operator()(FPDF_SCHHANDLE handle) { FPDFText_FindClose(handle); }
+};
+
+struct FPDFTextPageDeleter {
+ inline void operator()(FPDF_TEXTPAGE text) { FPDFText_ClosePage(text); }
+};
+
+#endif // PUBLIC_CPP_FPDF_DELETERS_H_
diff --git a/src/main/cpp/include/cpp/fpdf_scopers.h b/src/main/cpp/include/cpp/fpdf_scopers.h
new file mode 100644
index 00000000..34cf9c46
--- /dev/null
+++ b/src/main/cpp/include/cpp/fpdf_scopers.h
@@ -0,0 +1,67 @@
+// Copyright 2018 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PUBLIC_CPP_FPDF_SCOPERS_H_
+#define PUBLIC_CPP_FPDF_SCOPERS_H_
+
+#include
+#include
+
+#include "fpdf_deleters.h"
+
+// Versions of FPDF types that clean up the object at scope exit.
+
+using ScopedFPDFAnnotation =
+ std::unique_ptr::type,
+ FPDFAnnotationDeleter>;
+
+using ScopedFPDFAvail =
+ std::unique_ptr::type, FPDFAvailDeleter>;
+
+using ScopedFPDFBitmap =
+ std::unique_ptr::type, FPDFBitmapDeleter>;
+
+using ScopedFPDFClipPath =
+ std::unique_ptr::type,
+ FPDFClipPathDeleter>;
+
+using ScopedFPDFDocument =
+ std::unique_ptr::type,
+ FPDFDocumentDeleter>;
+
+using ScopedFPDFFont =
+ std::unique_ptr::type, FPDFFontDeleter>;
+
+using ScopedFPDFFormHandle =
+ std::unique_ptr::type,
+ FPDFFormHandleDeleter>;
+
+using ScopedFPDFJavaScriptAction =
+ std::unique_ptr::type,
+ FPDFJavaScriptActionDeleter>;
+
+using ScopedFPDFPage =
+ std::unique_ptr::type, FPDFPageDeleter>;
+
+using ScopedFPDFPageLink =
+ std::unique_ptr::type,
+ FPDFPageLinkDeleter>;
+
+using ScopedFPDFPageObject =
+ std::unique_ptr::type,
+ FPDFPageObjectDeleter>;
+
+using ScopedFPDFStructTree =
+ std::unique_ptr::type,
+ FPDFStructTreeDeleter>;
+
+using ScopedFPDFTextFind =
+ std::unique_ptr::type,
+ FPDFTextFindDeleter>;
+
+using ScopedFPDFTextPage =
+ std::unique_ptr::type,
+ FPDFTextPageDeleter>;
+
+#endif // PUBLIC_CPP_FPDF_SCOPERS_H_
diff --git a/src/main/cpp/include/fpdf_annot.h b/src/main/cpp/include/fpdf_annot.h
new file mode 100644
index 00000000..337da58f
--- /dev/null
+++ b/src/main/cpp/include/fpdf_annot.h
@@ -0,0 +1,995 @@
+// Copyright 2017 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PUBLIC_FPDF_ANNOT_H_
+#define PUBLIC_FPDF_ANNOT_H_
+
+#include
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdf_formfill.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+#define FPDF_ANNOT_UNKNOWN 0
+#define FPDF_ANNOT_TEXT 1
+#define FPDF_ANNOT_LINK 2
+#define FPDF_ANNOT_FREETEXT 3
+#define FPDF_ANNOT_LINE 4
+#define FPDF_ANNOT_SQUARE 5
+#define FPDF_ANNOT_CIRCLE 6
+#define FPDF_ANNOT_POLYGON 7
+#define FPDF_ANNOT_POLYLINE 8
+#define FPDF_ANNOT_HIGHLIGHT 9
+#define FPDF_ANNOT_UNDERLINE 10
+#define FPDF_ANNOT_SQUIGGLY 11
+#define FPDF_ANNOT_STRIKEOUT 12
+#define FPDF_ANNOT_STAMP 13
+#define FPDF_ANNOT_CARET 14
+#define FPDF_ANNOT_INK 15
+#define FPDF_ANNOT_POPUP 16
+#define FPDF_ANNOT_FILEATTACHMENT 17
+#define FPDF_ANNOT_SOUND 18
+#define FPDF_ANNOT_MOVIE 19
+#define FPDF_ANNOT_WIDGET 20
+#define FPDF_ANNOT_SCREEN 21
+#define FPDF_ANNOT_PRINTERMARK 22
+#define FPDF_ANNOT_TRAPNET 23
+#define FPDF_ANNOT_WATERMARK 24
+#define FPDF_ANNOT_THREED 25
+#define FPDF_ANNOT_RICHMEDIA 26
+#define FPDF_ANNOT_XFAWIDGET 27
+#define FPDF_ANNOT_REDACT 28
+
+// Refer to PDF Reference (6th edition) table 8.16 for all annotation flags.
+#define FPDF_ANNOT_FLAG_NONE 0
+#define FPDF_ANNOT_FLAG_INVISIBLE (1 << 0)
+#define FPDF_ANNOT_FLAG_HIDDEN (1 << 1)
+#define FPDF_ANNOT_FLAG_PRINT (1 << 2)
+#define FPDF_ANNOT_FLAG_NOZOOM (1 << 3)
+#define FPDF_ANNOT_FLAG_NOROTATE (1 << 4)
+#define FPDF_ANNOT_FLAG_NOVIEW (1 << 5)
+#define FPDF_ANNOT_FLAG_READONLY (1 << 6)
+#define FPDF_ANNOT_FLAG_LOCKED (1 << 7)
+#define FPDF_ANNOT_FLAG_TOGGLENOVIEW (1 << 8)
+
+#define FPDF_ANNOT_APPEARANCEMODE_NORMAL 0
+#define FPDF_ANNOT_APPEARANCEMODE_ROLLOVER 1
+#define FPDF_ANNOT_APPEARANCEMODE_DOWN 2
+#define FPDF_ANNOT_APPEARANCEMODE_COUNT 3
+
+// Refer to PDF Reference version 1.7 table 8.70 for field flags common to all
+// interactive form field types.
+#define FPDF_FORMFLAG_NONE 0
+#define FPDF_FORMFLAG_READONLY (1 << 0)
+#define FPDF_FORMFLAG_REQUIRED (1 << 1)
+#define FPDF_FORMFLAG_NOEXPORT (1 << 2)
+
+// Refer to PDF Reference version 1.7 table 8.77 for field flags specific to
+// interactive form text fields.
+#define FPDF_FORMFLAG_TEXT_MULTILINE (1 << 12)
+#define FPDF_FORMFLAG_TEXT_PASSWORD (1 << 13)
+
+// Refer to PDF Reference version 1.7 table 8.79 for field flags specific to
+// interactive form choice fields.
+#define FPDF_FORMFLAG_CHOICE_COMBO (1 << 17)
+#define FPDF_FORMFLAG_CHOICE_EDIT (1 << 18)
+#define FPDF_FORMFLAG_CHOICE_MULTI_SELECT (1 << 21)
+
+// Additional actions type of form field:
+// K, on key stroke, JavaScript action.
+// F, on format, JavaScript action.
+// V, on validate, JavaScript action.
+// C, on calculate, JavaScript action.
+#define FPDF_ANNOT_AACTION_KEY_STROKE 12
+#define FPDF_ANNOT_AACTION_FORMAT 13
+#define FPDF_ANNOT_AACTION_VALIDATE 14
+#define FPDF_ANNOT_AACTION_CALCULATE 15
+
+typedef enum FPDFANNOT_COLORTYPE {
+ FPDFANNOT_COLORTYPE_Color = 0,
+ FPDFANNOT_COLORTYPE_InteriorColor
+} FPDFANNOT_COLORTYPE;
+
+// Experimental API.
+// Check if an annotation subtype is currently supported for creation.
+// Currently supported subtypes:
+// - circle
+// - fileattachment
+// - freetext
+// - highlight
+// - ink
+// - link
+// - popup
+// - square,
+// - squiggly
+// - stamp
+// - strikeout
+// - text
+// - underline
+//
+// subtype - the subtype to be checked.
+//
+// Returns true if this subtype supported.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_IsSupportedSubtype(FPDF_ANNOTATION_SUBTYPE subtype);
+
+// Experimental API.
+// Create an annotation in |page| of the subtype |subtype|. If the specified
+// subtype is illegal or unsupported, then a new annotation will not be created.
+// Must call FPDFPage_CloseAnnot() when the annotation returned by this
+// function is no longer needed.
+//
+// page - handle to a page.
+// subtype - the subtype of the new annotation.
+//
+// Returns a handle to the new annotation object, or NULL on failure.
+FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
+FPDFPage_CreateAnnot(FPDF_PAGE page, FPDF_ANNOTATION_SUBTYPE subtype);
+
+// Experimental API.
+// Get the number of annotations in |page|.
+//
+// page - handle to a page.
+//
+// Returns the number of annotations in |page|.
+FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetAnnotCount(FPDF_PAGE page);
+
+// Experimental API.
+// Get annotation in |page| at |index|. Must call FPDFPage_CloseAnnot() when the
+// annotation returned by this function is no longer needed.
+//
+// page - handle to a page.
+// index - the index of the annotation.
+//
+// Returns a handle to the annotation object, or NULL on failure.
+FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV FPDFPage_GetAnnot(FPDF_PAGE page,
+ int index);
+
+// Experimental API.
+// Get the index of |annot| in |page|. This is the opposite of
+// FPDFPage_GetAnnot().
+//
+// page - handle to the page that the annotation is on.
+// annot - handle to an annotation.
+//
+// Returns the index of |annot|, or -1 on failure.
+FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetAnnotIndex(FPDF_PAGE page,
+ FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Close an annotation. Must be called when the annotation returned by
+// FPDFPage_CreateAnnot() or FPDFPage_GetAnnot() is no longer needed. This
+// function does not remove the annotation from the document.
+//
+// annot - handle to an annotation.
+FPDF_EXPORT void FPDF_CALLCONV FPDFPage_CloseAnnot(FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Remove the annotation in |page| at |index|.
+//
+// page - handle to a page.
+// index - the index of the annotation.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_RemoveAnnot(FPDF_PAGE page,
+ int index);
+
+// Experimental API.
+// Get the subtype of an annotation.
+//
+// annot - handle to an annotation.
+//
+// Returns the annotation subtype.
+FPDF_EXPORT FPDF_ANNOTATION_SUBTYPE FPDF_CALLCONV
+FPDFAnnot_GetSubtype(FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Check if an annotation subtype is currently supported for object extraction,
+// update, and removal.
+// Currently supported subtypes: ink and stamp.
+//
+// subtype - the subtype to be checked.
+//
+// Returns true if this subtype supported.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_IsObjectSupportedSubtype(FPDF_ANNOTATION_SUBTYPE subtype);
+
+// Experimental API.
+// Update |obj| in |annot|. |obj| must be in |annot| already and must have
+// been retrieved by FPDFAnnot_GetObject(). Currently, only ink and stamp
+// annotations are supported by this API. Also note that only path, image, and
+// text objects have APIs for modification; see FPDFPath_*(), FPDFText_*(), and
+// FPDFImageObj_*().
+//
+// annot - handle to an annotation.
+// obj - handle to the object that |annot| needs to update.
+//
+// Return true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_UpdateObject(FPDF_ANNOTATION annot, FPDF_PAGEOBJECT obj);
+
+// Experimental API.
+// Add a new InkStroke, represented by an array of points, to the InkList of
+// |annot|. The API creates an InkList if one doesn't already exist in |annot|.
+// This API works only for ink annotations. Please refer to ISO 32000-1:2008
+// spec, section 12.5.6.13.
+//
+// annot - handle to an annotation.
+// points - pointer to a FS_POINTF array representing input points.
+// point_count - number of elements in |points| array. This should not exceed
+// the maximum value that can be represented by an int32_t).
+//
+// Returns the 0-based index at which the new InkStroke is added in the InkList
+// of the |annot|. Returns -1 on failure.
+FPDF_EXPORT int FPDF_CALLCONV FPDFAnnot_AddInkStroke(FPDF_ANNOTATION annot,
+ const FS_POINTF* points,
+ size_t point_count);
+
+// Experimental API.
+// Removes an InkList in |annot|.
+// This API works only for ink annotations.
+//
+// annot - handle to an annotation.
+//
+// Return true on successful removal of /InkList entry from context of the
+// non-null ink |annot|. Returns false on failure.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_RemoveInkList(FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Add |obj| to |annot|. |obj| must have been created by
+// FPDFPageObj_CreateNew{Path|Rect}() or FPDFPageObj_New{Text|Image}Obj(), and
+// will be owned by |annot|. Note that an |obj| cannot belong to more than one
+// |annot|. Currently, only ink and stamp annotations are supported by this API.
+// Also note that only path, image, and text objects have APIs for creation.
+//
+// annot - handle to an annotation.
+// obj - handle to the object that is to be added to |annot|.
+//
+// Return true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_AppendObject(FPDF_ANNOTATION annot, FPDF_PAGEOBJECT obj);
+
+// Experimental API.
+// Get the total number of objects in |annot|, including path objects, text
+// objects, external objects, image objects, and shading objects.
+//
+// annot - handle to an annotation.
+//
+// Returns the number of objects in |annot|.
+FPDF_EXPORT int FPDF_CALLCONV FPDFAnnot_GetObjectCount(FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Get the object in |annot| at |index|.
+//
+// annot - handle to an annotation.
+// index - the index of the object.
+//
+// Return a handle to the object, or NULL on failure.
+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
+FPDFAnnot_GetObject(FPDF_ANNOTATION annot, int index);
+
+// Experimental API.
+// Remove the object in |annot| at |index|.
+//
+// annot - handle to an annotation.
+// index - the index of the object to be removed.
+//
+// Return true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_RemoveObject(FPDF_ANNOTATION annot, int index);
+
+// Experimental API.
+// Set the color of an annotation. Fails when called on annotations with
+// appearance streams already defined; instead use
+// FPDFPath_Set{Stroke|Fill}Color().
+//
+// annot - handle to an annotation.
+// type - type of the color to be set.
+// R, G, B - buffer to hold the RGB value of the color. Ranges from 0 to 255.
+// A - buffer to hold the opacity. Ranges from 0 to 255.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetColor(FPDF_ANNOTATION annot,
+ FPDFANNOT_COLORTYPE type,
+ unsigned int R,
+ unsigned int G,
+ unsigned int B,
+ unsigned int A);
+
+// Experimental API.
+// Get the color of an annotation. If no color is specified, default to yellow
+// for highlight annotation, black for all else. Fails when called on
+// annotations with appearance streams already defined; instead use
+// FPDFPath_Get{Stroke|Fill}Color().
+//
+// annot - handle to an annotation.
+// type - type of the color requested.
+// R, G, B - buffer to hold the RGB value of the color. Ranges from 0 to 255.
+// A - buffer to hold the opacity. Ranges from 0 to 255.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetColor(FPDF_ANNOTATION annot,
+ FPDFANNOT_COLORTYPE type,
+ unsigned int* R,
+ unsigned int* G,
+ unsigned int* B,
+ unsigned int* A);
+
+// Experimental API.
+// Check if the annotation is of a type that has attachment points
+// (i.e. quadpoints). Quadpoints are the vertices of the rectangle that
+// encompasses the texts affected by the annotation. They provide the
+// coordinates in the page where the annotation is attached. Only text markup
+// annotations (i.e. highlight, strikeout, squiggly, and underline) and link
+// annotations have quadpoints.
+//
+// annot - handle to an annotation.
+//
+// Returns true if the annotation is of a type that has quadpoints, false
+// otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_HasAttachmentPoints(FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Replace the attachment points (i.e. quadpoints) set of an annotation at
+// |quad_index|. This index needs to be within the result of
+// FPDFAnnot_CountAttachmentPoints().
+// If the annotation's appearance stream is defined and this annotation is of a
+// type with quadpoints, then update the bounding box too if the new quadpoints
+// define a bigger one.
+//
+// annot - handle to an annotation.
+// quad_index - index of the set of quadpoints.
+// quad_points - the quadpoints to be set.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_SetAttachmentPoints(FPDF_ANNOTATION annot,
+ size_t quad_index,
+ const FS_QUADPOINTSF* quad_points);
+
+// Experimental API.
+// Append to the list of attachment points (i.e. quadpoints) of an annotation.
+// If the annotation's appearance stream is defined and this annotation is of a
+// type with quadpoints, then update the bounding box too if the new quadpoints
+// define a bigger one.
+//
+// annot - handle to an annotation.
+// quad_points - the quadpoints to be set.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_AppendAttachmentPoints(FPDF_ANNOTATION annot,
+ const FS_QUADPOINTSF* quad_points);
+
+// Experimental API.
+// Get the number of sets of quadpoints of an annotation.
+//
+// annot - handle to an annotation.
+//
+// Returns the number of sets of quadpoints, or 0 on failure.
+FPDF_EXPORT size_t FPDF_CALLCONV
+FPDFAnnot_CountAttachmentPoints(FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Get the attachment points (i.e. quadpoints) of an annotation.
+//
+// annot - handle to an annotation.
+// quad_index - index of the set of quadpoints.
+// quad_points - receives the quadpoints; must not be NULL.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_GetAttachmentPoints(FPDF_ANNOTATION annot,
+ size_t quad_index,
+ FS_QUADPOINTSF* quad_points);
+
+// Experimental API.
+// Set the annotation rectangle defining the location of the annotation. If the
+// annotation's appearance stream is defined and this annotation is of a type
+// without quadpoints, then update the bounding box too if the new rectangle
+// defines a bigger one.
+//
+// annot - handle to an annotation.
+// rect - the annotation rectangle to be set.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetRect(FPDF_ANNOTATION annot,
+ const FS_RECTF* rect);
+
+// Experimental API.
+// Get the annotation rectangle defining the location of the annotation.
+//
+// annot - handle to an annotation.
+// rect - receives the rectangle; must not be NULL.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetRect(FPDF_ANNOTATION annot,
+ FS_RECTF* rect);
+
+// Experimental API.
+// Get the vertices of a polygon or polyline annotation. |buffer| is an array of
+// points of the annotation. If |length| is less than the returned length, or
+// |annot| or |buffer| is NULL, |buffer| will not be modified.
+//
+// annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot()
+// buffer - buffer for holding the points.
+// length - length of the buffer in points.
+//
+// Returns the number of points if the annotation is of type polygon or
+// polyline, 0 otherwise.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetVertices(FPDF_ANNOTATION annot,
+ FS_POINTF* buffer,
+ unsigned long length);
+
+// Experimental API.
+// Get the number of paths in the ink list of an ink annotation.
+//
+// annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot()
+//
+// Returns the number of paths in the ink list if the annotation is of type ink,
+// 0 otherwise.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetInkListCount(FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Get a path in the ink list of an ink annotation. |buffer| is an array of
+// points of the path. If |length| is less than the returned length, or |annot|
+// or |buffer| is NULL, |buffer| will not be modified.
+//
+// annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot()
+// path_index - index of the path
+// buffer - buffer for holding the points.
+// length - length of the buffer in points.
+//
+// Returns the number of points of the path if the annotation is of type ink, 0
+// otherwise.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetInkListPath(FPDF_ANNOTATION annot,
+ unsigned long path_index,
+ FS_POINTF* buffer,
+ unsigned long length);
+
+// Experimental API.
+// Get the starting and ending coordinates of a line annotation.
+//
+// annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot()
+// start - starting point
+// end - ending point
+//
+// Returns true if the annotation is of type line, |start| and |end| are not
+// NULL, false otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetLine(FPDF_ANNOTATION annot,
+ FS_POINTF* start,
+ FS_POINTF* end);
+
+// Experimental API.
+// Set the characteristics of the annotation's border (rounded rectangle).
+//
+// annot - handle to an annotation
+// horizontal_radius - horizontal corner radius, in default user space units
+// vertical_radius - vertical corner radius, in default user space units
+// border_width - border width, in default user space units
+//
+// Returns true if setting the border for |annot| succeeds, false otherwise.
+//
+// If |annot| contains an appearance stream that overrides the border values,
+// then the appearance stream will be removed on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetBorder(FPDF_ANNOTATION annot,
+ float horizontal_radius,
+ float vertical_radius,
+ float border_width);
+
+// Experimental API.
+// Get the characteristics of the annotation's border (rounded rectangle).
+//
+// annot - handle to an annotation
+// horizontal_radius - horizontal corner radius, in default user space units
+// vertical_radius - vertical corner radius, in default user space units
+// border_width - border width, in default user space units
+//
+// Returns true if |horizontal_radius|, |vertical_radius| and |border_width| are
+// not NULL, false otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_GetBorder(FPDF_ANNOTATION annot,
+ float* horizontal_radius,
+ float* vertical_radius,
+ float* border_width);
+
+// Experimental API.
+// Get the JavaScript of an event of the annotation's additional actions.
+// |buffer| is only modified if |buflen| is large enough to hold the whole
+// JavaScript string. If |buflen| is smaller, the total size of the JavaScript
+// is still returned, but nothing is copied. If there is no JavaScript for
+// |event| in |annot|, an empty string is written to |buf| and 2 is returned,
+// denoting the size of the null terminator in the buffer. On other errors,
+// nothing is written to |buffer| and 0 is returned.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment().
+// annot - handle to an interactive form annotation.
+// event - event type, one of the FPDF_ANNOT_AACTION_* values.
+// buffer - buffer for holding the value string, encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the string value in bytes, including the 2-byte
+// null terminator.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetFormAdditionalActionJavaScript(FPDF_FORMHANDLE hHandle,
+ FPDF_ANNOTATION annot,
+ int event,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Check if |annot|'s dictionary has |key| as a key.
+//
+// annot - handle to an annotation.
+// key - the key to look for, encoded in UTF-8.
+//
+// Returns true if |key| exists.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_HasKey(FPDF_ANNOTATION annot,
+ FPDF_BYTESTRING key);
+
+// Experimental API.
+// Get the type of the value corresponding to |key| in |annot|'s dictionary.
+//
+// annot - handle to an annotation.
+// key - the key to look for, encoded in UTF-8.
+//
+// Returns the type of the dictionary value.
+FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
+FPDFAnnot_GetValueType(FPDF_ANNOTATION annot, FPDF_BYTESTRING key);
+
+// Experimental API.
+// Set the string value corresponding to |key| in |annot|'s dictionary,
+// overwriting the existing value if any. The value type would be
+// FPDF_OBJECT_STRING after this function call succeeds.
+//
+// annot - handle to an annotation.
+// key - the key to the dictionary entry to be set, encoded in UTF-8.
+// value - the string value to be set, encoded in UTF-16LE.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_SetStringValue(FPDF_ANNOTATION annot,
+ FPDF_BYTESTRING key,
+ FPDF_WIDESTRING value);
+
+// Experimental API.
+// Get the string value corresponding to |key| in |annot|'s dictionary. |buffer|
+// is only modified if |buflen| is longer than the length of contents. Note that
+// if |key| does not exist in the dictionary or if |key|'s corresponding value
+// in the dictionary is not a string (i.e. the value is not of type
+// FPDF_OBJECT_STRING or FPDF_OBJECT_NAME), then an empty string would be copied
+// to |buffer| and the return value would be 2. On other errors, nothing would
+// be added to |buffer| and the return value would be 0.
+//
+// annot - handle to an annotation.
+// key - the key to the requested dictionary entry, encoded in UTF-8.
+// buffer - buffer for holding the value string, encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the string value in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetStringValue(FPDF_ANNOTATION annot,
+ FPDF_BYTESTRING key,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Get the float value corresponding to |key| in |annot|'s dictionary. Writes
+// value to |value| and returns True if |key| exists in the dictionary and
+// |key|'s corresponding value is a number (FPDF_OBJECT_NUMBER), False
+// otherwise.
+//
+// annot - handle to an annotation.
+// key - the key to the requested dictionary entry, encoded in UTF-8.
+// value - receives the value, must not be NULL.
+//
+// Returns True if value found, False otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_GetNumberValue(FPDF_ANNOTATION annot,
+ FPDF_BYTESTRING key,
+ float* value);
+
+// Experimental API.
+// Set the AP (appearance string) in |annot|'s dictionary for a given
+// |appearanceMode|.
+//
+// annot - handle to an annotation.
+// appearanceMode - the appearance mode (normal, rollover or down) for which
+// to get the AP.
+// value - the string value to be set, encoded in UTF-16LE. If
+// nullptr is passed, the AP is cleared for that mode. If the
+// mode is Normal, APs for all modes are cleared.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_SetAP(FPDF_ANNOTATION annot,
+ FPDF_ANNOT_APPEARANCEMODE appearanceMode,
+ FPDF_WIDESTRING value);
+
+// Experimental API.
+// Get the AP (appearance string) from |annot|'s dictionary for a given
+// |appearanceMode|.
+// |buffer| is only modified if |buflen| is large enough to hold the whole AP
+// string. If |buflen| is smaller, the total size of the AP is still returned,
+// but nothing is copied.
+// If there is no appearance stream for |annot| in |appearanceMode|, an empty
+// string is written to |buf| and 2 is returned.
+// On other errors, nothing is written to |buffer| and 0 is returned.
+//
+// annot - handle to an annotation.
+// appearanceMode - the appearance mode (normal, rollover or down) for which
+// to get the AP.
+// buffer - buffer for holding the value string, encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the string value in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetAP(FPDF_ANNOTATION annot,
+ FPDF_ANNOT_APPEARANCEMODE appearanceMode,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Get the annotation corresponding to |key| in |annot|'s dictionary. Common
+// keys for linking annotations include "IRT" and "Popup". Must call
+// FPDFPage_CloseAnnot() when the annotation returned by this function is no
+// longer needed.
+//
+// annot - handle to an annotation.
+// key - the key to the requested dictionary entry, encoded in UTF-8.
+//
+// Returns a handle to the linked annotation object, or NULL on failure.
+FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
+FPDFAnnot_GetLinkedAnnot(FPDF_ANNOTATION annot, FPDF_BYTESTRING key);
+
+// Experimental API.
+// Get the annotation flags of |annot|.
+//
+// annot - handle to an annotation.
+//
+// Returns the annotation flags.
+FPDF_EXPORT int FPDF_CALLCONV FPDFAnnot_GetFlags(FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Set the |annot|'s flags to be of the value |flags|.
+//
+// annot - handle to an annotation.
+// flags - the flag values to be set.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetFlags(FPDF_ANNOTATION annot,
+ int flags);
+
+// Experimental API.
+// Get the annotation flags of |annot|.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment().
+// annot - handle to an interactive form annotation.
+//
+// Returns the annotation flags specific to interactive forms.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFAnnot_GetFormFieldFlags(FPDF_FORMHANDLE handle,
+ FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Retrieves an interactive form annotation whose rectangle contains a given
+// point on a page. Must call FPDFPage_CloseAnnot() when the annotation returned
+// is no longer needed.
+//
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment().
+// page - handle to the page, returned by FPDF_LoadPage function.
+// point - position in PDF "user space".
+//
+// Returns the interactive form annotation whose rectangle contains the given
+// coordinates on the page. If there is no such annotation, return NULL.
+FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
+FPDFAnnot_GetFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ const FS_POINTF* point);
+
+// Experimental API.
+// Gets the name of |annot|, which is an interactive form annotation.
+// |buffer| is only modified if |buflen| is longer than the length of contents.
+// In case of error, nothing will be added to |buffer| and the return value will
+// be 0. Note that return value of empty string is 2 for "\0\0".
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment().
+// annot - handle to an interactive form annotation.
+// buffer - buffer for holding the name string, encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the string value in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetFormFieldName(FPDF_FORMHANDLE hHandle,
+ FPDF_ANNOTATION annot,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Gets the alternate name of |annot|, which is an interactive form annotation.
+// |buffer| is only modified if |buflen| is longer than the length of contents.
+// In case of error, nothing will be added to |buffer| and the return value will
+// be 0. Note that return value of empty string is 2 for "\0\0".
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment().
+// annot - handle to an interactive form annotation.
+// buffer - buffer for holding the alternate name string, encoded in
+// UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the string value in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetFormFieldAlternateName(FPDF_FORMHANDLE hHandle,
+ FPDF_ANNOTATION annot,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Gets the form field type of |annot|, which is an interactive form annotation.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment().
+// annot - handle to an interactive form annotation.
+//
+// Returns the type of the form field (one of the FPDF_FORMFIELD_* values) on
+// success. Returns -1 on error.
+// See field types in fpdf_formfill.h.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFAnnot_GetFormFieldType(FPDF_FORMHANDLE hHandle, FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Gets the value of |annot|, which is an interactive form annotation.
+// |buffer| is only modified if |buflen| is longer than the length of contents.
+// In case of error, nothing will be added to |buffer| and the return value will
+// be 0. Note that return value of empty string is 2 for "\0\0".
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment().
+// annot - handle to an interactive form annotation.
+// buffer - buffer for holding the value string, encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the string value in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetFormFieldValue(FPDF_FORMHANDLE hHandle,
+ FPDF_ANNOTATION annot,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Get the number of options in the |annot|'s "Opt" dictionary. Intended for
+// use with listbox and combobox widget annotations.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment.
+// annot - handle to an annotation.
+//
+// Returns the number of options in "Opt" dictionary on success. Return value
+// will be -1 if annotation does not have an "Opt" dictionary or other error.
+FPDF_EXPORT int FPDF_CALLCONV FPDFAnnot_GetOptionCount(FPDF_FORMHANDLE hHandle,
+ FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Get the string value for the label of the option at |index| in |annot|'s
+// "Opt" dictionary. Intended for use with listbox and combobox widget
+// annotations. |buffer| is only modified if |buflen| is longer than the length
+// of contents. If index is out of range or in case of other error, nothing
+// will be added to |buffer| and the return value will be 0. Note that
+// return value of empty string is 2 for "\0\0".
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment.
+// annot - handle to an annotation.
+// index - numeric index of the option in the "Opt" array
+// buffer - buffer for holding the value string, encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the string value in bytes.
+// If |annot| does not have an "Opt" array, |index| is out of range or if any
+// other error occurs, returns 0.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetOptionLabel(FPDF_FORMHANDLE hHandle,
+ FPDF_ANNOTATION annot,
+ int index,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Determine whether or not the option at |index| in |annot|'s "Opt" dictionary
+// is selected. Intended for use with listbox and combobox widget annotations.
+//
+// handle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment.
+// annot - handle to an annotation.
+// index - numeric index of the option in the "Opt" array.
+//
+// Returns true if the option at |index| in |annot|'s "Opt" dictionary is
+// selected, false otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_IsOptionSelected(FPDF_FORMHANDLE handle,
+ FPDF_ANNOTATION annot,
+ int index);
+
+// Experimental API.
+// Get the float value of the font size for an |annot| with variable text.
+// If 0, the font is to be auto-sized: its size is computed as a function of
+// the height of the annotation rectangle.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment.
+// annot - handle to an annotation.
+// value - Required. Float which will be set to font size on success.
+//
+// Returns true if the font size was set in |value|, false on error or if
+// |value| not provided.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_GetFontSize(FPDF_FORMHANDLE hHandle,
+ FPDF_ANNOTATION annot,
+ float* value);
+
+// Experimental API.
+// Determine if |annot| is a form widget that is checked. Intended for use with
+// checkbox and radio button widgets.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment.
+// annot - handle to an annotation.
+//
+// Returns true if |annot| is a form widget and is checked, false otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_IsChecked(FPDF_FORMHANDLE hHandle,
+ FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Set the list of focusable annotation subtypes. Annotations of subtype
+// FPDF_ANNOT_WIDGET are by default focusable. New subtypes set using this API
+// will override the existing subtypes.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment.
+// subtypes - list of annotation subtype which can be tabbed over.
+// count - total number of annotation subtype in list.
+// Returns true if list of annotation subtype is set successfully, false
+// otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_SetFocusableSubtypes(FPDF_FORMHANDLE hHandle,
+ const FPDF_ANNOTATION_SUBTYPE* subtypes,
+ size_t count);
+
+// Experimental API.
+// Get the count of focusable annotation subtypes as set by host
+// for a |hHandle|.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment.
+// Returns the count of focusable annotation subtypes or -1 on error.
+// Note : Annotations of type FPDF_ANNOT_WIDGET are by default focusable.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFAnnot_GetFocusableSubtypesCount(FPDF_FORMHANDLE hHandle);
+
+// Experimental API.
+// Get the list of focusable annotation subtype as set by host.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment.
+// subtypes - receives the list of annotation subtype which can be tabbed
+// over. Caller must have allocated |subtypes| more than or
+// equal to the count obtained from
+// FPDFAnnot_GetFocusableSubtypesCount() API.
+// count - size of |subtypes|.
+// Returns true on success and set list of annotation subtype to |subtypes|,
+// false otherwise.
+// Note : Annotations of type FPDF_ANNOT_WIDGET are by default focusable.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_GetFocusableSubtypes(FPDF_FORMHANDLE hHandle,
+ FPDF_ANNOTATION_SUBTYPE* subtypes,
+ size_t count);
+
+// Experimental API.
+// Gets FPDF_LINK object for |annot|. Intended to use for link annotations.
+//
+// annot - handle to an annotation.
+//
+// Returns FPDF_LINK from the FPDF_ANNOTATION and NULL on failure,
+// if the input annot is NULL or input annot's subtype is not link.
+FPDF_EXPORT FPDF_LINK FPDF_CALLCONV FPDFAnnot_GetLink(FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Gets the count of annotations in the |annot|'s control group.
+// A group of interactive form annotations is collectively called a form
+// control group. Here, |annot|, an interactive form annotation, should be
+// either a radio button or a checkbox.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment.
+// annot - handle to an annotation.
+//
+// Returns number of controls in its control group or -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFAnnot_GetFormControlCount(FPDF_FORMHANDLE hHandle, FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Gets the index of |annot| in |annot|'s control group.
+// A group of interactive form annotations is collectively called a form
+// control group. Here, |annot|, an interactive form annotation, should be
+// either a radio button or a checkbox.
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment.
+// annot - handle to an annotation.
+//
+// Returns index of a given |annot| in its control group or -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFAnnot_GetFormControlIndex(FPDF_FORMHANDLE hHandle, FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Gets the export value of |annot| which is an interactive form annotation.
+// Intended for use with radio button and checkbox widget annotations.
+// |buffer| is only modified if |buflen| is longer than the length of contents.
+// In case of error, nothing will be added to |buffer| and the return value
+// will be 0. Note that return value of empty string is 2 for "\0\0".
+//
+// hHandle - handle to the form fill module, returned by
+// FPDFDOC_InitFormFillEnvironment().
+// annot - handle to an interactive form annotation.
+// buffer - buffer for holding the value string, encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the string value in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAnnot_GetFormFieldExportValue(FPDF_FORMHANDLE hHandle,
+ FPDF_ANNOTATION annot,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Add a URI action to |annot|, overwriting the existing action, if any.
+//
+// annot - handle to a link annotation.
+// uri - the URI to be set, encoded in 7-bit ASCII.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetURI(FPDF_ANNOTATION annot,
+ const char* uri);
+
+// Experimental API.
+// Get the attachment from |annot|.
+//
+// annot - handle to a file annotation.
+//
+// Returns the handle to the attachment object, or NULL on failure.
+FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV
+FPDFAnnot_GetFileAttachment(FPDF_ANNOTATION annot);
+
+// Experimental API.
+// Add an embedded file with |name| to |annot|.
+//
+// annot - handle to a file annotation.
+// name - name of the new attachment.
+//
+// Returns a handle to the new attachment object, or NULL on failure.
+FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV
+FPDFAnnot_AddFileAttachment(FPDF_ANNOTATION annot, FPDF_WIDESTRING name);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_ANNOT_H_
diff --git a/src/main/cpp/include/fpdf_attachment.h b/src/main/cpp/include/fpdf_attachment.h
new file mode 100644
index 00000000..d25bddab
--- /dev/null
+++ b/src/main/cpp/include/fpdf_attachment.h
@@ -0,0 +1,179 @@
+// Copyright 2017 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PUBLIC_FPDF_ATTACHMENT_H_
+#define PUBLIC_FPDF_ATTACHMENT_H_
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// Experimental API.
+// Get the number of embedded files in |document|.
+//
+// document - handle to a document.
+//
+// Returns the number of embedded files in |document|.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFDoc_GetAttachmentCount(FPDF_DOCUMENT document);
+
+// Experimental API.
+// Add an embedded file with |name| in |document|. If |name| is empty, or if
+// |name| is the name of a existing embedded file in |document|, or if
+// |document|'s embedded file name tree is too deep (i.e. |document| has too
+// many embedded files already), then a new attachment will not be added.
+//
+// document - handle to a document.
+// name - name of the new attachment.
+//
+// Returns a handle to the new attachment object, or NULL on failure.
+FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV
+FPDFDoc_AddAttachment(FPDF_DOCUMENT document, FPDF_WIDESTRING name);
+
+// Experimental API.
+// Get the embedded attachment at |index| in |document|. Note that the returned
+// attachment handle is only valid while |document| is open.
+//
+// document - handle to a document.
+// index - the index of the requested embedded file.
+//
+// Returns the handle to the attachment object, or NULL on failure.
+FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV
+FPDFDoc_GetAttachment(FPDF_DOCUMENT document, int index);
+
+// Experimental API.
+// Delete the embedded attachment at |index| in |document|. Note that this does
+// not remove the attachment data from the PDF file; it simply removes the
+// file's entry in the embedded files name tree so that it does not appear in
+// the attachment list. This behavior may change in the future.
+//
+// document - handle to a document.
+// index - the index of the embedded file to be deleted.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFDoc_DeleteAttachment(FPDF_DOCUMENT document, int index);
+
+// Experimental API.
+// Get the name of the |attachment| file. |buffer| is only modified if |buflen|
+// is longer than the length of the file name. On errors, |buffer| is unmodified
+// and the returned length is 0.
+//
+// attachment - handle to an attachment.
+// buffer - buffer for holding the file name, encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the file name in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAttachment_GetName(FPDF_ATTACHMENT attachment,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Check if the params dictionary of |attachment| has |key| as a key.
+//
+// attachment - handle to an attachment.
+// key - the key to look for, encoded in UTF-8.
+//
+// Returns true if |key| exists.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAttachment_HasKey(FPDF_ATTACHMENT attachment, FPDF_BYTESTRING key);
+
+// Experimental API.
+// Get the type of the value corresponding to |key| in the params dictionary of
+// the embedded |attachment|.
+//
+// attachment - handle to an attachment.
+// key - the key to look for, encoded in UTF-8.
+//
+// Returns the type of the dictionary value.
+FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
+FPDFAttachment_GetValueType(FPDF_ATTACHMENT attachment, FPDF_BYTESTRING key);
+
+// Experimental API.
+// Set the string value corresponding to |key| in the params dictionary of the
+// embedded file |attachment|, overwriting the existing value if any. The value
+// type should be FPDF_OBJECT_STRING after this function call succeeds.
+//
+// attachment - handle to an attachment.
+// key - the key to the dictionary entry, encoded in UTF-8.
+// value - the string value to be set, encoded in UTF-16LE.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAttachment_SetStringValue(FPDF_ATTACHMENT attachment,
+ FPDF_BYTESTRING key,
+ FPDF_WIDESTRING value);
+
+// Experimental API.
+// Get the string value corresponding to |key| in the params dictionary of the
+// embedded file |attachment|. |buffer| is only modified if |buflen| is longer
+// than the length of the string value. Note that if |key| does not exist in the
+// dictionary or if |key|'s corresponding value in the dictionary is not a
+// string (i.e. the value is not of type FPDF_OBJECT_STRING or
+// FPDF_OBJECT_NAME), then an empty string would be copied to |buffer| and the
+// return value would be 2. On other errors, nothing would be added to |buffer|
+// and the return value would be 0.
+//
+// attachment - handle to an attachment.
+// key - the key to the requested string value, encoded in UTF-8.
+// buffer - buffer for holding the string value encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the dictionary value string in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAttachment_GetStringValue(FPDF_ATTACHMENT attachment,
+ FPDF_BYTESTRING key,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Set the file data of |attachment|, overwriting the existing file data if any.
+// The creation date and checksum will be updated, while all other dictionary
+// entries will be deleted. Note that only contents with |len| smaller than
+// INT_MAX is supported.
+//
+// attachment - handle to an attachment.
+// contents - buffer holding the file data to write to |attachment|.
+// len - length of file data in bytes.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAttachment_SetFile(FPDF_ATTACHMENT attachment,
+ FPDF_DOCUMENT document,
+ const void* contents,
+ unsigned long len);
+
+// Experimental API.
+// Get the file data of |attachment|.
+// When the attachment file data is readable, true is returned, and |out_buflen|
+// is updated to indicate the file data size. |buffer| is only modified if
+// |buflen| is non-null and long enough to contain the entire file data. Callers
+// must check both the return value and the input |buflen| is no less than the
+// returned |out_buflen| before using the data.
+//
+// Otherwise, when the attachment file data is unreadable or when |out_buflen|
+// is null, false is returned and |buffer| and |out_buflen| remain unmodified.
+//
+// attachment - handle to an attachment.
+// buffer - buffer for holding the file data from |attachment|.
+// buflen - length of the buffer in bytes.
+// out_buflen - pointer to the variable that will receive the minimum buffer
+// size to contain the file data of |attachment|.
+//
+// Returns true on success, false otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAttachment_GetFile(FPDF_ATTACHMENT attachment,
+ void* buffer,
+ unsigned long buflen,
+ unsigned long* out_buflen);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_ATTACHMENT_H_
diff --git a/src/main/cpp/include/fpdf_catalog.h b/src/main/cpp/include/fpdf_catalog.h
new file mode 100644
index 00000000..1a48411a
--- /dev/null
+++ b/src/main/cpp/include/fpdf_catalog.h
@@ -0,0 +1,34 @@
+// Copyright 2017 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PUBLIC_FPDF_CATALOG_H_
+#define PUBLIC_FPDF_CATALOG_H_
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/**
+ * Experimental API.
+ *
+ * Determine if |document| represents a tagged PDF.
+ *
+ * For the definition of tagged PDF, See (see 10.7 "Tagged PDF" in PDF
+ * Reference 1.7).
+ *
+ * document - handle to a document.
+ *
+ * Returns |true| iff |document| is a tagged PDF.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFCatalog_IsTagged(FPDF_DOCUMENT document);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_CATALOG_H_
diff --git a/src/main/cpp/include/fpdf_dataavail.h b/src/main/cpp/include/fpdf_dataavail.h
new file mode 100644
index 00000000..004d9beb
--- /dev/null
+++ b/src/main/cpp/include/fpdf_dataavail.h
@@ -0,0 +1,204 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_DATAAVAIL_H_
+#define PUBLIC_FPDF_DATAAVAIL_H_
+
+#include
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#define PDF_LINEARIZATION_UNKNOWN -1
+#define PDF_NOT_LINEARIZED 0
+#define PDF_LINEARIZED 1
+
+#define PDF_DATA_ERROR -1
+#define PDF_DATA_NOTAVAIL 0
+#define PDF_DATA_AVAIL 1
+
+#define PDF_FORM_ERROR -1
+#define PDF_FORM_NOTAVAIL 0
+#define PDF_FORM_AVAIL 1
+#define PDF_FORM_NOTEXIST 2
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// Interface for checking whether sections of the file are available.
+typedef struct _FX_FILEAVAIL {
+ // Version number of the interface. Must be 1.
+ int version;
+
+ // Reports if the specified data section is currently available. A section is
+ // available if all bytes in the section are available.
+ //
+ // Interface Version: 1
+ // Implementation Required: Yes
+ //
+ // pThis - pointer to the interface structure.
+ // offset - the offset of the data section in the file.
+ // size - the size of the data section.
+ //
+ // Returns true if the specified data section at |offset| of |size|
+ // is available.
+ FPDF_BOOL (*IsDataAvail)(struct _FX_FILEAVAIL* pThis,
+ size_t offset,
+ size_t size);
+} FX_FILEAVAIL;
+
+// Create a document availability provider.
+//
+// file_avail - pointer to file availability interface.
+// file - pointer to a file access interface.
+//
+// Returns a handle to the document availability provider, or NULL on error.
+//
+// FPDFAvail_Destroy() must be called when done with the availability provider.
+FPDF_EXPORT FPDF_AVAIL FPDF_CALLCONV FPDFAvail_Create(FX_FILEAVAIL* file_avail,
+ FPDF_FILEACCESS* file);
+
+// Destroy the |avail| document availability provider.
+//
+// avail - handle to document availability provider to be destroyed.
+FPDF_EXPORT void FPDF_CALLCONV FPDFAvail_Destroy(FPDF_AVAIL avail);
+
+// Download hints interface. Used to receive hints for further downloading.
+typedef struct _FX_DOWNLOADHINTS {
+ // Version number of the interface. Must be 1.
+ int version;
+
+ // Add a section to be downloaded.
+ //
+ // Interface Version: 1
+ // Implementation Required: Yes
+ //
+ // pThis - pointer to the interface structure.
+ // offset - the offset of the hint reported to be downloaded.
+ // size - the size of the hint reported to be downloaded.
+ //
+ // The |offset| and |size| of the section may not be unique. Part of the
+ // section might be already available. The download manager must deal with
+ // overlapping sections.
+ void (*AddSegment)(struct _FX_DOWNLOADHINTS* pThis,
+ size_t offset,
+ size_t size);
+} FX_DOWNLOADHINTS;
+
+// Checks if the document is ready for loading, if not, gets download hints.
+//
+// avail - handle to document availability provider.
+// hints - pointer to a download hints interface.
+//
+// Returns one of:
+// PDF_DATA_ERROR: A common error is returned. Data availability unknown.
+// PDF_DATA_NOTAVAIL: Data not yet available.
+// PDF_DATA_AVAIL: Data available.
+//
+// Applications should call this function whenever new data arrives, and process
+// all the generated download hints, if any, until the function returns
+// |PDF_DATA_ERROR| or |PDF_DATA_AVAIL|.
+// if hints is nullptr, the function just check current document availability.
+//
+// Once all data is available, call FPDFAvail_GetDocument() to get a document
+// handle.
+FPDF_EXPORT int FPDF_CALLCONV FPDFAvail_IsDocAvail(FPDF_AVAIL avail,
+ FX_DOWNLOADHINTS* hints);
+
+// Get document from the availability provider.
+//
+// avail - handle to document availability provider.
+// password - password for decrypting the PDF file. Optional.
+//
+// Returns a handle to the document.
+//
+// When FPDFAvail_IsDocAvail() returns TRUE, call FPDFAvail_GetDocument() to
+// retrieve the document handle.
+// See the comments for FPDF_LoadDocument() regarding the encoding for
+// |password|.
+FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV
+FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password);
+
+// Get the page number for the first available page in a linearized PDF.
+//
+// doc - document handle.
+//
+// Returns the zero-based index for the first available page.
+//
+// For most linearized PDFs, the first available page will be the first page,
+// however, some PDFs might make another page the first available page.
+// For non-linearized PDFs, this function will always return zero.
+FPDF_EXPORT int FPDF_CALLCONV FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc);
+
+// Check if |page_index| is ready for loading, if not, get the
+// |FX_DOWNLOADHINTS|.
+//
+// avail - handle to document availability provider.
+// page_index - index number of the page. Zero for the first page.
+// hints - pointer to a download hints interface. Populated if
+// |page_index| is not available.
+//
+// Returns one of:
+// PDF_DATA_ERROR: A common error is returned. Data availability unknown.
+// PDF_DATA_NOTAVAIL: Data not yet available.
+// PDF_DATA_AVAIL: Data available.
+//
+// This function can be called only after FPDFAvail_GetDocument() is called.
+// Applications should call this function whenever new data arrives and process
+// all the generated download |hints|, if any, until this function returns
+// |PDF_DATA_ERROR| or |PDF_DATA_AVAIL|. Applications can then perform page
+// loading.
+// if hints is nullptr, the function just check current availability of
+// specified page.
+FPDF_EXPORT int FPDF_CALLCONV FPDFAvail_IsPageAvail(FPDF_AVAIL avail,
+ int page_index,
+ FX_DOWNLOADHINTS* hints);
+
+// Check if form data is ready for initialization, if not, get the
+// |FX_DOWNLOADHINTS|.
+//
+// avail - handle to document availability provider.
+// hints - pointer to a download hints interface. Populated if form is not
+// ready for initialization.
+//
+// Returns one of:
+// PDF_FORM_ERROR: A common eror, in general incorrect parameters.
+// PDF_FORM_NOTAVAIL: Data not available.
+// PDF_FORM_AVAIL: Data available.
+// PDF_FORM_NOTEXIST: No form data.
+//
+// This function can be called only after FPDFAvail_GetDocument() is called.
+// The application should call this function whenever new data arrives and
+// process all the generated download |hints|, if any, until the function
+// |PDF_FORM_ERROR|, |PDF_FORM_AVAIL| or |PDF_FORM_NOTEXIST|.
+// if hints is nullptr, the function just check current form availability.
+//
+// Applications can then perform page loading. It is recommend to call
+// FPDFDOC_InitFormFillEnvironment() when |PDF_FORM_AVAIL| is returned.
+FPDF_EXPORT int FPDF_CALLCONV FPDFAvail_IsFormAvail(FPDF_AVAIL avail,
+ FX_DOWNLOADHINTS* hints);
+
+// Check whether a document is a linearized PDF.
+//
+// avail - handle to document availability provider.
+//
+// Returns one of:
+// PDF_LINEARIZED
+// PDF_NOT_LINEARIZED
+// PDF_LINEARIZATION_UNKNOWN
+//
+// FPDFAvail_IsLinearized() will return |PDF_LINEARIZED| or |PDF_NOT_LINEARIZED|
+// when we have 1k of data. If the files size less than 1k, it returns
+// |PDF_LINEARIZATION_UNKNOWN| as there is insufficient information to determine
+// if the PDF is linearlized.
+FPDF_EXPORT int FPDF_CALLCONV FPDFAvail_IsLinearized(FPDF_AVAIL avail);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_DATAAVAIL_H_
diff --git a/src/main/cpp/include/fpdf_doc.h b/src/main/cpp/include/fpdf_doc.h
new file mode 100644
index 00000000..2dc22d9c
--- /dev/null
+++ b/src/main/cpp/include/fpdf_doc.h
@@ -0,0 +1,438 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_DOC_H_
+#define PUBLIC_FPDF_DOC_H_
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// Unsupported action type.
+#define PDFACTION_UNSUPPORTED 0
+// Go to a destination within current document.
+#define PDFACTION_GOTO 1
+// Go to a destination within another document.
+#define PDFACTION_REMOTEGOTO 2
+// URI, including web pages and other Internet resources.
+#define PDFACTION_URI 3
+// Launch an application or open a file.
+#define PDFACTION_LAUNCH 4
+// Go to a destination in an embedded file.
+#define PDFACTION_EMBEDDEDGOTO 5
+
+// View destination fit types. See pdfmark reference v9, page 48.
+#define PDFDEST_VIEW_UNKNOWN_MODE 0
+#define PDFDEST_VIEW_XYZ 1
+#define PDFDEST_VIEW_FIT 2
+#define PDFDEST_VIEW_FITH 3
+#define PDFDEST_VIEW_FITV 4
+#define PDFDEST_VIEW_FITR 5
+#define PDFDEST_VIEW_FITB 6
+#define PDFDEST_VIEW_FITBH 7
+#define PDFDEST_VIEW_FITBV 8
+
+// The file identifier entry type. See section 14.4 "File Identifiers" of the
+// ISO 32000-1:2008 spec.
+typedef enum {
+ FILEIDTYPE_PERMANENT = 0,
+ FILEIDTYPE_CHANGING = 1
+} FPDF_FILEIDTYPE;
+
+// Get the first child of |bookmark|, or the first top-level bookmark item.
+//
+// document - handle to the document.
+// bookmark - handle to the current bookmark. Pass NULL for the first top
+// level item.
+//
+// Returns a handle to the first child of |bookmark| or the first top-level
+// bookmark item. NULL if no child or top-level bookmark found.
+// Note that another name for the bookmarks is the document outline, as
+// described in ISO 32000-1:2008, section 12.3.3.
+FPDF_EXPORT FPDF_BOOKMARK FPDF_CALLCONV
+FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
+
+// Get the next sibling of |bookmark|.
+//
+// document - handle to the document.
+// bookmark - handle to the current bookmark.
+//
+// Returns a handle to the next sibling of |bookmark|, or NULL if this is the
+// last bookmark at this level.
+//
+// Note that the caller is responsible for handling circular bookmark
+// references, as may arise from malformed documents.
+FPDF_EXPORT FPDF_BOOKMARK FPDF_CALLCONV
+FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
+
+// Get the title of |bookmark|.
+//
+// bookmark - handle to the bookmark.
+// buffer - buffer for the title. May be NULL.
+// buflen - the length of the buffer in bytes. May be 0.
+//
+// Returns the number of bytes in the title, including the terminating NUL
+// character. The number of bytes is returned regardless of the |buffer| and
+// |buflen| parameters.
+//
+// Regardless of the platform, the |buffer| is always in UTF-16LE encoding. The
+// string is terminated by a UTF16 NUL character. If |buflen| is less than the
+// required length, or |buffer| is NULL, |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFBookmark_GetTitle(FPDF_BOOKMARK bookmark,
+ void* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Get the number of chlidren of |bookmark|.
+//
+// bookmark - handle to the bookmark.
+//
+// Returns a signed integer that represents the number of sub-items the given
+// bookmark has. If the value is positive, child items shall be shown by default
+// (open state). If the value is negative, child items shall be hidden by
+// default (closed state). Please refer to PDF 32000-1:2008, Table 153.
+// Returns 0 if the bookmark has no children or is invalid.
+FPDF_EXPORT int FPDF_CALLCONV FPDFBookmark_GetCount(FPDF_BOOKMARK bookmark);
+
+// Find the bookmark with |title| in |document|.
+//
+// document - handle to the document.
+// title - the UTF-16LE encoded Unicode title for which to search.
+//
+// Returns the handle to the bookmark, or NULL if |title| can't be found.
+//
+// FPDFBookmark_Find() will always return the first bookmark found even if
+// multiple bookmarks have the same |title|.
+FPDF_EXPORT FPDF_BOOKMARK FPDF_CALLCONV
+FPDFBookmark_Find(FPDF_DOCUMENT document, FPDF_WIDESTRING title);
+
+// Get the destination associated with |bookmark|.
+//
+// document - handle to the document.
+// bookmark - handle to the bookmark.
+//
+// Returns the handle to the destination data, or NULL if no destination is
+// associated with |bookmark|.
+FPDF_EXPORT FPDF_DEST FPDF_CALLCONV
+FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
+
+// Get the action associated with |bookmark|.
+//
+// bookmark - handle to the bookmark.
+//
+// Returns the handle to the action data, or NULL if no action is associated
+// with |bookmark|.
+// If this function returns a valid handle, it is valid as long as |bookmark| is
+// valid.
+// If this function returns NULL, FPDFBookmark_GetDest() should be called to get
+// the |bookmark| destination data.
+FPDF_EXPORT FPDF_ACTION FPDF_CALLCONV
+FPDFBookmark_GetAction(FPDF_BOOKMARK bookmark);
+
+// Get the type of |action|.
+//
+// action - handle to the action.
+//
+// Returns one of:
+// PDFACTION_UNSUPPORTED
+// PDFACTION_GOTO
+// PDFACTION_REMOTEGOTO
+// PDFACTION_URI
+// PDFACTION_LAUNCH
+FPDF_EXPORT unsigned long FPDF_CALLCONV FPDFAction_GetType(FPDF_ACTION action);
+
+// Get the destination of |action|.
+//
+// document - handle to the document.
+// action - handle to the action. |action| must be a |PDFACTION_GOTO| or
+// |PDFACTION_REMOTEGOTO|.
+//
+// Returns a handle to the destination data, or NULL on error, typically
+// because the arguments were bad or the action was of the wrong type.
+//
+// In the case of |PDFACTION_REMOTEGOTO|, you must first call
+// FPDFAction_GetFilePath(), then load the document at that path, then pass
+// the document handle from that document as |document| to FPDFAction_GetDest().
+FPDF_EXPORT FPDF_DEST FPDF_CALLCONV FPDFAction_GetDest(FPDF_DOCUMENT document,
+ FPDF_ACTION action);
+
+// Get the file path of |action|.
+//
+// action - handle to the action. |action| must be a |PDFACTION_LAUNCH| or
+// |PDFACTION_REMOTEGOTO|.
+// buffer - a buffer for output the path string. May be NULL.
+// buflen - the length of the buffer, in bytes. May be 0.
+//
+// Returns the number of bytes in the file path, including the trailing NUL
+// character, or 0 on error, typically because the arguments were bad or the
+// action was of the wrong type.
+//
+// Regardless of the platform, the |buffer| is always in UTF-8 encoding.
+// If |buflen| is less than the returned length, or |buffer| is NULL, |buffer|
+// will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAction_GetFilePath(FPDF_ACTION action, void* buffer, unsigned long buflen);
+
+// Get the URI path of |action|.
+//
+// document - handle to the document.
+// action - handle to the action. Must be a |PDFACTION_URI|.
+// buffer - a buffer for the path string. May be NULL.
+// buflen - the length of the buffer, in bytes. May be 0.
+//
+// Returns the number of bytes in the URI path, including the trailing NUL
+// character, or 0 on error, typically because the arguments were bad or the
+// action was of the wrong type.
+//
+// The |buffer| may contain badly encoded data. The caller should validate the
+// output. e.g. Check to see if it is UTF-8.
+//
+// If |buflen| is less than the returned length, or |buffer| is NULL, |buffer|
+// will not be modified.
+//
+// Historically, the documentation for this API claimed |buffer| is always
+// encoded in 7-bit ASCII, but did not actually enforce it.
+// https://pdfium.googlesource.com/pdfium.git/+/d609e84cee2e14a18333247485af91df48a40592
+// added that enforcement, but that did not work well for real world PDFs that
+// used UTF-8. As of this writing, this API reverted back to its original
+// behavior prior to commit d609e84cee.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFAction_GetURIPath(FPDF_DOCUMENT document,
+ FPDF_ACTION action,
+ void* buffer,
+ unsigned long buflen);
+
+// Get the page index of |dest|.
+//
+// document - handle to the document.
+// dest - handle to the destination.
+//
+// Returns the 0-based page index containing |dest|. Returns -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV FPDFDest_GetDestPageIndex(FPDF_DOCUMENT document,
+ FPDF_DEST dest);
+
+// Experimental API.
+// Get the view (fit type) specified by |dest|.
+//
+// dest - handle to the destination.
+// pNumParams - receives the number of view parameters, which is at most 4.
+// pParams - buffer to write the view parameters. Must be at least 4
+// FS_FLOATs long.
+// Returns one of the PDFDEST_VIEW_* constants, PDFDEST_VIEW_UNKNOWN_MODE if
+// |dest| does not specify a view.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFDest_GetView(FPDF_DEST dest, unsigned long* pNumParams, FS_FLOAT* pParams);
+
+// Get the (x, y, zoom) location of |dest| in the destination page, if the
+// destination is in [page /XYZ x y zoom] syntax.
+//
+// dest - handle to the destination.
+// hasXVal - out parameter; true if the x value is not null
+// hasYVal - out parameter; true if the y value is not null
+// hasZoomVal - out parameter; true if the zoom value is not null
+// x - out parameter; the x coordinate, in page coordinates.
+// y - out parameter; the y coordinate, in page coordinates.
+// zoom - out parameter; the zoom value.
+// Returns TRUE on successfully reading the /XYZ value.
+//
+// Note the [x, y, zoom] values are only set if the corresponding hasXVal,
+// hasYVal or hasZoomVal flags are true.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFDest_GetLocationInPage(FPDF_DEST dest,
+ FPDF_BOOL* hasXVal,
+ FPDF_BOOL* hasYVal,
+ FPDF_BOOL* hasZoomVal,
+ FS_FLOAT* x,
+ FS_FLOAT* y,
+ FS_FLOAT* zoom);
+
+// Find a link at point (|x|,|y|) on |page|.
+//
+// page - handle to the document page.
+// x - the x coordinate, in the page coordinate system.
+// y - the y coordinate, in the page coordinate system.
+//
+// Returns a handle to the link, or NULL if no link found at the given point.
+//
+// You can convert coordinates from screen coordinates to page coordinates using
+// FPDF_DeviceToPage().
+FPDF_EXPORT FPDF_LINK FPDF_CALLCONV FPDFLink_GetLinkAtPoint(FPDF_PAGE page,
+ double x,
+ double y);
+
+// Find the Z-order of link at point (|x|,|y|) on |page|.
+//
+// page - handle to the document page.
+// x - the x coordinate, in the page coordinate system.
+// y - the y coordinate, in the page coordinate system.
+//
+// Returns the Z-order of the link, or -1 if no link found at the given point.
+// Larger Z-order numbers are closer to the front.
+//
+// You can convert coordinates from screen coordinates to page coordinates using
+// FPDF_DeviceToPage().
+FPDF_EXPORT int FPDF_CALLCONV FPDFLink_GetLinkZOrderAtPoint(FPDF_PAGE page,
+ double x,
+ double y);
+
+// Get destination info for |link|.
+//
+// document - handle to the document.
+// link - handle to the link.
+//
+// Returns a handle to the destination, or NULL if there is no destination
+// associated with the link. In this case, you should call FPDFLink_GetAction()
+// to retrieve the action associated with |link|.
+FPDF_EXPORT FPDF_DEST FPDF_CALLCONV FPDFLink_GetDest(FPDF_DOCUMENT document,
+ FPDF_LINK link);
+
+// Get action info for |link|.
+//
+// link - handle to the link.
+//
+// Returns a handle to the action associated to |link|, or NULL if no action.
+// If this function returns a valid handle, it is valid as long as |link| is
+// valid.
+FPDF_EXPORT FPDF_ACTION FPDF_CALLCONV FPDFLink_GetAction(FPDF_LINK link);
+
+// Enumerates all the link annotations in |page|.
+//
+// page - handle to the page.
+// start_pos - the start position, should initially be 0 and is updated with
+// the next start position on return.
+// link_annot - the link handle for |startPos|.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_Enumerate(FPDF_PAGE page,
+ int* start_pos,
+ FPDF_LINK* link_annot);
+
+// Experimental API.
+// Gets FPDF_ANNOTATION object for |link_annot|.
+//
+// page - handle to the page in which FPDF_LINK object is present.
+// link_annot - handle to link annotation.
+//
+// Returns FPDF_ANNOTATION from the FPDF_LINK and NULL on failure,
+// if the input link annot or page is NULL.
+FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
+FPDFLink_GetAnnot(FPDF_PAGE page, FPDF_LINK link_annot);
+
+// Get the rectangle for |link_annot|.
+//
+// link_annot - handle to the link annotation.
+// rect - the annotation rectangle.
+//
+// Returns true on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_GetAnnotRect(FPDF_LINK link_annot,
+ FS_RECTF* rect);
+
+// Get the count of quadrilateral points to the |link_annot|.
+//
+// link_annot - handle to the link annotation.
+//
+// Returns the count of quadrilateral points.
+FPDF_EXPORT int FPDF_CALLCONV FPDFLink_CountQuadPoints(FPDF_LINK link_annot);
+
+// Get the quadrilateral points for the specified |quad_index| in |link_annot|.
+//
+// link_annot - handle to the link annotation.
+// quad_index - the specified quad point index.
+// quad_points - receives the quadrilateral points.
+//
+// Returns true on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFLink_GetQuadPoints(FPDF_LINK link_annot,
+ int quad_index,
+ FS_QUADPOINTSF* quad_points);
+
+// Experimental API
+// Gets an additional-action from |page|.
+//
+// page - handle to the page, as returned by FPDF_LoadPage().
+// aa_type - the type of the page object's addtional-action, defined
+// in public/fpdf_formfill.h
+//
+// Returns the handle to the action data, or NULL if there is no
+// additional-action of type |aa_type|.
+// If this function returns a valid handle, it is valid as long as |page| is
+// valid.
+FPDF_EXPORT FPDF_ACTION FPDF_CALLCONV FPDF_GetPageAAction(FPDF_PAGE page,
+ int aa_type);
+
+// Experimental API.
+// Get the file identifer defined in the trailer of |document|.
+//
+// document - handle to the document.
+// id_type - the file identifier type to retrieve.
+// buffer - a buffer for the file identifier. May be NULL.
+// buflen - the length of the buffer, in bytes. May be 0.
+//
+// Returns the number of bytes in the file identifier, including the NUL
+// terminator.
+//
+// The |buffer| is always a byte string. The |buffer| is followed by a NUL
+// terminator. If |buflen| is less than the returned length, or |buffer| is
+// NULL, |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_GetFileIdentifier(FPDF_DOCUMENT document,
+ FPDF_FILEIDTYPE id_type,
+ void* buffer,
+ unsigned long buflen);
+
+// Get meta-data |tag| content from |document|.
+//
+// document - handle to the document.
+// tag - the tag to retrieve. The tag can be one of:
+// Title, Author, Subject, Keywords, Creator, Producer,
+// CreationDate, or ModDate.
+// For detailed explanations of these tags and their respective
+// values, please refer to PDF Reference 1.6, section 10.2.1,
+// 'Document Information Dictionary'.
+// buffer - a buffer for the tag. May be NULL.
+// buflen - the length of the buffer, in bytes. May be 0.
+//
+// Returns the number of bytes in the tag, including trailing zeros.
+//
+// The |buffer| is always encoded in UTF-16LE. The |buffer| is followed by two
+// bytes of zeros indicating the end of the string. If |buflen| is less than
+// the returned length, or |buffer| is NULL, |buffer| will not be modified.
+//
+// For linearized files, FPDFAvail_IsFormAvail must be called before this, and
+// it must have returned PDF_FORM_AVAIL or PDF_FORM_NOTEXIST. Before that, there
+// is no guarantee the metadata has been loaded.
+FPDF_EXPORT unsigned long FPDF_CALLCONV FPDF_GetMetaText(FPDF_DOCUMENT document,
+ FPDF_BYTESTRING tag,
+ void* buffer,
+ unsigned long buflen);
+
+// Get the page label for |page_index| from |document|.
+//
+// document - handle to the document.
+// page_index - the 0-based index of the page.
+// buffer - a buffer for the page label. May be NULL.
+// buflen - the length of the buffer, in bytes. May be 0.
+//
+// Returns the number of bytes in the page label, including trailing zeros.
+//
+// The |buffer| is always encoded in UTF-16LE. The |buffer| is followed by two
+// bytes of zeros indicating the end of the string. If |buflen| is less than
+// the returned length, or |buffer| is NULL, |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_GetPageLabel(FPDF_DOCUMENT document,
+ int page_index,
+ void* buffer,
+ unsigned long buflen);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_DOC_H_
diff --git a/src/main/cpp/include/fpdf_edit.h b/src/main/cpp/include/fpdf_edit.h
new file mode 100644
index 00000000..e2135f2b
--- /dev/null
+++ b/src/main/cpp/include/fpdf_edit.h
@@ -0,0 +1,1519 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_EDIT_H_
+#define PUBLIC_FPDF_EDIT_H_
+
+#include
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#define FPDF_ARGB(a, r, g, b) \
+ ((uint32_t)(((uint32_t)(b)&0xff) | (((uint32_t)(g)&0xff) << 8) | \
+ (((uint32_t)(r)&0xff) << 16) | (((uint32_t)(a)&0xff) << 24)))
+#define FPDF_GetBValue(argb) ((uint8_t)(argb))
+#define FPDF_GetGValue(argb) ((uint8_t)(((uint16_t)(argb)) >> 8))
+#define FPDF_GetRValue(argb) ((uint8_t)((argb) >> 16))
+#define FPDF_GetAValue(argb) ((uint8_t)((argb) >> 24))
+
+// Refer to PDF Reference version 1.7 table 4.12 for all color space families.
+#define FPDF_COLORSPACE_UNKNOWN 0
+#define FPDF_COLORSPACE_DEVICEGRAY 1
+#define FPDF_COLORSPACE_DEVICERGB 2
+#define FPDF_COLORSPACE_DEVICECMYK 3
+#define FPDF_COLORSPACE_CALGRAY 4
+#define FPDF_COLORSPACE_CALRGB 5
+#define FPDF_COLORSPACE_LAB 6
+#define FPDF_COLORSPACE_ICCBASED 7
+#define FPDF_COLORSPACE_SEPARATION 8
+#define FPDF_COLORSPACE_DEVICEN 9
+#define FPDF_COLORSPACE_INDEXED 10
+#define FPDF_COLORSPACE_PATTERN 11
+
+// The page object constants.
+#define FPDF_PAGEOBJ_UNKNOWN 0
+#define FPDF_PAGEOBJ_TEXT 1
+#define FPDF_PAGEOBJ_PATH 2
+#define FPDF_PAGEOBJ_IMAGE 3
+#define FPDF_PAGEOBJ_SHADING 4
+#define FPDF_PAGEOBJ_FORM 5
+
+// The path segment constants.
+#define FPDF_SEGMENT_UNKNOWN -1
+#define FPDF_SEGMENT_LINETO 0
+#define FPDF_SEGMENT_BEZIERTO 1
+#define FPDF_SEGMENT_MOVETO 2
+
+#define FPDF_FILLMODE_NONE 0
+#define FPDF_FILLMODE_ALTERNATE 1
+#define FPDF_FILLMODE_WINDING 2
+
+#define FPDF_FONT_TYPE1 1
+#define FPDF_FONT_TRUETYPE 2
+
+#define FPDF_LINECAP_BUTT 0
+#define FPDF_LINECAP_ROUND 1
+#define FPDF_LINECAP_PROJECTING_SQUARE 2
+
+#define FPDF_LINEJOIN_MITER 0
+#define FPDF_LINEJOIN_ROUND 1
+#define FPDF_LINEJOIN_BEVEL 2
+
+// See FPDF_SetPrintMode() for descriptions.
+#define FPDF_PRINTMODE_EMF 0
+#define FPDF_PRINTMODE_TEXTONLY 1
+#define FPDF_PRINTMODE_POSTSCRIPT2 2
+#define FPDF_PRINTMODE_POSTSCRIPT3 3
+#define FPDF_PRINTMODE_POSTSCRIPT2_PASSTHROUGH 4
+#define FPDF_PRINTMODE_POSTSCRIPT3_PASSTHROUGH 5
+#define FPDF_PRINTMODE_EMF_IMAGE_MASKS 6
+#define FPDF_PRINTMODE_POSTSCRIPT3_TYPE42 7
+#define FPDF_PRINTMODE_POSTSCRIPT3_TYPE42_PASSTHROUGH 8
+
+typedef struct FPDF_IMAGEOBJ_METADATA {
+ // The image width in pixels.
+ unsigned int width;
+ // The image height in pixels.
+ unsigned int height;
+ // The image's horizontal pixel-per-inch.
+ float horizontal_dpi;
+ // The image's vertical pixel-per-inch.
+ float vertical_dpi;
+ // The number of bits used to represent each pixel.
+ unsigned int bits_per_pixel;
+ // The image's colorspace. See above for the list of FPDF_COLORSPACE_*.
+ int colorspace;
+ // The image's marked content ID. Useful for pairing with associated alt-text.
+ // A value of -1 indicates no ID.
+ int marked_content_id;
+} FPDF_IMAGEOBJ_METADATA;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// Create a new PDF document.
+//
+// Returns a handle to a new document, or NULL on failure.
+FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV FPDF_CreateNewDocument();
+
+// Create a new PDF page.
+//
+// document - handle to document.
+// page_index - suggested 0-based index of the page to create. If it is larger
+// than document's current last index(L), the created page index
+// is the next available index -- L+1.
+// width - the page width in points.
+// height - the page height in points.
+//
+// Returns the handle to the new page or NULL on failure.
+//
+// The page should be closed with FPDF_ClosePage() when finished as
+// with any other page in the document.
+FPDF_EXPORT FPDF_PAGE FPDF_CALLCONV FPDFPage_New(FPDF_DOCUMENT document,
+ int page_index,
+ double width,
+ double height);
+
+// Delete the page at |page_index|.
+//
+// document - handle to document.
+// page_index - the index of the page to delete.
+FPDF_EXPORT void FPDF_CALLCONV FPDFPage_Delete(FPDF_DOCUMENT document,
+ int page_index);
+
+// Experimental API.
+// Move the given pages to a new index position.
+//
+// page_indices - the ordered list of pages to move. No duplicates allowed.
+// page_indices_len - the number of elements in |page_indices|
+// dest_page_index - the new index position to which the pages in
+// |page_indices| are moved.
+//
+// Returns TRUE on success. If it returns FALSE, the document may be left in an
+// indeterminate state.
+//
+// Example: The PDF document starts out with pages [A, B, C, D], with indices
+// [0, 1, 2, 3].
+//
+// > Move(doc, [3, 2], 2, 1); // returns true
+// > // The document has pages [A, D, C, B].
+// >
+// > Move(doc, [0, 4, 3], 3, 1); // returns false
+// > // Returned false because index 4 is out of range.
+// >
+// > Move(doc, [0, 3, 1], 3, 2); // returns false
+// > // Returned false because index 2 is out of range for 3 page indices.
+// >
+// > Move(doc, [2, 2], 2, 0); // returns false
+// > // Returned false because [2, 2] contains duplicates.
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_MovePages(FPDF_DOCUMENT document,
+ const int* page_indices,
+ unsigned long page_indices_len,
+ int dest_page_index);
+
+// Get the rotation of |page|.
+//
+// page - handle to a page
+//
+// Returns one of the following indicating the page rotation:
+// 0 - No rotation.
+// 1 - Rotated 90 degrees clockwise.
+// 2 - Rotated 180 degrees clockwise.
+// 3 - Rotated 270 degrees clockwise.
+FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetRotation(FPDF_PAGE page);
+
+// Set rotation for |page|.
+//
+// page - handle to a page.
+// rotate - the rotation value, one of:
+// 0 - No rotation.
+// 1 - Rotated 90 degrees clockwise.
+// 2 - Rotated 180 degrees clockwise.
+// 3 - Rotated 270 degrees clockwise.
+FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetRotation(FPDF_PAGE page, int rotate);
+
+// Insert |page_object| into |page|.
+//
+// page - handle to a page
+// page_object - handle to a page object. The |page_object| will be
+// automatically freed.
+FPDF_EXPORT void FPDF_CALLCONV
+FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_object);
+
+// Experimental API.
+// Remove |page_object| from |page|.
+//
+// page - handle to a page
+// page_object - handle to a page object to be removed.
+//
+// Returns TRUE on success.
+//
+// Ownership is transferred to the caller. Call FPDFPageObj_Destroy() to free
+// it.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPage_RemoveObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_object);
+
+// Get number of page objects inside |page|.
+//
+// page - handle to a page.
+//
+// Returns the number of objects in |page|.
+FPDF_EXPORT int FPDF_CALLCONV FPDFPage_CountObjects(FPDF_PAGE page);
+
+// Get object in |page| at |index|.
+//
+// page - handle to a page.
+// index - the index of a page object.
+//
+// Returns the handle to the page object, or NULL on failed.
+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPage_GetObject(FPDF_PAGE page,
+ int index);
+
+// Checks if |page| contains transparency.
+//
+// page - handle to a page.
+//
+// Returns TRUE if |page| contains transparency.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_HasTransparency(FPDF_PAGE page);
+
+// Generate the content of |page|.
+//
+// page - handle to a page.
+//
+// Returns TRUE on success.
+//
+// Before you save the page to a file, or reload the page, you must call
+// |FPDFPage_GenerateContent| or any changes to |page| will be lost.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GenerateContent(FPDF_PAGE page);
+
+// Destroy |page_object| by releasing its resources. |page_object| must have
+// been created by FPDFPageObj_CreateNew{Path|Rect}() or
+// FPDFPageObj_New{Text|Image}Obj(). This function must be called on
+// newly-created objects if they are not added to a page through
+// FPDFPage_InsertObject() or to an annotation through FPDFAnnot_AppendObject().
+//
+// page_object - handle to a page object.
+FPDF_EXPORT void FPDF_CALLCONV FPDFPageObj_Destroy(FPDF_PAGEOBJECT page_object);
+
+// Checks if |page_object| contains transparency.
+//
+// page_object - handle to a page object.
+//
+// Returns TRUE if |page_object| contains transparency.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT page_object);
+
+// Get type of |page_object|.
+//
+// page_object - handle to a page object.
+//
+// Returns one of the FPDF_PAGEOBJ_* values on success, FPDF_PAGEOBJ_UNKNOWN on
+// error.
+FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_GetType(FPDF_PAGEOBJECT page_object);
+
+// Transform |page_object| by the given matrix.
+//
+// page_object - handle to a page object.
+// a - matrix value.
+// b - matrix value.
+// c - matrix value.
+// d - matrix value.
+// e - matrix value.
+// f - matrix value.
+//
+// The matrix is composed as:
+// |a c e|
+// |b d f|
+// and can be used to scale, rotate, shear and translate the |page_object|.
+FPDF_EXPORT void FPDF_CALLCONV
+FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f);
+
+// Experimental API.
+// Get the transform matrix of a page object.
+//
+// page_object - handle to a page object.
+// matrix - pointer to struct to receive the matrix value.
+//
+// The matrix is composed as:
+// |a c e|
+// |b d f|
+// and used to scale, rotate, shear and translate the page object.
+//
+// For page objects outside form objects, the matrix values are relative to the
+// page that contains it.
+// For page objects inside form objects, the matrix values are relative to the
+// form that contains it.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_GetMatrix(FPDF_PAGEOBJECT page_object, FS_MATRIX* matrix);
+
+// Experimental API.
+// Set the transform matrix of a page object.
+//
+// page_object - handle to a page object.
+// matrix - pointer to struct with the matrix value.
+//
+// The matrix is composed as:
+// |a c e|
+// |b d f|
+// and can be used to scale, rotate, shear and translate the page object.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_SetMatrix(FPDF_PAGEOBJECT page_object, const FS_MATRIX* matrix);
+
+// Transform all annotations in |page|.
+//
+// page - handle to a page.
+// a - matrix value.
+// b - matrix value.
+// c - matrix value.
+// d - matrix value.
+// e - matrix value.
+// f - matrix value.
+//
+// The matrix is composed as:
+// |a c e|
+// |b d f|
+// and can be used to scale, rotate, shear and translate the |page| annotations.
+FPDF_EXPORT void FPDF_CALLCONV FPDFPage_TransformAnnots(FPDF_PAGE page,
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f);
+
+// Create a new image object.
+//
+// document - handle to a document.
+//
+// Returns a handle to a new image object.
+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
+FPDFPageObj_NewImageObj(FPDF_DOCUMENT document);
+
+// Experimental API.
+// Get number of content marks in |page_object|.
+//
+// page_object - handle to a page object.
+//
+// Returns the number of content marks in |page_object|, or -1 in case of
+// failure.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFPageObj_CountMarks(FPDF_PAGEOBJECT page_object);
+
+// Experimental API.
+// Get content mark in |page_object| at |index|.
+//
+// page_object - handle to a page object.
+// index - the index of a page object.
+//
+// Returns the handle to the content mark, or NULL on failure. The handle is
+// still owned by the library, and it should not be freed directly. It becomes
+// invalid if the page object is destroyed, either directly or indirectly by
+// unloading the page.
+FPDF_EXPORT FPDF_PAGEOBJECTMARK FPDF_CALLCONV
+FPDFPageObj_GetMark(FPDF_PAGEOBJECT page_object, unsigned long index);
+
+// Experimental API.
+// Add a new content mark to a |page_object|.
+//
+// page_object - handle to a page object.
+// name - the name (tag) of the mark.
+//
+// Returns the handle to the content mark, or NULL on failure. The handle is
+// still owned by the library, and it should not be freed directly. It becomes
+// invalid if the page object is destroyed, either directly or indirectly by
+// unloading the page.
+FPDF_EXPORT FPDF_PAGEOBJECTMARK FPDF_CALLCONV
+FPDFPageObj_AddMark(FPDF_PAGEOBJECT page_object, FPDF_BYTESTRING name);
+
+// Experimental API.
+// Removes a content |mark| from a |page_object|.
+// The mark handle will be invalid after the removal.
+//
+// page_object - handle to a page object.
+// mark - handle to a content mark in that object to remove.
+//
+// Returns TRUE if the operation succeeded, FALSE if it failed.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_RemoveMark(FPDF_PAGEOBJECT page_object, FPDF_PAGEOBJECTMARK mark);
+
+// Experimental API.
+// Get the name of a content mark.
+//
+// mark - handle to a content mark.
+// buffer - buffer for holding the returned name in UTF-16LE. This is only
+// modified if |buflen| is longer than the length of the name.
+// Optional, pass null to just retrieve the size of the buffer
+// needed.
+// buflen - length of the buffer.
+// out_buflen - pointer to variable that will receive the minimum buffer size
+// to contain the name. Not filled if FALSE is returned.
+//
+// Returns TRUE if the operation succeeded, FALSE if it failed.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObjMark_GetName(FPDF_PAGEOBJECTMARK mark,
+ void* buffer,
+ unsigned long buflen,
+ unsigned long* out_buflen);
+
+// Experimental API.
+// Get the number of key/value pair parameters in |mark|.
+//
+// mark - handle to a content mark.
+//
+// Returns the number of key/value pair parameters |mark|, or -1 in case of
+// failure.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFPageObjMark_CountParams(FPDF_PAGEOBJECTMARK mark);
+
+// Experimental API.
+// Get the key of a property in a content mark.
+//
+// mark - handle to a content mark.
+// index - index of the property.
+// buffer - buffer for holding the returned key in UTF-16LE. This is only
+// modified if |buflen| is longer than the length of the key.
+// Optional, pass null to just retrieve the size of the buffer
+// needed.
+// buflen - length of the buffer.
+// out_buflen - pointer to variable that will receive the minimum buffer size
+// to contain the key. Not filled if FALSE is returned.
+//
+// Returns TRUE if the operation was successful, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObjMark_GetParamKey(FPDF_PAGEOBJECTMARK mark,
+ unsigned long index,
+ void* buffer,
+ unsigned long buflen,
+ unsigned long* out_buflen);
+
+// Experimental API.
+// Get the type of the value of a property in a content mark by key.
+//
+// mark - handle to a content mark.
+// key - string key of the property.
+//
+// Returns the type of the value, or FPDF_OBJECT_UNKNOWN in case of failure.
+FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
+FPDFPageObjMark_GetParamValueType(FPDF_PAGEOBJECTMARK mark,
+ FPDF_BYTESTRING key);
+
+// Experimental API.
+// Get the value of a number property in a content mark by key as int.
+// FPDFPageObjMark_GetParamValueType() should have returned FPDF_OBJECT_NUMBER
+// for this property.
+//
+// mark - handle to a content mark.
+// key - string key of the property.
+// out_value - pointer to variable that will receive the value. Not filled if
+// false is returned.
+//
+// Returns TRUE if the key maps to a number value, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObjMark_GetParamIntValue(FPDF_PAGEOBJECTMARK mark,
+ FPDF_BYTESTRING key,
+ int* out_value);
+
+// Experimental API.
+// Get the value of a string property in a content mark by key.
+//
+// mark - handle to a content mark.
+// key - string key of the property.
+// buffer - buffer for holding the returned value in UTF-16LE. This is
+// only modified if |buflen| is longer than the length of the
+// value.
+// Optional, pass null to just retrieve the size of the buffer
+// needed.
+// buflen - length of the buffer.
+// out_buflen - pointer to variable that will receive the minimum buffer size
+// to contain the value. Not filled if FALSE is returned.
+//
+// Returns TRUE if the key maps to a string/blob value, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObjMark_GetParamStringValue(FPDF_PAGEOBJECTMARK mark,
+ FPDF_BYTESTRING key,
+ void* buffer,
+ unsigned long buflen,
+ unsigned long* out_buflen);
+
+// Experimental API.
+// Get the value of a blob property in a content mark by key.
+//
+// mark - handle to a content mark.
+// key - string key of the property.
+// buffer - buffer for holding the returned value. This is only modified
+// if |buflen| is at least as long as the length of the value.
+// Optional, pass null to just retrieve the size of the buffer
+// needed.
+// buflen - length of the buffer.
+// out_buflen - pointer to variable that will receive the minimum buffer size
+// to contain the value. Not filled if FALSE is returned.
+//
+// Returns TRUE if the key maps to a string/blob value, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObjMark_GetParamBlobValue(FPDF_PAGEOBJECTMARK mark,
+ FPDF_BYTESTRING key,
+ void* buffer,
+ unsigned long buflen,
+ unsigned long* out_buflen);
+
+// Experimental API.
+// Set the value of an int property in a content mark by key. If a parameter
+// with key |key| exists, its value is set to |value|. Otherwise, it is added as
+// a new parameter.
+//
+// document - handle to the document.
+// page_object - handle to the page object with the mark.
+// mark - handle to a content mark.
+// key - string key of the property.
+// value - int value to set.
+//
+// Returns TRUE if the operation succeeded, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObjMark_SetIntParam(FPDF_DOCUMENT document,
+ FPDF_PAGEOBJECT page_object,
+ FPDF_PAGEOBJECTMARK mark,
+ FPDF_BYTESTRING key,
+ int value);
+
+// Experimental API.
+// Set the value of a string property in a content mark by key. If a parameter
+// with key |key| exists, its value is set to |value|. Otherwise, it is added as
+// a new parameter.
+//
+// document - handle to the document.
+// page_object - handle to the page object with the mark.
+// mark - handle to a content mark.
+// key - string key of the property.
+// value - string value to set.
+//
+// Returns TRUE if the operation succeeded, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObjMark_SetStringParam(FPDF_DOCUMENT document,
+ FPDF_PAGEOBJECT page_object,
+ FPDF_PAGEOBJECTMARK mark,
+ FPDF_BYTESTRING key,
+ FPDF_BYTESTRING value);
+
+// Experimental API.
+// Set the value of a blob property in a content mark by key. If a parameter
+// with key |key| exists, its value is set to |value|. Otherwise, it is added as
+// a new parameter.
+//
+// document - handle to the document.
+// page_object - handle to the page object with the mark.
+// mark - handle to a content mark.
+// key - string key of the property.
+// value - pointer to blob value to set.
+// value_len - size in bytes of |value|.
+//
+// Returns TRUE if the operation succeeded, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObjMark_SetBlobParam(FPDF_DOCUMENT document,
+ FPDF_PAGEOBJECT page_object,
+ FPDF_PAGEOBJECTMARK mark,
+ FPDF_BYTESTRING key,
+ void* value,
+ unsigned long value_len);
+
+// Experimental API.
+// Removes a property from a content mark by key.
+//
+// page_object - handle to the page object with the mark.
+// mark - handle to a content mark.
+// key - string key of the property.
+//
+// Returns TRUE if the operation succeeded, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObjMark_RemoveParam(FPDF_PAGEOBJECT page_object,
+ FPDF_PAGEOBJECTMARK mark,
+ FPDF_BYTESTRING key);
+
+// Load an image from a JPEG image file and then set it into |image_object|.
+//
+// pages - pointer to the start of all loaded pages, may be NULL.
+// count - number of |pages|, may be 0.
+// image_object - handle to an image object.
+// file_access - file access handler which specifies the JPEG image file.
+//
+// Returns TRUE on success.
+//
+// The image object might already have an associated image, which is shared and
+// cached by the loaded pages. In that case, we need to clear the cached image
+// for all the loaded pages. Pass |pages| and page count (|count|) to this API
+// to clear the image cache. If the image is not previously shared, or NULL is a
+// valid |pages| value.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages,
+ int count,
+ FPDF_PAGEOBJECT image_object,
+ FPDF_FILEACCESS* file_access);
+
+// Load an image from a JPEG image file and then set it into |image_object|.
+//
+// pages - pointer to the start of all loaded pages, may be NULL.
+// count - number of |pages|, may be 0.
+// image_object - handle to an image object.
+// file_access - file access handler which specifies the JPEG image file.
+//
+// Returns TRUE on success.
+//
+// The image object might already have an associated image, which is shared and
+// cached by the loaded pages. In that case, we need to clear the cached image
+// for all the loaded pages. Pass |pages| and page count (|count|) to this API
+// to clear the image cache. If the image is not previously shared, or NULL is a
+// valid |pages| value. This function loads the JPEG image inline, so the image
+// content is copied to the file. This allows |file_access| and its associated
+// data to be deleted after this function returns.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFImageObj_LoadJpegFileInline(FPDF_PAGE* pages,
+ int count,
+ FPDF_PAGEOBJECT image_object,
+ FPDF_FILEACCESS* file_access);
+
+// TODO(thestig): Start deprecating this once FPDFPageObj_SetMatrix() is stable.
+//
+// Set the transform matrix of |image_object|.
+//
+// image_object - handle to an image object.
+// a - matrix value.
+// b - matrix value.
+// c - matrix value.
+// d - matrix value.
+// e - matrix value.
+// f - matrix value.
+//
+// The matrix is composed as:
+// |a c e|
+// |b d f|
+// and can be used to scale, rotate, shear and translate the |image_object|.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFImageObj_SetMatrix(FPDF_PAGEOBJECT image_object,
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f);
+
+// Set |bitmap| to |image_object|.
+//
+// pages - pointer to the start of all loaded pages, may be NULL.
+// count - number of |pages|, may be 0.
+// image_object - handle to an image object.
+// bitmap - handle of the bitmap.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFImageObj_SetBitmap(FPDF_PAGE* pages,
+ int count,
+ FPDF_PAGEOBJECT image_object,
+ FPDF_BITMAP bitmap);
+
+// Get a bitmap rasterization of |image_object|. FPDFImageObj_GetBitmap() only
+// operates on |image_object| and does not take the associated image mask into
+// account. It also ignores the matrix for |image_object|.
+// The returned bitmap will be owned by the caller, and FPDFBitmap_Destroy()
+// must be called on the returned bitmap when it is no longer needed.
+//
+// image_object - handle to an image object.
+//
+// Returns the bitmap.
+FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV
+FPDFImageObj_GetBitmap(FPDF_PAGEOBJECT image_object);
+
+// Experimental API.
+// Get a bitmap rasterization of |image_object| that takes the image mask and
+// image matrix into account. To render correctly, the caller must provide the
+// |document| associated with |image_object|. If there is a |page| associated
+// with |image_object|, the caller should provide that as well.
+// The returned bitmap will be owned by the caller, and FPDFBitmap_Destroy()
+// must be called on the returned bitmap when it is no longer needed.
+//
+// document - handle to a document associated with |image_object|.
+// page - handle to an optional page associated with |image_object|.
+// image_object - handle to an image object.
+//
+// Returns the bitmap or NULL on failure.
+FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV
+FPDFImageObj_GetRenderedBitmap(FPDF_DOCUMENT document,
+ FPDF_PAGE page,
+ FPDF_PAGEOBJECT image_object);
+
+// Get the decoded image data of |image_object|. The decoded data is the
+// uncompressed image data, i.e. the raw image data after having all filters
+// applied. |buffer| is only modified if |buflen| is longer than the length of
+// the decoded image data.
+//
+// image_object - handle to an image object.
+// buffer - buffer for holding the decoded image data.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the decoded image data.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFImageObj_GetImageDataDecoded(FPDF_PAGEOBJECT image_object,
+ void* buffer,
+ unsigned long buflen);
+
+// Get the raw image data of |image_object|. The raw data is the image data as
+// stored in the PDF without applying any filters. |buffer| is only modified if
+// |buflen| is longer than the length of the raw image data.
+//
+// image_object - handle to an image object.
+// buffer - buffer for holding the raw image data.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the raw image data.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFImageObj_GetImageDataRaw(FPDF_PAGEOBJECT image_object,
+ void* buffer,
+ unsigned long buflen);
+
+// Get the number of filters (i.e. decoders) of the image in |image_object|.
+//
+// image_object - handle to an image object.
+//
+// Returns the number of |image_object|'s filters.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFImageObj_GetImageFilterCount(FPDF_PAGEOBJECT image_object);
+
+// Get the filter at |index| of |image_object|'s list of filters. Note that the
+// filters need to be applied in order, i.e. the first filter should be applied
+// first, then the second, etc. |buffer| is only modified if |buflen| is longer
+// than the length of the filter string.
+//
+// image_object - handle to an image object.
+// index - the index of the filter requested.
+// buffer - buffer for holding filter string, encoded in UTF-8.
+// buflen - length of the buffer.
+//
+// Returns the length of the filter string.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFImageObj_GetImageFilter(FPDF_PAGEOBJECT image_object,
+ int index,
+ void* buffer,
+ unsigned long buflen);
+
+// Get the image metadata of |image_object|, including dimension, DPI, bits per
+// pixel, and colorspace. If the |image_object| is not an image object or if it
+// does not have an image, then the return value will be false. Otherwise,
+// failure to retrieve any specific parameter would result in its value being 0.
+//
+// image_object - handle to an image object.
+// page - handle to the page that |image_object| is on. Required for
+// retrieving the image's bits per pixel and colorspace.
+// metadata - receives the image metadata; must not be NULL.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFImageObj_GetImageMetadata(FPDF_PAGEOBJECT image_object,
+ FPDF_PAGE page,
+ FPDF_IMAGEOBJ_METADATA* metadata);
+
+// Experimental API.
+// Get the image size in pixels. Faster method to get only image size.
+//
+// image_object - handle to an image object.
+// width - receives the image width in pixels; must not be NULL.
+// height - receives the image height in pixels; must not be NULL.
+//
+// Returns true if successful.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFImageObj_GetImagePixelSize(FPDF_PAGEOBJECT image_object,
+ unsigned int* width,
+ unsigned int* height);
+
+// Create a new path object at an initial position.
+//
+// x - initial horizontal position.
+// y - initial vertical position.
+//
+// Returns a handle to a new path object.
+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPageObj_CreateNewPath(float x,
+ float y);
+
+// Create a closed path consisting of a rectangle.
+//
+// x - horizontal position for the left boundary of the rectangle.
+// y - vertical position for the bottom boundary of the rectangle.
+// w - width of the rectangle.
+// h - height of the rectangle.
+//
+// Returns a handle to the new path object.
+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPageObj_CreateNewRect(float x,
+ float y,
+ float w,
+ float h);
+
+// Get the bounding box of |page_object|.
+//
+// page_object - handle to a page object.
+// left - pointer where the left coordinate will be stored
+// bottom - pointer where the bottom coordinate will be stored
+// right - pointer where the right coordinate will be stored
+// top - pointer where the top coordinate will be stored
+//
+// On success, returns TRUE and fills in the 4 coordinates.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_GetBounds(FPDF_PAGEOBJECT page_object,
+ float* left,
+ float* bottom,
+ float* right,
+ float* top);
+
+// Experimental API.
+// Get the quad points that bounds |page_object|.
+//
+// page_object - handle to a page object.
+// quad_points - pointer where the quadrilateral points will be stored.
+//
+// On success, returns TRUE and fills in |quad_points|.
+//
+// Similar to FPDFPageObj_GetBounds(), this returns the bounds of a page
+// object. When the object is rotated by a non-multiple of 90 degrees, this API
+// returns a tighter bound that cannot be represented with just the 4 sides of
+// a rectangle.
+//
+// Currently only works the following |page_object| types: FPDF_PAGEOBJ_TEXT and
+// FPDF_PAGEOBJ_IMAGE.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_GetRotatedBounds(FPDF_PAGEOBJECT page_object,
+ FS_QUADPOINTSF* quad_points);
+
+// Set the blend mode of |page_object|.
+//
+// page_object - handle to a page object.
+// blend_mode - string containing the blend mode.
+//
+// Blend mode can be one of following: Color, ColorBurn, ColorDodge, Darken,
+// Difference, Exclusion, HardLight, Hue, Lighten, Luminosity, Multiply, Normal,
+// Overlay, Saturation, Screen, SoftLight
+FPDF_EXPORT void FPDF_CALLCONV
+FPDFPageObj_SetBlendMode(FPDF_PAGEOBJECT page_object,
+ FPDF_BYTESTRING blend_mode);
+
+// Set the stroke RGBA of a page object. Range of values: 0 - 255.
+//
+// page_object - the handle to the page object.
+// R - the red component for the object's stroke color.
+// G - the green component for the object's stroke color.
+// B - the blue component for the object's stroke color.
+// A - the stroke alpha for the object.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_SetStrokeColor(FPDF_PAGEOBJECT page_object,
+ unsigned int R,
+ unsigned int G,
+ unsigned int B,
+ unsigned int A);
+
+// Get the stroke RGBA of a page object. Range of values: 0 - 255.
+//
+// page_object - the handle to the page object.
+// R - the red component of the path stroke color.
+// G - the green component of the object's stroke color.
+// B - the blue component of the object's stroke color.
+// A - the stroke alpha of the object.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_GetStrokeColor(FPDF_PAGEOBJECT page_object,
+ unsigned int* R,
+ unsigned int* G,
+ unsigned int* B,
+ unsigned int* A);
+
+// Set the stroke width of a page object.
+//
+// path - the handle to the page object.
+// width - the width of the stroke.
+//
+// Returns TRUE on success
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_SetStrokeWidth(FPDF_PAGEOBJECT page_object, float width);
+
+// Get the stroke width of a page object.
+//
+// path - the handle to the page object.
+// width - the width of the stroke.
+//
+// Returns TRUE on success
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_GetStrokeWidth(FPDF_PAGEOBJECT page_object, float* width);
+
+// Get the line join of |page_object|.
+//
+// page_object - handle to a page object.
+//
+// Returns the line join, or -1 on failure.
+// Line join can be one of following: FPDF_LINEJOIN_MITER, FPDF_LINEJOIN_ROUND,
+// FPDF_LINEJOIN_BEVEL
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFPageObj_GetLineJoin(FPDF_PAGEOBJECT page_object);
+
+// Set the line join of |page_object|.
+//
+// page_object - handle to a page object.
+// line_join - line join
+//
+// Line join can be one of following: FPDF_LINEJOIN_MITER, FPDF_LINEJOIN_ROUND,
+// FPDF_LINEJOIN_BEVEL
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_SetLineJoin(FPDF_PAGEOBJECT page_object, int line_join);
+
+// Get the line cap of |page_object|.
+//
+// page_object - handle to a page object.
+//
+// Returns the line cap, or -1 on failure.
+// Line cap can be one of following: FPDF_LINECAP_BUTT, FPDF_LINECAP_ROUND,
+// FPDF_LINECAP_PROJECTING_SQUARE
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFPageObj_GetLineCap(FPDF_PAGEOBJECT page_object);
+
+// Set the line cap of |page_object|.
+//
+// page_object - handle to a page object.
+// line_cap - line cap
+//
+// Line cap can be one of following: FPDF_LINECAP_BUTT, FPDF_LINECAP_ROUND,
+// FPDF_LINECAP_PROJECTING_SQUARE
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_SetLineCap(FPDF_PAGEOBJECT page_object, int line_cap);
+
+// Set the fill RGBA of a page object. Range of values: 0 - 255.
+//
+// page_object - the handle to the page object.
+// R - the red component for the object's fill color.
+// G - the green component for the object's fill color.
+// B - the blue component for the object's fill color.
+// A - the fill alpha for the object.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_SetFillColor(FPDF_PAGEOBJECT page_object,
+ unsigned int R,
+ unsigned int G,
+ unsigned int B,
+ unsigned int A);
+
+// Get the fill RGBA of a page object. Range of values: 0 - 255.
+//
+// page_object - the handle to the page object.
+// R - the red component of the object's fill color.
+// G - the green component of the object's fill color.
+// B - the blue component of the object's fill color.
+// A - the fill alpha of the object.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_GetFillColor(FPDF_PAGEOBJECT page_object,
+ unsigned int* R,
+ unsigned int* G,
+ unsigned int* B,
+ unsigned int* A);
+
+// Experimental API.
+// Get the line dash |phase| of |page_object|.
+//
+// page_object - handle to a page object.
+// phase - pointer where the dashing phase will be stored.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_GetDashPhase(FPDF_PAGEOBJECT page_object, float* phase);
+
+// Experimental API.
+// Set the line dash phase of |page_object|.
+//
+// page_object - handle to a page object.
+// phase - line dash phase.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_SetDashPhase(FPDF_PAGEOBJECT page_object, float phase);
+
+// Experimental API.
+// Get the line dash array of |page_object|.
+//
+// page_object - handle to a page object.
+//
+// Returns the line dash array size or -1 on failure.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFPageObj_GetDashCount(FPDF_PAGEOBJECT page_object);
+
+// Experimental API.
+// Get the line dash array of |page_object|.
+//
+// page_object - handle to a page object.
+// dash_array - pointer where the dashing array will be stored.
+// dash_count - number of elements in |dash_array|.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_GetDashArray(FPDF_PAGEOBJECT page_object,
+ float* dash_array,
+ size_t dash_count);
+
+// Experimental API.
+// Set the line dash array of |page_object|.
+//
+// page_object - handle to a page object.
+// dash_array - the dash array.
+// dash_count - number of elements in |dash_array|.
+// phase - the line dash phase.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPageObj_SetDashArray(FPDF_PAGEOBJECT page_object,
+ const float* dash_array,
+ size_t dash_count,
+ float phase);
+
+// Get number of segments inside |path|.
+//
+// path - handle to a path.
+//
+// A segment is a command, created by e.g. FPDFPath_MoveTo(),
+// FPDFPath_LineTo() or FPDFPath_BezierTo().
+//
+// Returns the number of objects in |path| or -1 on failure.
+FPDF_EXPORT int FPDF_CALLCONV FPDFPath_CountSegments(FPDF_PAGEOBJECT path);
+
+// Get segment in |path| at |index|.
+//
+// path - handle to a path.
+// index - the index of a segment.
+//
+// Returns the handle to the segment, or NULL on faiure.
+FPDF_EXPORT FPDF_PATHSEGMENT FPDF_CALLCONV
+FPDFPath_GetPathSegment(FPDF_PAGEOBJECT path, int index);
+
+// Get coordinates of |segment|.
+//
+// segment - handle to a segment.
+// x - the horizontal position of the segment.
+// y - the vertical position of the segment.
+//
+// Returns TRUE on success, otherwise |x| and |y| is not set.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPathSegment_GetPoint(FPDF_PATHSEGMENT segment, float* x, float* y);
+
+// Get type of |segment|.
+//
+// segment - handle to a segment.
+//
+// Returns one of the FPDF_SEGMENT_* values on success,
+// FPDF_SEGMENT_UNKNOWN on error.
+FPDF_EXPORT int FPDF_CALLCONV FPDFPathSegment_GetType(FPDF_PATHSEGMENT segment);
+
+// Gets if the |segment| closes the current subpath of a given path.
+//
+// segment - handle to a segment.
+//
+// Returns close flag for non-NULL segment, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPathSegment_GetClose(FPDF_PATHSEGMENT segment);
+
+// Move a path's current point.
+//
+// path - the handle to the path object.
+// x - the horizontal position of the new current point.
+// y - the vertical position of the new current point.
+//
+// Note that no line will be created between the previous current point and the
+// new one.
+//
+// Returns TRUE on success
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_MoveTo(FPDF_PAGEOBJECT path,
+ float x,
+ float y);
+
+// Add a line between the current point and a new point in the path.
+//
+// path - the handle to the path object.
+// x - the horizontal position of the new point.
+// y - the vertical position of the new point.
+//
+// The path's current point is changed to (x, y).
+//
+// Returns TRUE on success
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_LineTo(FPDF_PAGEOBJECT path,
+ float x,
+ float y);
+
+// Add a cubic Bezier curve to the given path, starting at the current point.
+//
+// path - the handle to the path object.
+// x1 - the horizontal position of the first Bezier control point.
+// y1 - the vertical position of the first Bezier control point.
+// x2 - the horizontal position of the second Bezier control point.
+// y2 - the vertical position of the second Bezier control point.
+// x3 - the horizontal position of the ending point of the Bezier curve.
+// y3 - the vertical position of the ending point of the Bezier curve.
+//
+// Returns TRUE on success
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_BezierTo(FPDF_PAGEOBJECT path,
+ float x1,
+ float y1,
+ float x2,
+ float y2,
+ float x3,
+ float y3);
+
+// Close the current subpath of a given path.
+//
+// path - the handle to the path object.
+//
+// This will add a line between the current point and the initial point of the
+// subpath, thus terminating the current subpath.
+//
+// Returns TRUE on success
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_Close(FPDF_PAGEOBJECT path);
+
+// Set the drawing mode of a path.
+//
+// path - the handle to the path object.
+// fillmode - the filling mode to be set: one of the FPDF_FILLMODE_* flags.
+// stroke - a boolean specifying if the path should be stroked or not.
+//
+// Returns TRUE on success
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetDrawMode(FPDF_PAGEOBJECT path,
+ int fillmode,
+ FPDF_BOOL stroke);
+
+// Get the drawing mode of a path.
+//
+// path - the handle to the path object.
+// fillmode - the filling mode of the path: one of the FPDF_FILLMODE_* flags.
+// stroke - a boolean specifying if the path is stroked or not.
+//
+// Returns TRUE on success
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_GetDrawMode(FPDF_PAGEOBJECT path,
+ int* fillmode,
+ FPDF_BOOL* stroke);
+
+// Create a new text object using one of the standard PDF fonts.
+//
+// document - handle to the document.
+// font - string containing the font name, without spaces.
+// font_size - the font size for the new text object.
+//
+// Returns a handle to a new text object, or NULL on failure
+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
+FPDFPageObj_NewTextObj(FPDF_DOCUMENT document,
+ FPDF_BYTESTRING font,
+ float font_size);
+
+// Set the text for a text object. If it had text, it will be replaced.
+//
+// text_object - handle to the text object.
+// text - the UTF-16LE encoded string containing the text to be added.
+//
+// Returns TRUE on success
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFText_SetText(FPDF_PAGEOBJECT text_object, FPDF_WIDESTRING text);
+
+// Experimental API.
+// Set the text using charcodes for a text object. If it had text, it will be
+// replaced.
+//
+// text_object - handle to the text object.
+// charcodes - pointer to an array of charcodes to be added.
+// count - number of elements in |charcodes|.
+//
+// Returns TRUE on success
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFText_SetCharcodes(FPDF_PAGEOBJECT text_object,
+ const uint32_t* charcodes,
+ size_t count);
+
+// Returns a font object loaded from a stream of data. The font is loaded
+// into the document. Various font data structures, such as the ToUnicode data,
+// are auto-generated based on the inputs.
+//
+// document - handle to the document.
+// data - the stream of font data, which will be copied by the font object.
+// size - the size of the font data, in bytes.
+// font_type - FPDF_FONT_TYPE1 or FPDF_FONT_TRUETYPE depending on the font type.
+// cid - a boolean specifying if the font is a CID font or not.
+//
+// The loaded font can be closed using FPDFFont_Close().
+//
+// Returns NULL on failure
+FPDF_EXPORT FPDF_FONT FPDF_CALLCONV FPDFText_LoadFont(FPDF_DOCUMENT document,
+ const uint8_t* data,
+ uint32_t size,
+ int font_type,
+ FPDF_BOOL cid);
+
+// Experimental API.
+// Loads one of the standard 14 fonts per PDF spec 1.7 page 416. The preferred
+// way of using font style is using a dash to separate the name from the style,
+// for example 'Helvetica-BoldItalic'.
+//
+// document - handle to the document.
+// font - string containing the font name, without spaces.
+//
+// The loaded font can be closed using FPDFFont_Close().
+//
+// Returns NULL on failure.
+FPDF_EXPORT FPDF_FONT FPDF_CALLCONV
+FPDFText_LoadStandardFont(FPDF_DOCUMENT document, FPDF_BYTESTRING font);
+
+// Experimental API.
+// Returns a font object loaded from a stream of data for a type 2 CID font. The
+// font is loaded into the document. Unlike FPDFText_LoadFont(), the ToUnicode
+// data and the CIDToGIDMap data are caller provided, instead of auto-generated.
+//
+// document - handle to the document.
+// font_data - the stream of font data, which will be copied by
+// the font object.
+// font_data_size - the size of the font data, in bytes.
+// to_unicode_cmap - the ToUnicode data.
+// cid_to_gid_map_data - the stream of CIDToGIDMap data.
+// cid_to_gid_map_data_size - the size of the CIDToGIDMap data, in bytes.
+//
+// The loaded font can be closed using FPDFFont_Close().
+//
+// Returns NULL on failure.
+FPDF_EXPORT FPDF_FONT FPDF_CALLCONV
+FPDFText_LoadCidType2Font(FPDF_DOCUMENT document,
+ const uint8_t* font_data,
+ uint32_t font_data_size,
+ FPDF_BYTESTRING to_unicode_cmap,
+ const uint8_t* cid_to_gid_map_data,
+ uint32_t cid_to_gid_map_data_size);
+
+// Get the font size of a text object.
+//
+// text - handle to a text.
+// size - pointer to the font size of the text object, measured in points
+// (about 1/72 inch)
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text, float* size);
+
+// Close a loaded PDF font.
+//
+// font - Handle to the loaded font.
+FPDF_EXPORT void FPDF_CALLCONV FPDFFont_Close(FPDF_FONT font);
+
+// Create a new text object using a loaded font.
+//
+// document - handle to the document.
+// font - handle to the font object.
+// font_size - the font size for the new text object.
+//
+// Returns a handle to a new text object, or NULL on failure
+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
+FPDFPageObj_CreateTextObj(FPDF_DOCUMENT document,
+ FPDF_FONT font,
+ float font_size);
+
+// Get the text rendering mode of a text object.
+//
+// text - the handle to the text object.
+//
+// Returns one of the known FPDF_TEXT_RENDERMODE enum values on success,
+// FPDF_TEXTRENDERMODE_UNKNOWN on error.
+FPDF_EXPORT FPDF_TEXT_RENDERMODE FPDF_CALLCONV
+FPDFTextObj_GetTextRenderMode(FPDF_PAGEOBJECT text);
+
+// Experimental API.
+// Set the text rendering mode of a text object.
+//
+// text - the handle to the text object.
+// render_mode - the FPDF_TEXT_RENDERMODE enum value to be set (cannot set to
+// FPDF_TEXTRENDERMODE_UNKNOWN).
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFTextObj_SetTextRenderMode(FPDF_PAGEOBJECT text,
+ FPDF_TEXT_RENDERMODE render_mode);
+
+// Get the text of a text object.
+//
+// text_object - the handle to the text object.
+// text_page - the handle to the text page.
+// buffer - the address of a buffer that receives the text.
+// length - the size, in bytes, of |buffer|.
+//
+// Returns the number of bytes in the text (including the trailing NUL
+// character) on success, 0 on error.
+//
+// Regardless of the platform, the |buffer| is always in UTF-16LE encoding.
+// If |length| is less than the returned length, or |buffer| is NULL, |buffer|
+// will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFTextObj_GetText(FPDF_PAGEOBJECT text_object,
+ FPDF_TEXTPAGE text_page,
+ FPDF_WCHAR* buffer,
+ unsigned long length);
+
+// Experimental API.
+// Get a bitmap rasterization of |text_object|. To render correctly, the caller
+// must provide the |document| associated with |text_object|. If there is a
+// |page| associated with |text_object|, the caller should provide that as well.
+// The returned bitmap will be owned by the caller, and FPDFBitmap_Destroy()
+// must be called on the returned bitmap when it is no longer needed.
+//
+// document - handle to a document associated with |text_object|.
+// page - handle to an optional page associated with |text_object|.
+// text_object - handle to a text object.
+// scale - the scaling factor, which must be greater than 0.
+//
+// Returns the bitmap or NULL on failure.
+FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV
+FPDFTextObj_GetRenderedBitmap(FPDF_DOCUMENT document,
+ FPDF_PAGE page,
+ FPDF_PAGEOBJECT text_object,
+ float scale);
+
+// Experimental API.
+// Get the font of a text object.
+//
+// text - the handle to the text object.
+//
+// Returns a handle to the font object held by |text| which retains ownership.
+FPDF_EXPORT FPDF_FONT FPDF_CALLCONV FPDFTextObj_GetFont(FPDF_PAGEOBJECT text);
+
+// Experimental API.
+// Get the font name of a font.
+//
+// font - the handle to the font object.
+// buffer - the address of a buffer that receives the font name.
+// length - the size, in bytes, of |buffer|.
+//
+// Returns the number of bytes in the font name (including the trailing NUL
+// character) on success, 0 on error.
+//
+// Regardless of the platform, the |buffer| is always in UTF-8 encoding.
+// If |length| is less than the returned length, or |buffer| is NULL, |buffer|
+// will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFFont_GetFontName(FPDF_FONT font, char* buffer, unsigned long length);
+
+// Experimental API.
+// Get the decoded data from the |font| object.
+//
+// font - The handle to the font object. (Required)
+// buffer - The address of a buffer that receives the font data.
+// buflen - Length of the buffer.
+// out_buflen - Pointer to variable that will receive the minimum buffer size
+// to contain the font data. Not filled if the return value is
+// FALSE. (Required)
+//
+// Returns TRUE on success. In which case, |out_buflen| will be filled, and
+// |buffer| will be filled if it is large enough. Returns FALSE if any of the
+// required parameters are null.
+//
+// The decoded data is the uncompressed font data. i.e. the raw font data after
+// having all stream filters applied, when the data is embedded.
+//
+// If the font is not embedded, then this API will instead return the data for
+// the substitution font it is using.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetFontData(FPDF_FONT font,
+ uint8_t* buffer,
+ size_t buflen,
+ size_t* out_buflen);
+
+// Experimental API.
+// Get whether |font| is embedded or not.
+//
+// font - the handle to the font object.
+//
+// Returns 1 if the font is embedded, 0 if it not, and -1 on failure.
+FPDF_EXPORT int FPDF_CALLCONV FPDFFont_GetIsEmbedded(FPDF_FONT font);
+
+// Experimental API.
+// Get the descriptor flags of a font.
+//
+// font - the handle to the font object.
+//
+// Returns the bit flags specifying various characteristics of the font as
+// defined in ISO 32000-1:2008, table 123, -1 on failure.
+FPDF_EXPORT int FPDF_CALLCONV FPDFFont_GetFlags(FPDF_FONT font);
+
+// Experimental API.
+// Get the font weight of a font.
+//
+// font - the handle to the font object.
+//
+// Returns the font weight, -1 on failure.
+// Typical values are 400 (normal) and 700 (bold).
+FPDF_EXPORT int FPDF_CALLCONV FPDFFont_GetWeight(FPDF_FONT font);
+
+// Experimental API.
+// Get the italic angle of a font.
+//
+// font - the handle to the font object.
+// angle - pointer where the italic angle will be stored
+//
+// The italic angle of a |font| is defined as degrees counterclockwise
+// from vertical. For a font that slopes to the right, this will be negative.
+//
+// Returns TRUE on success; |angle| unmodified on failure.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetItalicAngle(FPDF_FONT font,
+ int* angle);
+
+// Experimental API.
+// Get ascent distance of a font.
+//
+// font - the handle to the font object.
+// font_size - the size of the |font|.
+// ascent - pointer where the font ascent will be stored
+//
+// Ascent is the maximum distance in points above the baseline reached by the
+// glyphs of the |font|. One point is 1/72 inch (around 0.3528 mm).
+//
+// Returns TRUE on success; |ascent| unmodified on failure.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetAscent(FPDF_FONT font,
+ float font_size,
+ float* ascent);
+
+// Experimental API.
+// Get descent distance of a font.
+//
+// font - the handle to the font object.
+// font_size - the size of the |font|.
+// descent - pointer where the font descent will be stored
+//
+// Descent is the maximum distance in points below the baseline reached by the
+// glyphs of the |font|. One point is 1/72 inch (around 0.3528 mm).
+//
+// Returns TRUE on success; |descent| unmodified on failure.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetDescent(FPDF_FONT font,
+ float font_size,
+ float* descent);
+
+// Experimental API.
+// Get the width of a glyph in a font.
+//
+// font - the handle to the font object.
+// glyph - the glyph.
+// font_size - the size of the font.
+// width - pointer where the glyph width will be stored
+//
+// Glyph width is the distance from the end of the prior glyph to the next
+// glyph. This will be the vertical distance for vertical writing.
+//
+// Returns TRUE on success; |width| unmodified on failure.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFFont_GetGlyphWidth(FPDF_FONT font,
+ uint32_t glyph,
+ float font_size,
+ float* width);
+
+// Experimental API.
+// Get the glyphpath describing how to draw a font glyph.
+//
+// font - the handle to the font object.
+// glyph - the glyph being drawn.
+// font_size - the size of the font.
+//
+// Returns the handle to the segment, or NULL on faiure.
+FPDF_EXPORT FPDF_GLYPHPATH FPDF_CALLCONV FPDFFont_GetGlyphPath(FPDF_FONT font,
+ uint32_t glyph,
+ float font_size);
+
+// Experimental API.
+// Get number of segments inside glyphpath.
+//
+// glyphpath - handle to a glyph path.
+//
+// Returns the number of objects in |glyphpath| or -1 on failure.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFGlyphPath_CountGlyphSegments(FPDF_GLYPHPATH glyphpath);
+
+// Experimental API.
+// Get segment in glyphpath at index.
+//
+// glyphpath - handle to a glyph path.
+// index - the index of a segment.
+//
+// Returns the handle to the segment, or NULL on faiure.
+FPDF_EXPORT FPDF_PATHSEGMENT FPDF_CALLCONV
+FPDFGlyphPath_GetGlyphPathSegment(FPDF_GLYPHPATH glyphpath, int index);
+
+// Get number of page objects inside |form_object|.
+//
+// form_object - handle to a form object.
+//
+// Returns the number of objects in |form_object| on success, -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFFormObj_CountObjects(FPDF_PAGEOBJECT form_object);
+
+// Get page object in |form_object| at |index|.
+//
+// form_object - handle to a form object.
+// index - the 0-based index of a page object.
+//
+// Returns the handle to the page object, or NULL on error.
+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
+FPDFFormObj_GetObject(FPDF_PAGEOBJECT form_object, unsigned long index);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_EDIT_H_
diff --git a/src/main/cpp/include/fpdf_ext.h b/src/main/cpp/include/fpdf_ext.h
new file mode 100644
index 00000000..068a977c
--- /dev/null
+++ b/src/main/cpp/include/fpdf_ext.h
@@ -0,0 +1,119 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_EXT_H_
+#define PUBLIC_FPDF_EXT_H_
+
+#include
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// Unsupported XFA form.
+#define FPDF_UNSP_DOC_XFAFORM 1
+// Unsupported portable collection.
+#define FPDF_UNSP_DOC_PORTABLECOLLECTION 2
+// Unsupported attachment.
+#define FPDF_UNSP_DOC_ATTACHMENT 3
+// Unsupported security.
+#define FPDF_UNSP_DOC_SECURITY 4
+// Unsupported shared review.
+#define FPDF_UNSP_DOC_SHAREDREVIEW 5
+// Unsupported shared form, acrobat.
+#define FPDF_UNSP_DOC_SHAREDFORM_ACROBAT 6
+// Unsupported shared form, filesystem.
+#define FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM 7
+// Unsupported shared form, email.
+#define FPDF_UNSP_DOC_SHAREDFORM_EMAIL 8
+// Unsupported 3D annotation.
+#define FPDF_UNSP_ANNOT_3DANNOT 11
+// Unsupported movie annotation.
+#define FPDF_UNSP_ANNOT_MOVIE 12
+// Unsupported sound annotation.
+#define FPDF_UNSP_ANNOT_SOUND 13
+// Unsupported screen media annotation.
+#define FPDF_UNSP_ANNOT_SCREEN_MEDIA 14
+// Unsupported screen rich media annotation.
+#define FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA 15
+// Unsupported attachment annotation.
+#define FPDF_UNSP_ANNOT_ATTACHMENT 16
+// Unsupported signature annotation.
+#define FPDF_UNSP_ANNOT_SIG 17
+
+// Interface for unsupported feature notifications.
+typedef struct _UNSUPPORT_INFO {
+ // Version number of the interface. Must be 1.
+ int version;
+
+ // Unsupported object notification function.
+ // Interface Version: 1
+ // Implementation Required: Yes
+ //
+ // pThis - pointer to the interface structure.
+ // nType - the type of unsupported object. One of the |FPDF_UNSP_*| entries.
+ void (*FSDK_UnSupport_Handler)(struct _UNSUPPORT_INFO* pThis, int nType);
+} UNSUPPORT_INFO;
+
+// Setup an unsupported object handler.
+//
+// unsp_info - Pointer to an UNSUPPORT_INFO structure.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info);
+
+// Set replacement function for calls to time().
+//
+// This API is intended to be used only for testing, thus may cause PDFium to
+// behave poorly in production environments.
+//
+// func - Function pointer to alternate implementation of time(), or
+// NULL to restore to actual time() call itself.
+FPDF_EXPORT void FPDF_CALLCONV FSDK_SetTimeFunction(time_t (*func)());
+
+// Set replacement function for calls to localtime().
+//
+// This API is intended to be used only for testing, thus may cause PDFium to
+// behave poorly in production environments.
+//
+// func - Function pointer to alternate implementation of localtime(), or
+// NULL to restore to actual localtime() call itself.
+FPDF_EXPORT void FPDF_CALLCONV
+FSDK_SetLocaltimeFunction(struct tm* (*func)(const time_t*));
+
+// Unknown page mode.
+#define PAGEMODE_UNKNOWN -1
+// Document outline, and thumbnails hidden.
+#define PAGEMODE_USENONE 0
+// Document outline visible.
+#define PAGEMODE_USEOUTLINES 1
+// Thumbnail images visible.
+#define PAGEMODE_USETHUMBS 2
+// Full-screen mode, no menu bar, window controls, or other decorations visible.
+#define PAGEMODE_FULLSCREEN 3
+// Optional content group panel visible.
+#define PAGEMODE_USEOC 4
+// Attachments panel visible.
+#define PAGEMODE_USEATTACHMENTS 5
+
+// Get the document's PageMode.
+//
+// doc - Handle to document.
+//
+// Returns one of the |PAGEMODE_*| flags defined above.
+//
+// The page mode defines how the document should be initially displayed.
+FPDF_EXPORT int FPDF_CALLCONV FPDFDoc_GetPageMode(FPDF_DOCUMENT document);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_EXT_H_
diff --git a/src/main/cpp/include/fpdf_flatten.h b/src/main/cpp/include/fpdf_flatten.h
new file mode 100644
index 00000000..aba5186b
--- /dev/null
+++ b/src/main/cpp/include/fpdf_flatten.h
@@ -0,0 +1,44 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_FLATTEN_H_
+#define PUBLIC_FPDF_FLATTEN_H_
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+// Flatten operation failed.
+#define FLATTEN_FAIL 0
+// Flatten operation succeed.
+#define FLATTEN_SUCCESS 1
+// Nothing to be flattened.
+#define FLATTEN_NOTHINGTODO 2
+
+// Flatten for normal display.
+#define FLAT_NORMALDISPLAY 0
+// Flatten for print.
+#define FLAT_PRINT 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// Flatten annotations and form fields into the page contents.
+//
+// page - handle to the page.
+// nFlag - One of the |FLAT_*| values denoting the page usage.
+//
+// Returns one of the |FLATTEN_*| values.
+//
+// Currently, all failures return |FLATTEN_FAIL| with no indication of the
+// cause.
+FPDF_EXPORT int FPDF_CALLCONV FPDFPage_Flatten(FPDF_PAGE page, int nFlag);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_FLATTEN_H_
diff --git a/src/main/cpp/include/fpdf_formfill.h b/src/main/cpp/include/fpdf_formfill.h
new file mode 100644
index 00000000..9e36853a
--- /dev/null
+++ b/src/main/cpp/include/fpdf_formfill.h
@@ -0,0 +1,2007 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_FORMFILL_H_
+#define PUBLIC_FPDF_FORMFILL_H_
+
+// clang-format off
+// NOLINTNEXTLINE(build/include_directory)
+#include "fpdfview.h"
+
+// These values are return values for a public API, so should not be changed
+// other than the count when adding new values.
+#define FORMTYPE_NONE 0 // Document contains no forms
+#define FORMTYPE_ACRO_FORM 1 // Forms are specified using AcroForm spec
+#define FORMTYPE_XFA_FULL 2 // Forms are specified using entire XFA spec
+#define FORMTYPE_XFA_FOREGROUND 3 // Forms are specified using the XFAF subset
+ // of XFA spec
+#define FORMTYPE_COUNT 4 // The number of form types
+
+#define JSPLATFORM_ALERT_BUTTON_OK 0 // OK button
+#define JSPLATFORM_ALERT_BUTTON_OKCANCEL 1 // OK & Cancel buttons
+#define JSPLATFORM_ALERT_BUTTON_YESNO 2 // Yes & No buttons
+#define JSPLATFORM_ALERT_BUTTON_YESNOCANCEL 3 // Yes, No & Cancel buttons
+#define JSPLATFORM_ALERT_BUTTON_DEFAULT JSPLATFORM_ALERT_BUTTON_OK
+
+#define JSPLATFORM_ALERT_ICON_ERROR 0 // Error
+#define JSPLATFORM_ALERT_ICON_WARNING 1 // Warning
+#define JSPLATFORM_ALERT_ICON_QUESTION 2 // Question
+#define JSPLATFORM_ALERT_ICON_STATUS 3 // Status
+#define JSPLATFORM_ALERT_ICON_ASTERISK 4 // Asterisk
+#define JSPLATFORM_ALERT_ICON_DEFAULT JSPLATFORM_ALERT_ICON_ERROR
+
+#define JSPLATFORM_ALERT_RETURN_OK 1 // OK
+#define JSPLATFORM_ALERT_RETURN_CANCEL 2 // Cancel
+#define JSPLATFORM_ALERT_RETURN_NO 3 // No
+#define JSPLATFORM_ALERT_RETURN_YES 4 // Yes
+
+#define JSPLATFORM_BEEP_ERROR 0 // Error
+#define JSPLATFORM_BEEP_WARNING 1 // Warning
+#define JSPLATFORM_BEEP_QUESTION 2 // Question
+#define JSPLATFORM_BEEP_STATUS 3 // Status
+#define JSPLATFORM_BEEP_DEFAULT 4 // Default
+
+// Exported Functions
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _IPDF_JsPlatform {
+ /*
+ * Version number of the interface. Currently must be 2.
+ */
+ int version;
+
+ /* Version 1. */
+
+ /*
+ * Method: app_alert
+ * Pop up a dialog to show warning or hint.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * Msg - A string containing the message to be displayed.
+ * Title - The title of the dialog.
+ * Type - The type of button group, one of the
+ * JSPLATFORM_ALERT_BUTTON_* values above.
+ * nIcon - The type of the icon, one of the
+ * JSPLATFORM_ALERT_ICON_* above.
+ * Return Value:
+ * Option selected by user in dialogue, one of the
+ * JSPLATFORM_ALERT_RETURN_* values above.
+ */
+ int (*app_alert)(struct _IPDF_JsPlatform* pThis,
+ FPDF_WIDESTRING Msg,
+ FPDF_WIDESTRING Title,
+ int Type,
+ int Icon);
+
+ /*
+ * Method: app_beep
+ * Causes the system to play a sound.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * nType - The sound type, see JSPLATFORM_BEEP_TYPE_*
+ * above.
+ * Return Value:
+ * None
+ */
+ void (*app_beep)(struct _IPDF_JsPlatform* pThis, int nType);
+
+ /*
+ * Method: app_response
+ * Displays a dialog box containing a question and an entry field for
+ * the user to reply to the question.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * Question - The question to be posed to the user.
+ * Title - The title of the dialog box.
+ * Default - A default value for the answer to the question. If
+ * not specified, no default value is presented.
+ * cLabel - A short string to appear in front of and on the
+ * same line as the edit text field.
+ * bPassword - If true, indicates that the user's response should
+ * be shown as asterisks (*) or bullets (?) to mask
+ * the response, which might be sensitive information.
+ * response - A string buffer allocated by PDFium, to receive the
+ * user's response.
+ * length - The length of the buffer in bytes. Currently, it is
+ * always 2048.
+ * Return Value:
+ * Number of bytes the complete user input would actually require, not
+ * including trailing zeros, regardless of the value of the length
+ * parameter or the presence of the response buffer.
+ * Comments:
+ * No matter on what platform, the response buffer should be always
+ * written using UTF-16LE encoding. If a response buffer is
+ * present and the size of the user input exceeds the capacity of the
+ * buffer as specified by the length parameter, only the
+ * first "length" bytes of the user input are to be written to the
+ * buffer.
+ */
+ int (*app_response)(struct _IPDF_JsPlatform* pThis,
+ FPDF_WIDESTRING Question,
+ FPDF_WIDESTRING Title,
+ FPDF_WIDESTRING Default,
+ FPDF_WIDESTRING cLabel,
+ FPDF_BOOL bPassword,
+ void* response,
+ int length);
+
+ /*
+ * Method: Doc_getFilePath
+ * Get the file path of the current document.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * filePath - The string buffer to receive the file path. Can
+ * be NULL.
+ * length - The length of the buffer, number of bytes. Can
+ * be 0.
+ * Return Value:
+ * Number of bytes the filePath consumes, including trailing zeros.
+ * Comments:
+ * The filePath should always be provided in the local encoding.
+ * The return value always indicated number of bytes required for
+ * the buffer, even when there is no buffer specified, or the buffer
+ * size is less than required. In this case, the buffer will not
+ * be modified.
+ */
+ int (*Doc_getFilePath)(struct _IPDF_JsPlatform* pThis,
+ void* filePath,
+ int length);
+
+ /*
+ * Method: Doc_mail
+ * Mails the data buffer as an attachment to all recipients, with or
+ * without user interaction.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * mailData - Pointer to the data buffer to be sent. Can be NULL.
+ * length - The size,in bytes, of the buffer pointed by
+ * mailData parameter. Can be 0.
+ * bUI - If true, the rest of the parameters are used in a
+ * compose-new-message window that is displayed to the
+ * user. If false, the cTo parameter is required and
+ * all others are optional.
+ * To - A semicolon-delimited list of recipients for the
+ * message.
+ * Subject - The subject of the message. The length limit is
+ * 64 KB.
+ * CC - A semicolon-delimited list of CC recipients for
+ * the message.
+ * BCC - A semicolon-delimited list of BCC recipients for
+ * the message.
+ * Msg - The content of the message. The length limit is
+ * 64 KB.
+ * Return Value:
+ * None.
+ * Comments:
+ * If the parameter mailData is NULL or length is 0, the current
+ * document will be mailed as an attachment to all recipients.
+ */
+ void (*Doc_mail)(struct _IPDF_JsPlatform* pThis,
+ void* mailData,
+ int length,
+ FPDF_BOOL bUI,
+ FPDF_WIDESTRING To,
+ FPDF_WIDESTRING Subject,
+ FPDF_WIDESTRING CC,
+ FPDF_WIDESTRING BCC,
+ FPDF_WIDESTRING Msg);
+
+ /*
+ * Method: Doc_print
+ * Prints all or a specific number of pages of the document.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * bUI - If true, will cause a UI to be presented to the
+ * user to obtain printing information and confirm
+ * the action.
+ * nStart - A 0-based index that defines the start of an
+ * inclusive range of pages.
+ * nEnd - A 0-based index that defines the end of an
+ * inclusive page range.
+ * bSilent - If true, suppresses the cancel dialog box while
+ * the document is printing. The default is false.
+ * bShrinkToFit - If true, the page is shrunk (if necessary) to
+ * fit within the imageable area of the printed page.
+ * bPrintAsImage - If true, print pages as an image.
+ * bReverse - If true, print from nEnd to nStart.
+ * bAnnotations - If true (the default), annotations are
+ * printed.
+ * Return Value:
+ * None.
+ */
+ void (*Doc_print)(struct _IPDF_JsPlatform* pThis,
+ FPDF_BOOL bUI,
+ int nStart,
+ int nEnd,
+ FPDF_BOOL bSilent,
+ FPDF_BOOL bShrinkToFit,
+ FPDF_BOOL bPrintAsImage,
+ FPDF_BOOL bReverse,
+ FPDF_BOOL bAnnotations);
+
+ /*
+ * Method: Doc_submitForm
+ * Send the form data to a specified URL.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * formData - Pointer to the data buffer to be sent.
+ * length - The size,in bytes, of the buffer pointed by
+ * formData parameter.
+ * URL - The URL to send to.
+ * Return Value:
+ * None.
+ */
+ void (*Doc_submitForm)(struct _IPDF_JsPlatform* pThis,
+ void* formData,
+ int length,
+ FPDF_WIDESTRING URL);
+
+ /*
+ * Method: Doc_gotoPage
+ * Jump to a specified page.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * nPageNum - The specified page number, zero for the first page.
+ * Return Value:
+ * None.
+ *
+ */
+ void (*Doc_gotoPage)(struct _IPDF_JsPlatform* pThis, int nPageNum);
+
+ /*
+ * Method: Field_browse
+ * Show a file selection dialog, and return the selected file path.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * filePath - Pointer to the data buffer to receive the file
+ * path. Can be NULL.
+ * length - The length of the buffer, in bytes. Can be 0.
+ * Return Value:
+ * Number of bytes the filePath consumes, including trailing zeros.
+ * Comments:
+ * The filePath shoule always be provided in local encoding.
+ */
+ int (*Field_browse)(struct _IPDF_JsPlatform* pThis,
+ void* filePath,
+ int length);
+
+ /*
+ * Pointer for embedder-specific data. Unused by PDFium, and despite
+ * its name, can be any data the embedder desires, though traditionally
+ * a FPDF_FORMFILLINFO interface.
+ */
+ void* m_pFormfillinfo;
+
+ /* Version 2. */
+
+ void* m_isolate; /* Unused in v3, retain for compatibility. */
+ unsigned int m_v8EmbedderSlot; /* Unused in v3, retain for compatibility. */
+
+ /* Version 3. */
+ /* Version 3 moves m_Isolate and m_v8EmbedderSlot to FPDF_LIBRARY_CONFIG. */
+} IPDF_JSPLATFORM;
+
+// Flags for Cursor type
+#define FXCT_ARROW 0
+#define FXCT_NESW 1
+#define FXCT_NWSE 2
+#define FXCT_VBEAM 3
+#define FXCT_HBEAM 4
+#define FXCT_HAND 5
+
+/*
+ * Function signature for the callback function passed to the FFI_SetTimer
+ * method.
+ * Parameters:
+ * idEvent - Identifier of the timer.
+ * Return value:
+ * None.
+ */
+typedef void (*TimerCallback)(int idEvent);
+
+/*
+ * Declares of a struct type to the local system time.
+ */
+typedef struct _FPDF_SYSTEMTIME {
+ unsigned short wYear; /* years since 1900 */
+ unsigned short wMonth; /* months since January - [0,11] */
+ unsigned short wDayOfWeek; /* days since Sunday - [0,6] */
+ unsigned short wDay; /* day of the month - [1,31] */
+ unsigned short wHour; /* hours since midnight - [0,23] */
+ unsigned short wMinute; /* minutes after the hour - [0,59] */
+ unsigned short wSecond; /* seconds after the minute - [0,59] */
+ unsigned short wMilliseconds; /* milliseconds after the second - [0,999] */
+} FPDF_SYSTEMTIME;
+
+#ifdef PDF_ENABLE_XFA
+
+// Pageview event flags
+#define FXFA_PAGEVIEWEVENT_POSTADDED 1 // After a new pageview is added.
+#define FXFA_PAGEVIEWEVENT_POSTREMOVED 3 // After a pageview is removed.
+
+// Definitions for Right Context Menu Features Of XFA Fields
+#define FXFA_MENU_COPY 1
+#define FXFA_MENU_CUT 2
+#define FXFA_MENU_SELECTALL 4
+#define FXFA_MENU_UNDO 8
+#define FXFA_MENU_REDO 16
+#define FXFA_MENU_PASTE 32
+
+// Definitions for File Type.
+#define FXFA_SAVEAS_XML 1
+#define FXFA_SAVEAS_XDP 2
+
+#endif // PDF_ENABLE_XFA
+
+typedef struct _FPDF_FORMFILLINFO {
+ /*
+ * Version number of the interface.
+ * Version 1 contains stable interfaces. Version 2 has additional
+ * experimental interfaces.
+ * When PDFium is built without the XFA module, version can be 1 or 2.
+ * With version 1, only stable interfaces are called. With version 2,
+ * additional experimental interfaces are also called.
+ * When PDFium is built with the XFA module, version must be 2.
+ * All the XFA related interfaces are experimental. If PDFium is built with
+ * the XFA module and version 1 then none of the XFA related interfaces
+ * would be called. When PDFium is built with XFA module then the version
+ * must be 2.
+ */
+ int version;
+
+ /* Version 1. */
+ /*
+ * Method: Release
+ * Give the implementation a chance to release any resources after the
+ * interface is no longer used.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Comments:
+ * Called by PDFium during the final cleanup process.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * Return Value:
+ * None
+ */
+ void (*Release)(struct _FPDF_FORMFILLINFO* pThis);
+
+ /*
+ * Method: FFI_Invalidate
+ * Invalidate the client area within the specified rectangle.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * page - Handle to the page. Returned by FPDF_LoadPage().
+ * left - Left position of the client area in PDF page
+ * coordinates.
+ * top - Top position of the client area in PDF page
+ * coordinates.
+ * right - Right position of the client area in PDF page
+ * coordinates.
+ * bottom - Bottom position of the client area in PDF page
+ * coordinates.
+ * Return Value:
+ * None.
+ * Comments:
+ * All positions are measured in PDF "user space".
+ * Implementation should call FPDF_RenderPageBitmap() for repainting
+ * the specified page area.
+ */
+ void (*FFI_Invalidate)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ double left,
+ double top,
+ double right,
+ double bottom);
+
+ /*
+ * Method: FFI_OutputSelectedRect
+ * When the user selects text in form fields with the mouse, this
+ * callback function will be invoked with the selected areas.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * page - Handle to the page. Returned by FPDF_LoadPage()/
+ * left - Left position of the client area in PDF page
+ * coordinates.
+ * top - Top position of the client area in PDF page
+ * coordinates.
+ * right - Right position of the client area in PDF page
+ * coordinates.
+ * bottom - Bottom position of the client area in PDF page
+ * coordinates.
+ * Return Value:
+ * None.
+ * Comments:
+ * This callback function is useful for implementing special text
+ * selection effects. An implementation should first record the
+ * returned rectangles, then draw them one by one during the next
+ * painting period. Lastly, it should remove all the recorded
+ * rectangles when finished painting.
+ */
+ void (*FFI_OutputSelectedRect)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ double left,
+ double top,
+ double right,
+ double bottom);
+
+ /*
+ * Method: FFI_SetCursor
+ * Set the Cursor shape.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * nCursorType - Cursor type, see Flags for Cursor type for details.
+ * Return value:
+ * None.
+ */
+ void (*FFI_SetCursor)(struct _FPDF_FORMFILLINFO* pThis, int nCursorType);
+
+ /*
+ * Method: FFI_SetTimer
+ * This method installs a system timer. An interval value is specified,
+ * and every time that interval elapses, the system must call into the
+ * callback function with the timer ID as returned by this function.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * uElapse - Specifies the time-out value, in milliseconds.
+ * lpTimerFunc - A pointer to the callback function-TimerCallback.
+ * Return value:
+ * The timer identifier of the new timer if the function is successful.
+ * An application passes this value to the FFI_KillTimer method to kill
+ * the timer. Nonzero if it is successful; otherwise, it is zero.
+ */
+ int (*FFI_SetTimer)(struct _FPDF_FORMFILLINFO* pThis,
+ int uElapse,
+ TimerCallback lpTimerFunc);
+
+ /*
+ * Method: FFI_KillTimer
+ * This method uninstalls a system timer, as set by an earlier call to
+ * FFI_SetTimer.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * nTimerID - The timer ID returned by FFI_SetTimer function.
+ * Return value:
+ * None.
+ */
+ void (*FFI_KillTimer)(struct _FPDF_FORMFILLINFO* pThis, int nTimerID);
+
+ /*
+ * Method: FFI_GetLocalTime
+ * This method receives the current local time on the system.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * Return value:
+ * The local time. See FPDF_SYSTEMTIME above for details.
+ * Note: Unused.
+ */
+ FPDF_SYSTEMTIME (*FFI_GetLocalTime)(struct _FPDF_FORMFILLINFO* pThis);
+
+ /*
+ * Method: FFI_OnChange
+ * This method will be invoked to notify the implementation when the
+ * value of any FormField on the document had been changed.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * no
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * Return value:
+ * None.
+ */
+ void (*FFI_OnChange)(struct _FPDF_FORMFILLINFO* pThis);
+
+ /*
+ * Method: FFI_GetPage
+ * This method receives the page handle associated with a specified
+ * page index.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * document - Handle to document. Returned by FPDF_LoadDocument().
+ * nPageIndex - Index number of the page. 0 for the first page.
+ * Return value:
+ * Handle to the page, as previously returned to the implementation by
+ * FPDF_LoadPage().
+ * Comments:
+ * The implementation is expected to keep track of the page handles it
+ * receives from PDFium, and their mappings to page numbers. In some
+ * cases, the document-level JavaScript action may refer to a page
+ * which hadn't been loaded yet. To successfully run the Javascript
+ * action, the implementation needs to load the page.
+ */
+ FPDF_PAGE (*FFI_GetPage)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_DOCUMENT document,
+ int nPageIndex);
+
+ /*
+ * Method: FFI_GetCurrentPage
+ * This method receives the handle to the current page.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * Yes when V8 support is present, otherwise unused.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * document - Handle to document. Returned by FPDF_LoadDocument().
+ * Return value:
+ * Handle to the page. Returned by FPDF_LoadPage().
+ * Comments:
+ * PDFium doesn't keep keep track of the "current page" (e.g. the one
+ * that is most visible on screen), so it must ask the embedder for
+ * this information.
+ */
+ FPDF_PAGE (*FFI_GetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_DOCUMENT document);
+
+ /*
+ * Method: FFI_GetRotation
+ * This method receives currently rotation of the page view.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * page - Handle to page, as returned by FPDF_LoadPage().
+ * Return value:
+ * A number to indicate the page rotation in 90 degree increments
+ * in a clockwise direction:
+ * 0 - 0 degrees
+ * 1 - 90 degrees
+ * 2 - 180 degrees
+ * 3 - 270 degrees
+ * Note: Unused.
+ */
+ int (*FFI_GetRotation)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page);
+
+ /*
+ * Method: FFI_ExecuteNamedAction
+ * This method will execute a named action.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * namedAction - A byte string which indicates the named action,
+ * terminated by 0.
+ * Return value:
+ * None.
+ * Comments:
+ * See ISO 32000-1:2008, section 12.6.4.11 for descriptions of the
+ * standard named actions, but note that a document may supply any
+ * name of its choosing.
+ */
+ void (*FFI_ExecuteNamedAction)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_BYTESTRING namedAction);
+ /*
+ * Method: FFI_SetTextFieldFocus
+ * Called when a text field is getting or losing focus.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * no
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * value - The string value of the form field, in UTF-16LE
+ * format.
+ * valueLen - The length of the string value. This is the
+ * number of characters, not bytes.
+ * is_focus - True if the form field is getting focus, false
+ * if the form field is losing focus.
+ * Return value:
+ * None.
+ * Comments:
+ * Only supports text fields and combobox fields.
+ */
+ void (*FFI_SetTextFieldFocus)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_WIDESTRING value,
+ FPDF_DWORD valueLen,
+ FPDF_BOOL is_focus);
+
+ /*
+ * Method: FFI_DoURIAction
+ * Ask the implementation to navigate to a uniform resource identifier.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * bsURI - A byte string which indicates the uniform
+ * resource identifier, terminated by 0.
+ * Return value:
+ * None.
+ * Comments:
+ * If the embedder is version 2 or higher and have implementation for
+ * FFI_DoURIActionWithKeyboardModifier, then
+ * FFI_DoURIActionWithKeyboardModifier takes precedence over
+ * FFI_DoURIAction.
+ * See the URI actions description of <>
+ * for more details.
+ */
+ void (*FFI_DoURIAction)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_BYTESTRING bsURI);
+
+ /*
+ * Method: FFI_DoGoToAction
+ * This action changes the view to a specified destination.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * nPageIndex - The index of the PDF page.
+ * zoomMode - The zoom mode for viewing page. See below.
+ * fPosArray - The float array which carries the position info.
+ * sizeofArray - The size of float array.
+ * PDFZoom values:
+ * - XYZ = 1
+ * - FITPAGE = 2
+ * - FITHORZ = 3
+ * - FITVERT = 4
+ * - FITRECT = 5
+ * - FITBBOX = 6
+ * - FITBHORZ = 7
+ * - FITBVERT = 8
+ * Return value:
+ * None.
+ * Comments:
+ * See the Destinations description of <>
+ * in 8.2.1 for more details.
+ */
+ void (*FFI_DoGoToAction)(struct _FPDF_FORMFILLINFO* pThis,
+ int nPageIndex,
+ int zoomMode,
+ float* fPosArray,
+ int sizeofArray);
+
+ /*
+ * Pointer to IPDF_JSPLATFORM interface.
+ * Unused if PDFium is built without V8 support. Otherwise, if NULL, then
+ * JavaScript will be prevented from executing while rendering the document.
+ */
+ IPDF_JSPLATFORM* m_pJsPlatform;
+
+ /* Version 2 - Experimental. */
+ /*
+ * Whether the XFA module is disabled when built with the XFA module.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ */
+ FPDF_BOOL xfa_disabled;
+
+ /*
+ * Method: FFI_DisplayCaret
+ * This method will show the caret at specified position.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * page - Handle to page. Returned by FPDF_LoadPage().
+ * left - Left position of the client area in PDF page
+ * coordinates.
+ * top - Top position of the client area in PDF page
+ * coordinates.
+ * right - Right position of the client area in PDF page
+ * coordinates.
+ * bottom - Bottom position of the client area in PDF page
+ * coordinates.
+ * Return value:
+ * None.
+ */
+ void (*FFI_DisplayCaret)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ FPDF_BOOL bVisible,
+ double left,
+ double top,
+ double right,
+ double bottom);
+
+ /*
+ * Method: FFI_GetCurrentPageIndex
+ * This method will get the current page index.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * document - Handle to document from FPDF_LoadDocument().
+ * Return value:
+ * The index of current page.
+ */
+ int (*FFI_GetCurrentPageIndex)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_DOCUMENT document);
+
+ /*
+ * Method: FFI_SetCurrentPage
+ * This method will set the current page.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * document - Handle to document from FPDF_LoadDocument().
+ * iCurPage - The index of the PDF page.
+ * Return value:
+ * None.
+ */
+ void (*FFI_SetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_DOCUMENT document,
+ int iCurPage);
+
+ /*
+ * Method: FFI_GotoURL
+ * This method will navigate to the specified URL.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * document - Handle to document from FPDF_LoadDocument().
+ * wsURL - The string value of the URL, in UTF-16LE format.
+ * Return value:
+ * None.
+ */
+ void (*FFI_GotoURL)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_DOCUMENT document,
+ FPDF_WIDESTRING wsURL);
+
+ /*
+ * Method: FFI_GetPageViewRect
+ * This method will get the current page view rectangle.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * page - Handle to page. Returned by FPDF_LoadPage().
+ * left - The pointer to receive left position of the page
+ * view area in PDF page coordinates.
+ * top - The pointer to receive top position of the page
+ * view area in PDF page coordinates.
+ * right - The pointer to receive right position of the
+ * page view area in PDF page coordinates.
+ * bottom - The pointer to receive bottom position of the
+ * page view area in PDF page coordinates.
+ * Return value:
+ * None.
+ */
+ void (*FFI_GetPageViewRect)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ double* left,
+ double* top,
+ double* right,
+ double* bottom);
+
+ /*
+ * Method: FFI_PageEvent
+ * This method fires when pages have been added to or deleted from
+ * the XFA document.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * page_count - The number of pages to be added or deleted.
+ * event_type - See FXFA_PAGEVIEWEVENT_* above.
+ * Return value:
+ * None.
+ * Comments:
+ * The pages to be added or deleted always start from the last page
+ * of document. This means that if parameter page_count is 2 and
+ * event type is FXFA_PAGEVIEWEVENT_POSTADDED, 2 new pages have been
+ * appended to the tail of document; If page_count is 2 and
+ * event type is FXFA_PAGEVIEWEVENT_POSTREMOVED, the last 2 pages
+ * have been deleted.
+ */
+ void (*FFI_PageEvent)(struct _FPDF_FORMFILLINFO* pThis,
+ int page_count,
+ FPDF_DWORD event_type);
+
+ /*
+ * Method: FFI_PopupMenu
+ * This method will track the right context menu for XFA fields.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * page - Handle to page. Returned by FPDF_LoadPage().
+ * hWidget - Always null, exists for compatibility.
+ * menuFlag - The menu flags. Please refer to macro definition
+ * of FXFA_MENU_XXX and this can be one or a
+ * combination of these macros.
+ * x - X position of the client area in PDF page
+ * coordinates.
+ * y - Y position of the client area in PDF page
+ * coordinates.
+ * Return value:
+ * TRUE indicates success; otherwise false.
+ */
+ FPDF_BOOL (*FFI_PopupMenu)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ FPDF_WIDGET hWidget,
+ int menuFlag,
+ float x,
+ float y);
+
+ /*
+ * Method: FFI_OpenFile
+ * This method will open the specified file with the specified mode.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * fileFlag - The file flag. Please refer to macro definition
+ * of FXFA_SAVEAS_XXX and use one of these macros.
+ * wsURL - The string value of the file URL, in UTF-16LE
+ * format.
+ * mode - The mode for open file, e.g. "rb" or "wb".
+ * Return value:
+ * The handle to FPDF_FILEHANDLER.
+ */
+ FPDF_FILEHANDLER* (*FFI_OpenFile)(struct _FPDF_FORMFILLINFO* pThis,
+ int fileFlag,
+ FPDF_WIDESTRING wsURL,
+ const char* mode);
+
+ /*
+ * Method: FFI_EmailTo
+ * This method will email the specified file stream to the specified
+ * contact.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * pFileHandler - Handle to the FPDF_FILEHANDLER.
+ * pTo - A semicolon-delimited list of recipients for the
+ * message,in UTF-16LE format.
+ * pSubject - The subject of the message,in UTF-16LE format.
+ * pCC - A semicolon-delimited list of CC recipients for
+ * the message,in UTF-16LE format.
+ * pBcc - A semicolon-delimited list of BCC recipients for
+ * the message,in UTF-16LE format.
+ * pMsg - Pointer to the data buffer to be sent.Can be
+ * NULL,in UTF-16LE format.
+ * Return value:
+ * None.
+ */
+ void (*FFI_EmailTo)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_FILEHANDLER* fileHandler,
+ FPDF_WIDESTRING pTo,
+ FPDF_WIDESTRING pSubject,
+ FPDF_WIDESTRING pCC,
+ FPDF_WIDESTRING pBcc,
+ FPDF_WIDESTRING pMsg);
+
+ /*
+ * Method: FFI_UploadTo
+ * This method will upload the specified file stream to the
+ * specified URL.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * pFileHandler - Handle to the FPDF_FILEHANDLER.
+ * fileFlag - The file flag. Please refer to macro definition
+ * of FXFA_SAVEAS_XXX and use one of these macros.
+ * uploadTo - Pointer to the URL path, in UTF-16LE format.
+ * Return value:
+ * None.
+ */
+ void (*FFI_UploadTo)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_FILEHANDLER* fileHandler,
+ int fileFlag,
+ FPDF_WIDESTRING uploadTo);
+
+ /*
+ * Method: FFI_GetPlatform
+ * This method will get the current platform.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * platform - Pointer to the data buffer to receive the
+ * platform,in UTF-16LE format. Can be NULL.
+ * length - The length of the buffer in bytes. Can be
+ * 0 to query the required size.
+ * Return value:
+ * The length of the buffer, number of bytes.
+ */
+ int (*FFI_GetPlatform)(struct _FPDF_FORMFILLINFO* pThis,
+ void* platform,
+ int length);
+
+ /*
+ * Method: FFI_GetLanguage
+ * This method will get the current language.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * language - Pointer to the data buffer to receive the
+ * current language. Can be NULL.
+ * length - The length of the buffer in bytes. Can be
+ * 0 to query the required size.
+ * Return value:
+ * The length of the buffer, number of bytes.
+ */
+ int (*FFI_GetLanguage)(struct _FPDF_FORMFILLINFO* pThis,
+ void* language,
+ int length);
+
+ /*
+ * Method: FFI_DownloadFromURL
+ * This method will download the specified file from the URL.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * URL - The string value of the file URL, in UTF-16LE
+ * format.
+ * Return value:
+ * The handle to FPDF_FILEHANDLER.
+ */
+ FPDF_FILEHANDLER* (*FFI_DownloadFromURL)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_WIDESTRING URL);
+ /*
+ * Method: FFI_PostRequestURL
+ * This method will post the request to the server URL.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * wsURL - The string value of the server URL, in UTF-16LE
+ * format.
+ * wsData - The post data,in UTF-16LE format.
+ * wsContentType - The content type of the request data, in
+ * UTF-16LE format.
+ * wsEncode - The encode type, in UTF-16LE format.
+ * wsHeader - The request header,in UTF-16LE format.
+ * response - Pointer to the FPDF_BSTR to receive the response
+ * data from the server, in UTF-16LE format.
+ * Return value:
+ * TRUE indicates success, otherwise FALSE.
+ */
+ FPDF_BOOL (*FFI_PostRequestURL)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_WIDESTRING wsURL,
+ FPDF_WIDESTRING wsData,
+ FPDF_WIDESTRING wsContentType,
+ FPDF_WIDESTRING wsEncode,
+ FPDF_WIDESTRING wsHeader,
+ FPDF_BSTR* response);
+
+ /*
+ * Method: FFI_PutRequestURL
+ * This method will put the request to the server URL.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * Required for XFA, otherwise set to NULL.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * wsURL - The string value of the server URL, in UTF-16LE
+ * format.
+ * wsData - The put data, in UTF-16LE format.
+ * wsEncode - The encode type, in UTR-16LE format.
+ * Return value:
+ * TRUE indicates success, otherwise FALSE.
+ */
+ FPDF_BOOL (*FFI_PutRequestURL)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_WIDESTRING wsURL,
+ FPDF_WIDESTRING wsData,
+ FPDF_WIDESTRING wsEncode);
+
+ /*
+ * Method: FFI_OnFocusChange
+ * Called when the focused annotation is updated.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * No
+ * Parameters:
+ * param - Pointer to the interface structure itself.
+ * annot - The focused annotation.
+ * page_index - Index number of the page which contains the
+ * focused annotation. 0 for the first page.
+ * Return value:
+ * None.
+ * Comments:
+ * This callback function is useful for implementing any view based
+ * action such as scrolling the annotation rect into view. The
+ * embedder should not copy and store the annot as its scope is
+ * limited to this call only.
+ */
+ void (*FFI_OnFocusChange)(struct _FPDF_FORMFILLINFO* param,
+ FPDF_ANNOTATION annot,
+ int page_index);
+
+ /**
+ * Method: FFI_DoURIActionWithKeyboardModifier
+ * Ask the implementation to navigate to a uniform resource identifier
+ * with the specified modifiers.
+ * Interface Version:
+ * Ignored if |version| < 2.
+ * Implementation Required:
+ * No
+ * Parameters:
+ * param - Pointer to the interface structure itself.
+ * uri - A byte string which indicates the uniform
+ * resource identifier, terminated by 0.
+ * modifiers - Keyboard modifier that indicates which of
+ * the virtual keys are down, if any.
+ * Return value:
+ * None.
+ * Comments:
+ * If the embedder who is version 2 and does not implement this API,
+ * then a call will be redirected to FFI_DoURIAction.
+ * See the URI actions description of <>
+ * for more details.
+ */
+ void(*FFI_DoURIActionWithKeyboardModifier)(struct _FPDF_FORMFILLINFO* param,
+ FPDF_BYTESTRING uri,
+ int modifiers);
+} FPDF_FORMFILLINFO;
+
+/*
+ * Function: FPDFDOC_InitFormFillEnvironment
+ * Initialize form fill environment.
+ * Parameters:
+ * document - Handle to document from FPDF_LoadDocument().
+ * formInfo - Pointer to a FPDF_FORMFILLINFO structure.
+ * Return Value:
+ * Handle to the form fill module, or NULL on failure.
+ * Comments:
+ * This function should be called before any form fill operation.
+ * The FPDF_FORMFILLINFO passed in via |formInfo| must remain valid until
+ * the returned FPDF_FORMHANDLE is closed.
+ */
+FPDF_EXPORT FPDF_FORMHANDLE FPDF_CALLCONV
+FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document,
+ FPDF_FORMFILLINFO* formInfo);
+
+/*
+ * Function: FPDFDOC_ExitFormFillEnvironment
+ * Take ownership of |hHandle| and exit form fill environment.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * Return Value:
+ * None.
+ * Comments:
+ * This function is a no-op when |hHandle| is null.
+ */
+FPDF_EXPORT void FPDF_CALLCONV
+FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle);
+
+/*
+ * Function: FORM_OnAfterLoadPage
+ * This method is required for implementing all the form related
+ * functions. Should be invoked after user successfully loaded a
+ * PDF page, and FPDFDOC_InitFormFillEnvironment() has been invoked.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * Return Value:
+ * None.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FORM_OnAfterLoadPage(FPDF_PAGE page,
+ FPDF_FORMHANDLE hHandle);
+
+/*
+ * Function: FORM_OnBeforeClosePage
+ * This method is required for implementing all the form related
+ * functions. Should be invoked before user closes the PDF page.
+ * Parameters:
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * Return Value:
+ * None.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FORM_OnBeforeClosePage(FPDF_PAGE page,
+ FPDF_FORMHANDLE hHandle);
+
+/*
+ * Function: FORM_DoDocumentJSAction
+ * This method is required for performing document-level JavaScript
+ * actions. It should be invoked after the PDF document has been loaded.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * Return Value:
+ * None.
+ * Comments:
+ * If there is document-level JavaScript action embedded in the
+ * document, this method will execute the JavaScript action. Otherwise,
+ * the method will do nothing.
+ */
+FPDF_EXPORT void FPDF_CALLCONV
+FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle);
+
+/*
+ * Function: FORM_DoDocumentOpenAction
+ * This method is required for performing open-action when the document
+ * is opened.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * Return Value:
+ * None.
+ * Comments:
+ * This method will do nothing if there are no open-actions embedded
+ * in the document.
+ */
+FPDF_EXPORT void FPDF_CALLCONV
+FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle);
+
+// Additional actions type of document:
+// WC, before closing document, JavaScript action.
+// WS, before saving document, JavaScript action.
+// DS, after saving document, JavaScript action.
+// WP, before printing document, JavaScript action.
+// DP, after printing document, JavaScript action.
+#define FPDFDOC_AACTION_WC 0x10
+#define FPDFDOC_AACTION_WS 0x11
+#define FPDFDOC_AACTION_DS 0x12
+#define FPDFDOC_AACTION_WP 0x13
+#define FPDFDOC_AACTION_DP 0x14
+
+/*
+ * Function: FORM_DoDocumentAAction
+ * This method is required for performing the document's
+ * additional-action.
+ * Parameters:
+ * hHandle - Handle to the form fill module. Returned by
+ * FPDFDOC_InitFormFillEnvironment.
+ * aaType - The type of the additional-actions which defined
+ * above.
+ * Return Value:
+ * None.
+ * Comments:
+ * This method will do nothing if there is no document
+ * additional-action corresponding to the specified |aaType|.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle,
+ int aaType);
+
+// Additional-action types of page object:
+// OPEN (/O) -- An action to be performed when the page is opened
+// CLOSE (/C) -- An action to be performed when the page is closed
+#define FPDFPAGE_AACTION_OPEN 0
+#define FPDFPAGE_AACTION_CLOSE 1
+
+/*
+ * Function: FORM_DoPageAAction
+ * This method is required for performing the page object's
+ * additional-action when opened or closed.
+ * Parameters:
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * aaType - The type of the page object's additional-actions
+ * which defined above.
+ * Return Value:
+ * None.
+ * Comments:
+ * This method will do nothing if no additional-action corresponding
+ * to the specified |aaType| exists.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FORM_DoPageAAction(FPDF_PAGE page,
+ FPDF_FORMHANDLE hHandle,
+ int aaType);
+
+/*
+ * Function: FORM_OnMouseMove
+ * Call this member function when the mouse cursor moves.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * modifier - Indicates whether various virtual keys are down.
+ * page_x - Specifies the x-coordinate of the cursor in PDF user
+ * space.
+ * page_y - Specifies the y-coordinate of the cursor in PDF user
+ * space.
+ * Return Value:
+ * True indicates success; otherwise false.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y);
+
+/*
+ * Experimental API
+ * Function: FORM_OnMouseWheel
+ * Call this member function when the user scrolls the mouse wheel.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * modifier - Indicates whether various virtual keys are down.
+ * page_coord - Specifies the coordinates of the cursor in PDF user
+ * space.
+ * delta_x - Specifies the amount of wheel movement on the x-axis,
+ * in units of platform-agnostic wheel deltas. Negative
+ * values mean left.
+ * delta_y - Specifies the amount of wheel movement on the y-axis,
+ * in units of platform-agnostic wheel deltas. Negative
+ * values mean down.
+ * Return Value:
+ * True indicates success; otherwise false.
+ * Comments:
+ * For |delta_x| and |delta_y|, the caller must normalize
+ * platform-specific wheel deltas. e.g. On Windows, a delta value of 240
+ * for a WM_MOUSEWHEEL event normalizes to 2, since Windows defines
+ * WHEEL_DELTA as 120.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_OnMouseWheel(
+ FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ const FS_POINTF* page_coord,
+ int delta_x,
+ int delta_y);
+
+/*
+ * Function: FORM_OnFocus
+ * This function focuses the form annotation at a given point. If the
+ * annotation at the point already has focus, nothing happens. If there
+ * is no annotation at the point, removes form focus.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * modifier - Indicates whether various virtual keys are down.
+ * page_x - Specifies the x-coordinate of the cursor in PDF user
+ * space.
+ * page_y - Specifies the y-coordinate of the cursor in PDF user
+ * space.
+ * Return Value:
+ * True if there is an annotation at the given point and it has focus.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_OnFocus(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y);
+
+/*
+ * Function: FORM_OnLButtonDown
+ * Call this member function when the user presses the left
+ * mouse button.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * modifier - Indicates whether various virtual keys are down.
+ * page_x - Specifies the x-coordinate of the cursor in PDF user
+ * space.
+ * page_y - Specifies the y-coordinate of the cursor in PDF user
+ * space.
+ * Return Value:
+ * True indicates success; otherwise false.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y);
+
+/*
+ * Function: FORM_OnRButtonDown
+ * Same as above, execpt for the right mouse button.
+ * Comments:
+ * At the present time, has no effect except in XFA builds, but is
+ * included for the sake of symmetry.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_OnRButtonDown(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y);
+/*
+ * Function: FORM_OnLButtonUp
+ * Call this member function when the user releases the left
+ * mouse button.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * modifier - Indicates whether various virtual keys are down.
+ * page_x - Specifies the x-coordinate of the cursor in device.
+ * page_y - Specifies the y-coordinate of the cursor in device.
+ * Return Value:
+ * True indicates success; otherwise false.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y);
+
+/*
+ * Function: FORM_OnRButtonUp
+ * Same as above, execpt for the right mouse button.
+ * Comments:
+ * At the present time, has no effect except in XFA builds, but is
+ * included for the sake of symmetry.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_OnRButtonUp(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y);
+
+/*
+ * Function: FORM_OnLButtonDoubleClick
+ * Call this member function when the user double clicks the
+ * left mouse button.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * modifier - Indicates whether various virtual keys are down.
+ * page_x - Specifies the x-coordinate of the cursor in PDF user
+ * space.
+ * page_y - Specifies the y-coordinate of the cursor in PDF user
+ * space.
+ * Return Value:
+ * True indicates success; otherwise false.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FORM_OnLButtonDoubleClick(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y);
+
+/*
+ * Function: FORM_OnKeyDown
+ * Call this member function when a nonsystem key is pressed.
+ * Parameters:
+ * hHandle - Handle to the form fill module, aseturned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * nKeyCode - The virtual-key code of the given key (see
+ * fpdf_fwlevent.h for virtual key codes).
+ * modifier - Mask of key flags (see fpdf_fwlevent.h for key
+ * flag values).
+ * Return Value:
+ * True indicates success; otherwise false.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int nKeyCode,
+ int modifier);
+
+/*
+ * Function: FORM_OnKeyUp
+ * Call this member function when a nonsystem key is released.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * nKeyCode - The virtual-key code of the given key (see
+ * fpdf_fwlevent.h for virtual key codes).
+ * modifier - Mask of key flags (see fpdf_fwlevent.h for key
+ * flag values).
+ * Return Value:
+ * True indicates success; otherwise false.
+ * Comments:
+ * Currently unimplemented and always returns false. PDFium reserves this
+ * API and may implement it in the future on an as-needed basis.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_OnKeyUp(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int nKeyCode,
+ int modifier);
+
+/*
+ * Function: FORM_OnChar
+ * Call this member function when a keystroke translates to a
+ * nonsystem character.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * nChar - The character code value itself.
+ * modifier - Mask of key flags (see fpdf_fwlevent.h for key
+ * flag values).
+ * Return Value:
+ * True indicates success; otherwise false.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_OnChar(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int nChar,
+ int modifier);
+
+/*
+ * Experimental API
+ * Function: FORM_GetFocusedText
+ * Call this function to obtain the text within the current focused
+ * field, if any.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * buffer - Buffer for holding the form text, encoded in
+ * UTF-16LE. If NULL, |buffer| is not modified.
+ * buflen - Length of |buffer| in bytes. If |buflen| is less
+ * than the length of the form text string, |buffer| is
+ * not modified.
+ * Return Value:
+ * Length in bytes for the text in the focused field.
+ */
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FORM_GetFocusedText(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ void* buffer,
+ unsigned long buflen);
+
+/*
+ * Function: FORM_GetSelectedText
+ * Call this function to obtain selected text within a form text
+ * field or form combobox text field.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * buffer - Buffer for holding the selected text, encoded in
+ * UTF-16LE. If NULL, |buffer| is not modified.
+ * buflen - Length of |buffer| in bytes. If |buflen| is less
+ * than the length of the selected text string,
+ * |buffer| is not modified.
+ * Return Value:
+ * Length in bytes of selected text in form text field or form combobox
+ * text field.
+ */
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FORM_GetSelectedText(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ void* buffer,
+ unsigned long buflen);
+
+/*
+ * Experimental API
+ * Function: FORM_ReplaceAndKeepSelection
+ * Call this function to replace the selected text in a form
+ * text field or user-editable form combobox text field with another
+ * text string (which can be empty or non-empty). If there is no
+ * selected text, this function will append the replacement text after
+ * the current caret position. After the insertion, the inserted text
+ * will be selected.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as Returned by FPDF_LoadPage().
+ * wsText - The text to be inserted, in UTF-16LE format.
+ * Return Value:
+ * None.
+ */
+FPDF_EXPORT void FPDF_CALLCONV
+FORM_ReplaceAndKeepSelection(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ FPDF_WIDESTRING wsText);
+
+/*
+ * Function: FORM_ReplaceSelection
+ * Call this function to replace the selected text in a form
+ * text field or user-editable form combobox text field with another
+ * text string (which can be empty or non-empty). If there is no
+ * selected text, this function will append the replacement text after
+ * the current caret position. After the insertion, the selection range
+ * will be set to empty.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as Returned by FPDF_LoadPage().
+ * wsText - The text to be inserted, in UTF-16LE format.
+ * Return Value:
+ * None.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FORM_ReplaceSelection(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ FPDF_WIDESTRING wsText);
+
+/*
+ * Experimental API
+ * Function: FORM_SelectAllText
+ * Call this function to select all the text within the currently focused
+ * form text field or form combobox text field.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * Return Value:
+ * Whether the operation succeeded or not.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FORM_SelectAllText(FPDF_FORMHANDLE hHandle, FPDF_PAGE page);
+
+/*
+ * Function: FORM_CanUndo
+ * Find out if it is possible for the current focused widget in a given
+ * form to perform an undo operation.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * Return Value:
+ * True if it is possible to undo.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_CanUndo(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page);
+
+/*
+ * Function: FORM_CanRedo
+ * Find out if it is possible for the current focused widget in a given
+ * form to perform a redo operation.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * Return Value:
+ * True if it is possible to redo.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_CanRedo(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page);
+
+/*
+ * Function: FORM_Undo
+ * Make the current focussed widget perform an undo operation.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * Return Value:
+ * True if the undo operation succeeded.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_Undo(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page);
+
+/*
+ * Function: FORM_Redo
+ * Make the current focussed widget perform a redo operation.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page, as returned by FPDF_LoadPage().
+ * Return Value:
+ * True if the redo operation succeeded.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FORM_Redo(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page);
+
+/*
+ * Function: FORM_ForceToKillFocus.
+ * Call this member function to force to kill the focus of the form
+ * field which has focus. If it would kill the focus of a form field,
+ * save the value of form field if was changed by theuser.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * Return Value:
+ * True indicates success; otherwise false.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle);
+
+/*
+ * Experimental API.
+ * Function: FORM_GetFocusedAnnot.
+ * Call this member function to get the currently focused annotation.
+ * Parameters:
+ * handle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page_index - Buffer to hold the index number of the page which
+ * contains the focused annotation. 0 for the first page.
+ * Can't be NULL.
+ * annot - Buffer to hold the focused annotation. Can't be NULL.
+ * Return Value:
+ * On success, return true and write to the out parameters. Otherwise return
+ * false and leave the out parameters unmodified.
+ * Comments:
+ * Not currently supported for XFA forms - will report no focused
+ * annotation.
+ * Must call FPDFPage_CloseAnnot() when the annotation returned in |annot|
+ * by this function is no longer needed.
+ * This will return true and set |page_index| to -1 and |annot| to NULL, if
+ * there is no focused annotation.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FORM_GetFocusedAnnot(FPDF_FORMHANDLE handle,
+ int* page_index,
+ FPDF_ANNOTATION* annot);
+
+/*
+ * Experimental API.
+ * Function: FORM_SetFocusedAnnot.
+ * Call this member function to set the currently focused annotation.
+ * Parameters:
+ * handle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * annot - Handle to an annotation.
+ * Return Value:
+ * True indicates success; otherwise false.
+ * Comments:
+ * |annot| can't be NULL. To kill focus, use FORM_ForceToKillFocus()
+ * instead.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FORM_SetFocusedAnnot(FPDF_FORMHANDLE handle, FPDF_ANNOTATION annot);
+
+// Form Field Types
+// The names of the defines are stable, but the specific values associated with
+// them are not, so do not hardcode their values.
+#define FPDF_FORMFIELD_UNKNOWN 0 // Unknown.
+#define FPDF_FORMFIELD_PUSHBUTTON 1 // push button type.
+#define FPDF_FORMFIELD_CHECKBOX 2 // check box type.
+#define FPDF_FORMFIELD_RADIOBUTTON 3 // radio button type.
+#define FPDF_FORMFIELD_COMBOBOX 4 // combo box type.
+#define FPDF_FORMFIELD_LISTBOX 5 // list box type.
+#define FPDF_FORMFIELD_TEXTFIELD 6 // text field type.
+#define FPDF_FORMFIELD_SIGNATURE 7 // text field type.
+#ifdef PDF_ENABLE_XFA
+#define FPDF_FORMFIELD_XFA 8 // Generic XFA type.
+#define FPDF_FORMFIELD_XFA_CHECKBOX 9 // XFA check box type.
+#define FPDF_FORMFIELD_XFA_COMBOBOX 10 // XFA combo box type.
+#define FPDF_FORMFIELD_XFA_IMAGEFIELD 11 // XFA image field type.
+#define FPDF_FORMFIELD_XFA_LISTBOX 12 // XFA list box type.
+#define FPDF_FORMFIELD_XFA_PUSHBUTTON 13 // XFA push button type.
+#define FPDF_FORMFIELD_XFA_SIGNATURE 14 // XFA signture field type.
+#define FPDF_FORMFIELD_XFA_TEXTFIELD 15 // XFA text field type.
+#endif // PDF_ENABLE_XFA
+
+#ifdef PDF_ENABLE_XFA
+#define FPDF_FORMFIELD_COUNT 16
+#else // PDF_ENABLE_XFA
+#define FPDF_FORMFIELD_COUNT 8
+#endif // PDF_ENABLE_XFA
+
+#ifdef PDF_ENABLE_XFA
+#define IS_XFA_FORMFIELD(type) \
+ (((type) == FPDF_FORMFIELD_XFA) || \
+ ((type) == FPDF_FORMFIELD_XFA_CHECKBOX) || \
+ ((type) == FPDF_FORMFIELD_XFA_COMBOBOX) || \
+ ((type) == FPDF_FORMFIELD_XFA_IMAGEFIELD) || \
+ ((type) == FPDF_FORMFIELD_XFA_LISTBOX) || \
+ ((type) == FPDF_FORMFIELD_XFA_PUSHBUTTON) || \
+ ((type) == FPDF_FORMFIELD_XFA_SIGNATURE) || \
+ ((type) == FPDF_FORMFIELD_XFA_TEXTFIELD))
+#endif // PDF_ENABLE_XFA
+
+/*
+ * Function: FPDFPage_HasFormFieldAtPoint
+ * Get the form field type by point.
+ * Parameters:
+ * hHandle - Handle to the form fill module. Returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page. Returned by FPDF_LoadPage().
+ * page_x - X position in PDF "user space".
+ * page_y - Y position in PDF "user space".
+ * Return Value:
+ * Return the type of the form field; -1 indicates no field.
+ * See field types above.
+ */
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ double page_x,
+ double page_y);
+
+/*
+ * Function: FPDFPage_FormFieldZOrderAtPoint
+ * Get the form field z-order by point.
+ * Parameters:
+ * hHandle - Handle to the form fill module. Returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * page - Handle to the page. Returned by FPDF_LoadPage().
+ * page_x - X position in PDF "user space".
+ * page_y - Y position in PDF "user space".
+ * Return Value:
+ * Return the z-order of the form field; -1 indicates no field.
+ * Higher numbers are closer to the front.
+ */
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFPage_FormFieldZOrderAtPoint(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ double page_x,
+ double page_y);
+
+/*
+ * Function: FPDF_SetFormFieldHighlightColor
+ * Set the highlight color of the specified (or all) form fields
+ * in the document.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * doc - Handle to the document, as returned by
+ * FPDF_LoadDocument().
+ * fieldType - A 32-bit integer indicating the type of a form
+ * field (defined above).
+ * color - The highlight color of the form field. Constructed by
+ * 0xxxrrggbb.
+ * Return Value:
+ * None.
+ * Comments:
+ * When the parameter fieldType is set to FPDF_FORMFIELD_UNKNOWN, the
+ * highlight color will be applied to all the form fields in the
+ * document.
+ * Please refresh the client window to show the highlight immediately
+ * if necessary.
+ */
+FPDF_EXPORT void FPDF_CALLCONV
+FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle,
+ int fieldType,
+ unsigned long color);
+
+/*
+ * Function: FPDF_SetFormFieldHighlightAlpha
+ * Set the transparency of the form field highlight color in the
+ * document.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * doc - Handle to the document, as returaned by
+ * FPDF_LoadDocument().
+ * alpha - The transparency of the form field highlight color,
+ * between 0-255.
+ * Return Value:
+ * None.
+ */
+FPDF_EXPORT void FPDF_CALLCONV
+FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle, unsigned char alpha);
+
+/*
+ * Function: FPDF_RemoveFormFieldHighlight
+ * Remove the form field highlight color in the document.
+ * Parameters:
+ * hHandle - Handle to the form fill module, as returned by
+ * FPDFDOC_InitFormFillEnvironment().
+ * Return Value:
+ * None.
+ * Comments:
+ * Please refresh the client window to remove the highlight immediately
+ * if necessary.
+ */
+FPDF_EXPORT void FPDF_CALLCONV
+FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle);
+
+/*
+* Function: FPDF_FFLDraw
+* Render FormFields and popup window on a page to a device independent
+* bitmap.
+* Parameters:
+* hHandle - Handle to the form fill module, as returned by
+* FPDFDOC_InitFormFillEnvironment().
+* bitmap - Handle to the device independent bitmap (as the
+* output buffer). Bitmap handles can be created by
+* FPDFBitmap_Create().
+* page - Handle to the page, as returned by FPDF_LoadPage().
+* start_x - Left pixel position of the display area in the
+* device coordinates.
+* start_y - Top pixel position of the display area in the device
+* coordinates.
+* size_x - Horizontal size (in pixels) for displaying the page.
+* size_y - Vertical size (in pixels) for displaying the page.
+* rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees
+* clockwise), 2 (rotated 180 degrees), 3 (rotated 90
+* degrees counter-clockwise).
+* flags - 0 for normal display, or combination of flags
+* defined above.
+* Return Value:
+* None.
+* Comments:
+* This function is designed to render annotations that are
+* user-interactive, which are widget annotations (for FormFields) and
+* popup annotations.
+* With the FPDF_ANNOT flag, this function will render a popup annotation
+* when users mouse-hover on a non-widget annotation. Regardless of
+* FPDF_ANNOT flag, this function will always render widget annotations
+* for FormFields.
+* In order to implement the FormFill functions, implementation should
+* call this function after rendering functions, such as
+* FPDF_RenderPageBitmap() or FPDF_RenderPageBitmap_Start(), have
+* finished rendering the page contents.
+*/
+FPDF_EXPORT void FPDF_CALLCONV FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,
+ FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags);
+
+#if defined(PDF_USE_SKIA)
+FPDF_EXPORT void FPDF_CALLCONV FPDF_FFLDrawSkia(FPDF_FORMHANDLE hHandle,
+ FPDF_SKIA_CANVAS canvas,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags);
+#endif
+
+/*
+ * Experimental API
+ * Function: FPDF_GetFormType
+ * Returns the type of form contained in the PDF document.
+ * Parameters:
+ * document - Handle to document.
+ * Return Value:
+ * Integer value representing one of the FORMTYPE_ values.
+ * Comments:
+ * If |document| is NULL, then the return value is FORMTYPE_NONE.
+ */
+FPDF_EXPORT int FPDF_CALLCONV FPDF_GetFormType(FPDF_DOCUMENT document);
+
+/*
+ * Experimental API
+ * Function: FORM_SetIndexSelected
+ * Selects/deselects the value at the given |index| of the focused
+ * annotation.
+ * Parameters:
+ * hHandle - Handle to the form fill module. Returned by
+ * FPDFDOC_InitFormFillEnvironment.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ * index - 0-based index of value to be set as
+ * selected/unselected
+ * selected - true to select, false to deselect
+ * Return Value:
+ * TRUE if the operation succeeded.
+ * FALSE if the operation failed or widget is not a supported type.
+ * Comments:
+ * Intended for use with listbox/combobox widget types. Comboboxes
+ * have at most a single value selected at a time which cannot be
+ * deselected. Deselect on a combobox is a no-op that returns false.
+ * Default implementation is a no-op that will return false for
+ * other types.
+ * Not currently supported for XFA forms - will return false.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FORM_SetIndexSelected(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int index,
+ FPDF_BOOL selected);
+
+/*
+ * Experimental API
+ * Function: FORM_IsIndexSelected
+ * Returns whether or not the value at |index| of the focused
+ * annotation is currently selected.
+ * Parameters:
+ * hHandle - Handle to the form fill module. Returned by
+ * FPDFDOC_InitFormFillEnvironment.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ * index - 0-based Index of value to check
+ * Return Value:
+ * TRUE if value at |index| is currently selected.
+ * FALSE if value at |index| is not selected or widget is not a
+ * supported type.
+ * Comments:
+ * Intended for use with listbox/combobox widget types. Default
+ * implementation is a no-op that will return false for other types.
+ * Not currently supported for XFA forms - will return false.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FORM_IsIndexSelected(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int index);
+
+/*
+ * Function: FPDF_LoadXFA
+ * If the document consists of XFA fields, call this method to
+ * attempt to load XFA fields.
+ * Parameters:
+ * document - Handle to document from FPDF_LoadDocument().
+ * Return Value:
+ * TRUE upon success, otherwise FALSE. If XFA support is not built
+ * into PDFium, performs no action and always returns FALSE.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_LoadXFA(FPDF_DOCUMENT document);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // PUBLIC_FPDF_FORMFILL_H_
diff --git a/src/main/jni/include/fpdf_fwlevent.h b/src/main/cpp/include/fpdf_fwlevent.h
similarity index 75%
rename from src/main/jni/include/fpdf_fwlevent.h
rename to src/main/cpp/include/fpdf_fwlevent.h
index 22c01e42..e61606d3 100644
--- a/src/main/jni/include/fpdf_fwlevent.h
+++ b/src/main/cpp/include/fpdf_fwlevent.h
@@ -1,4 +1,4 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
+// Copyright 2014 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,23 +7,14 @@
#ifndef PUBLIC_FPDF_FWLEVENT_H_
#define PUBLIC_FPDF_FWLEVENT_H_
+// NOLINTNEXTLINE(build/include)
#include "fpdfview.h"
#ifdef __cplusplus
extern "C" {
-#endif
+#endif // __cplusplus
-typedef int FPDF_INT32;
-typedef unsigned int FPDF_UINT32;
-typedef float FPDF_FLOAT;
-// event type
-typedef enum {
- FWL_EVENTTYPE_Mouse = 0,
- FWL_EVENTTYPE_MouseWheel,
- FWL_EVENTTYPE_Key,
-} FWL_EVENTTYPE;
-
-// key flag
+// Key flags.
typedef enum {
FWL_EVENTFLAG_ShiftKey = 1 << 0,
FWL_EVENTFLAG_ControlKey = 1 << 1,
@@ -36,44 +27,11 @@ typedef enum {
FWL_EVENTFLAG_RightButtonDown = 1 << 8,
} FWL_EVENTFLAG;
-// Mouse message command
-typedef enum {
- FWL_EVENTMOUSECMD_LButtonDown = 1,
- FWL_EVENTMOUSECMD_LButtonUp,
- FWL_EVENTMOUSECMD_LButtonDblClk,
- FWL_EVENTMOUSECMD_RButtonDown,
- FWL_EVENTMOUSECMD_RButtonUp,
- FWL_EVENTMOUSECMD_RButtonDblClk,
- FWL_EVENTMOUSECMD_MButtonDown,
- FWL_EVENTMOUSECMD_MButtonUp,
- FWL_EVENTMOUSECMD_MButtonDblClk,
- FWL_EVENTMOUSECMD_MouseMove,
- FWL_EVENTMOUSECMD_MouseEnter,
- FWL_EVENTMOUSECMD_MouseHover,
- FWL_EVENTMOUSECMD_MouseLeave,
-} FWL_EVENT_MOUSECMD;
-
-// mouse event
-struct FWL_EVENT_MOUSE {
- FPDF_UINT32 command;
- FPDF_DWORD flag;
- FPDF_FLOAT x;
- FPDF_FLOAT y;
-};
-
-// mouse wheel
-struct FWL_EVENT_MOUSEWHEEL {
- FPDF_DWORD flag;
- FPDF_FLOAT x;
- FPDF_FLOAT y;
- FPDF_FLOAT deltaX;
- FPDF_FLOAT deltaY;
-};
-
-// virtual keycode
+// Virtual keycodes.
typedef enum {
FWL_VKEY_Back = 0x08,
FWL_VKEY_Tab = 0x09,
+ FWL_VKEY_NewLine = 0x0A,
FWL_VKEY_Clear = 0x0C,
FWL_VKEY_Return = 0x0D,
FWL_VKEY_Shift = 0x10,
@@ -242,40 +200,8 @@ typedef enum {
FWL_VKEY_Unknown = 0,
} FWL_VKEYCODE;
-// key event command
-typedef enum {
- FWL_EVENTKEYCMD_KeyDown = 1,
- FWL_EVENTKEYCMD_KeyUp,
- FWL_EVENTKEYCMD_Char,
-} FWL_EVENTKEYCMD;
-
-// key event
-struct FWL_EVENT_KEY {
- FPDF_UINT32 command;
- FPDF_DWORD flag;
- union {
- // Virtual key code.
- FPDF_UINT32 vkcode;
- // Character code.
- FPDF_DWORD charcode;
- } code;
-};
-
-// event type
-struct FWL_EVENT {
- // structure size.
- FPDF_UINT32 size;
- // FWL_EVENTTYPE.
- FPDF_UINT32 type;
- union {
- struct FWL_EVENT_MOUSE mouse;
- struct FWL_EVENT_MOUSEWHEEL wheel;
- struct FWL_EVENT_KEY key;
- } s;
-};
-
#ifdef __cplusplus
-}
-#endif
+} // extern "C"
+#endif // __cplusplus
#endif // PUBLIC_FPDF_FWLEVENT_H_
diff --git a/src/main/cpp/include/fpdf_javascript.h b/src/main/cpp/include/fpdf_javascript.h
new file mode 100644
index 00000000..2b024056
--- /dev/null
+++ b/src/main/cpp/include/fpdf_javascript.h
@@ -0,0 +1,77 @@
+// Copyright 2019 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PUBLIC_FPDF_JAVASCRIPT_H_
+#define PUBLIC_FPDF_JAVASCRIPT_H_
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// Experimental API.
+// Get the number of JavaScript actions in |document|.
+//
+// document - handle to a document.
+//
+// Returns the number of JavaScript actions in |document| or -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFDoc_GetJavaScriptActionCount(FPDF_DOCUMENT document);
+
+// Experimental API.
+// Get the JavaScript action at |index| in |document|.
+//
+// document - handle to a document.
+// index - the index of the requested JavaScript action.
+//
+// Returns the handle to the JavaScript action, or NULL on failure.
+// Caller owns the returned handle and must close it with
+// FPDFDoc_CloseJavaScriptAction().
+FPDF_EXPORT FPDF_JAVASCRIPT_ACTION FPDF_CALLCONV
+FPDFDoc_GetJavaScriptAction(FPDF_DOCUMENT document, int index);
+
+// Experimental API.
+// Close a loaded FPDF_JAVASCRIPT_ACTION object.
+
+// javascript - Handle to a JavaScript action.
+FPDF_EXPORT void FPDF_CALLCONV
+FPDFDoc_CloseJavaScriptAction(FPDF_JAVASCRIPT_ACTION javascript);
+
+// Experimental API.
+// Get the name from the |javascript| handle. |buffer| is only modified if
+// |buflen| is longer than the length of the name. On errors, |buffer| is
+// unmodified and the returned length is 0.
+//
+// javascript - handle to an JavaScript action.
+// buffer - buffer for holding the name, encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the JavaScript action name in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFJavaScriptAction_GetName(FPDF_JAVASCRIPT_ACTION javascript,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Get the script from the |javascript| handle. |buffer| is only modified if
+// |buflen| is longer than the length of the script. On errors, |buffer| is
+// unmodified and the returned length is 0.
+//
+// javascript - handle to an JavaScript action.
+// buffer - buffer for holding the name, encoded in UTF-16LE.
+// buflen - length of the buffer in bytes.
+//
+// Returns the length of the JavaScript action name in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFJavaScriptAction_GetScript(FPDF_JAVASCRIPT_ACTION javascript,
+ FPDF_WCHAR* buffer,
+ unsigned long buflen);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_JAVASCRIPT_H_
diff --git a/src/main/cpp/include/fpdf_ppo.h b/src/main/cpp/include/fpdf_ppo.h
new file mode 100644
index 00000000..1734bc68
--- /dev/null
+++ b/src/main/cpp/include/fpdf_ppo.h
@@ -0,0 +1,115 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_PPO_H_
+#define PUBLIC_FPDF_PPO_H_
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Experimental API.
+// Import pages to a FPDF_DOCUMENT.
+//
+// dest_doc - The destination document for the pages.
+// src_doc - The document to be imported.
+// page_indices - An array of page indices to be imported. The first page is
+// zero. If |page_indices| is NULL, all pages from |src_doc|
+// are imported.
+// length - The length of the |page_indices| array.
+// index - The page index at which to insert the first imported page
+// into |dest_doc|. The first page is zero.
+//
+// Returns TRUE on success. Returns FALSE if any pages in |page_indices| is
+// invalid.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_ImportPagesByIndex(FPDF_DOCUMENT dest_doc,
+ FPDF_DOCUMENT src_doc,
+ const int* page_indices,
+ unsigned long length,
+ int index);
+
+// Import pages to a FPDF_DOCUMENT.
+//
+// dest_doc - The destination document for the pages.
+// src_doc - The document to be imported.
+// pagerange - A page range string, Such as "1,3,5-7". The first page is one.
+// If |pagerange| is NULL, all pages from |src_doc| are imported.
+// index - The page index at which to insert the first imported page into
+// |dest_doc|. The first page is zero.
+//
+// Returns TRUE on success. Returns FALSE if any pages in |pagerange| is
+// invalid or if |pagerange| cannot be read.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_ImportPages(FPDF_DOCUMENT dest_doc,
+ FPDF_DOCUMENT src_doc,
+ FPDF_BYTESTRING pagerange,
+ int index);
+
+// Experimental API.
+// Create a new document from |src_doc|. The pages of |src_doc| will be
+// combined to provide |num_pages_on_x_axis x num_pages_on_y_axis| pages per
+// |output_doc| page.
+//
+// src_doc - The document to be imported.
+// output_width - The output page width in PDF "user space" units.
+// output_height - The output page height in PDF "user space" units.
+// num_pages_on_x_axis - The number of pages on X Axis.
+// num_pages_on_y_axis - The number of pages on Y Axis.
+//
+// Return value:
+// A handle to the created document, or NULL on failure.
+//
+// Comments:
+// number of pages per page = num_pages_on_x_axis * num_pages_on_y_axis
+//
+FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV
+FPDF_ImportNPagesToOne(FPDF_DOCUMENT src_doc,
+ float output_width,
+ float output_height,
+ size_t num_pages_on_x_axis,
+ size_t num_pages_on_y_axis);
+
+// Experimental API.
+// Create a template to generate form xobjects from |src_doc|'s page at
+// |src_page_index|, for use in |dest_doc|.
+//
+// Returns a handle on success, or NULL on failure. Caller owns the newly
+// created object.
+FPDF_EXPORT FPDF_XOBJECT FPDF_CALLCONV
+FPDF_NewXObjectFromPage(FPDF_DOCUMENT dest_doc,
+ FPDF_DOCUMENT src_doc,
+ int src_page_index);
+
+// Experimental API.
+// Close an FPDF_XOBJECT handle created by FPDF_NewXObjectFromPage().
+// FPDF_PAGEOBJECTs created from the FPDF_XOBJECT handle are not affected.
+FPDF_EXPORT void FPDF_CALLCONV FPDF_CloseXObject(FPDF_XOBJECT xobject);
+
+// Experimental API.
+// Create a new form object from an FPDF_XOBJECT object.
+//
+// Returns a new form object on success, or NULL on failure. Caller owns the
+// newly created object.
+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
+FPDF_NewFormObjectFromXObject(FPDF_XOBJECT xobject);
+
+// Copy the viewer preferences from |src_doc| into |dest_doc|.
+//
+// dest_doc - Document to write the viewer preferences into.
+// src_doc - Document to read the viewer preferences from.
+//
+// Returns TRUE on success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc, FPDF_DOCUMENT src_doc);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_PPO_H_
diff --git a/src/main/cpp/include/fpdf_progressive.h b/src/main/cpp/include/fpdf_progressive.h
new file mode 100644
index 00000000..b146d48c
--- /dev/null
+++ b/src/main/cpp/include/fpdf_progressive.h
@@ -0,0 +1,159 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_PROGRESSIVE_H_
+#define PUBLIC_FPDF_PROGRESSIVE_H_
+
+// clang-format off
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+// Flags for progressive process status.
+#define FPDF_RENDER_READY 0
+#define FPDF_RENDER_TOBECONTINUED 1
+#define FPDF_RENDER_DONE 2
+#define FPDF_RENDER_FAILED 3
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// IFPDF_RENDERINFO interface.
+typedef struct _IFSDK_PAUSE {
+ /*
+ * Version number of the interface. Currently must be 1.
+ */
+ int version;
+
+ /*
+ * Method: NeedToPauseNow
+ * Check if we need to pause a progressive process now.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * Return Value:
+ * Non-zero for pause now, 0 for continue.
+ */
+ FPDF_BOOL (*NeedToPauseNow)(struct _IFSDK_PAUSE* pThis);
+
+ // A user defined data pointer, used by user's application. Can be NULL.
+ void* user;
+} IFSDK_PAUSE;
+
+// Experimental API.
+// Function: FPDF_RenderPageBitmapWithColorScheme_Start
+// Start to render page contents to a device independent bitmap
+// progressively with a specified color scheme for the content.
+// Parameters:
+// bitmap - Handle to the device independent bitmap (as the
+// output buffer). Bitmap handle can be created by
+// FPDFBitmap_Create function.
+// page - Handle to the page as returned by FPDF_LoadPage
+// function.
+// start_x - Left pixel position of the display area in the
+// bitmap coordinate.
+// start_y - Top pixel position of the display area in the
+// bitmap coordinate.
+// size_x - Horizontal size (in pixels) for displaying the
+// page.
+// size_y - Vertical size (in pixels) for displaying the page.
+// rotate - Page orientation: 0 (normal), 1 (rotated 90
+// degrees clockwise), 2 (rotated 180 degrees),
+// 3 (rotated 90 degrees counter-clockwise).
+// flags - 0 for normal display, or combination of flags
+// defined in fpdfview.h. With FPDF_ANNOT flag, it
+// renders all annotations that does not require
+// user-interaction, which are all annotations except
+// widget and popup annotations.
+// color_scheme - Color scheme to be used in rendering the |page|.
+// If null, this function will work similar to
+// FPDF_RenderPageBitmap_Start().
+// pause - The IFSDK_PAUSE interface. A callback mechanism
+// allowing the page rendering process.
+// Return value:
+// Rendering Status. See flags for progressive process status for the
+// details.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_RenderPageBitmapWithColorScheme_Start(FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags,
+ const FPDF_COLORSCHEME* color_scheme,
+ IFSDK_PAUSE* pause);
+
+// Function: FPDF_RenderPageBitmap_Start
+// Start to render page contents to a device independent bitmap
+// progressively.
+// Parameters:
+// bitmap - Handle to the device independent bitmap (as the
+// output buffer). Bitmap handle can be created by
+// FPDFBitmap_Create().
+// page - Handle to the page, as returned by FPDF_LoadPage().
+// start_x - Left pixel position of the display area in the
+// bitmap coordinates.
+// start_y - Top pixel position of the display area in the bitmap
+// coordinates.
+// size_x - Horizontal size (in pixels) for displaying the page.
+// size_y - Vertical size (in pixels) for displaying the page.
+// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees
+// clockwise), 2 (rotated 180 degrees), 3 (rotated 90
+// degrees counter-clockwise).
+// flags - 0 for normal display, or combination of flags
+// defined in fpdfview.h. With FPDF_ANNOT flag, it
+// renders all annotations that does not require
+// user-interaction, which are all annotations except
+// widget and popup annotations.
+// pause - The IFSDK_PAUSE interface.A callback mechanism
+// allowing the page rendering process
+// Return value:
+// Rendering Status. See flags for progressive process status for the
+// details.
+FPDF_EXPORT int FPDF_CALLCONV FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags,
+ IFSDK_PAUSE* pause);
+
+// Function: FPDF_RenderPage_Continue
+// Continue rendering a PDF page.
+// Parameters:
+// page - Handle to the page, as returned by FPDF_LoadPage().
+// pause - The IFSDK_PAUSE interface (a callback mechanism
+// allowing the page rendering process to be paused
+// before it's finished). This can be NULL if you
+// don't want to pause.
+// Return value:
+// The rendering status. See flags for progressive process status for
+// the details.
+FPDF_EXPORT int FPDF_CALLCONV FPDF_RenderPage_Continue(FPDF_PAGE page,
+ IFSDK_PAUSE* pause);
+
+// Function: FPDF_RenderPage_Close
+// Release the resource allocate during page rendering. Need to be
+// called after finishing rendering or
+// cancel the rendering.
+// Parameters:
+// page - Handle to the page, as returned by FPDF_LoadPage().
+// Return value:
+// None.
+FPDF_EXPORT void FPDF_CALLCONV FPDF_RenderPage_Close(FPDF_PAGE page);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // PUBLIC_FPDF_PROGRESSIVE_H_
diff --git a/src/main/jni/include/fpdf_save.h b/src/main/cpp/include/fpdf_save.h
similarity index 67%
rename from src/main/jni/include/fpdf_save.h
rename to src/main/cpp/include/fpdf_save.h
index 4eea054e..800d4e75 100644
--- a/src/main/jni/include/fpdf_save.h
+++ b/src/main/cpp/include/fpdf_save.h
@@ -1,4 +1,4 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
+// Copyright 2014 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,6 +7,8 @@
#ifndef PUBLIC_FPDF_SAVE_H_
#define PUBLIC_FPDF_SAVE_H_
+// clang-format off
+// NOLINTNEXTLINE(build/include)
#include "fpdfview.h"
#ifdef __cplusplus
@@ -20,7 +22,6 @@ typedef struct FPDF_FILEWRITE_ {
//
int version;
- //
// Method: WriteBlock
// Output a block of data in your custom way.
// Interface Version:
@@ -35,50 +36,47 @@ typedef struct FPDF_FILEWRITE_ {
// size - The size of the buffer.
// Return value:
// Should be non-zero if successful, zero for error.
- //
int (*WriteBlock)(struct FPDF_FILEWRITE_* pThis,
const void* pData,
unsigned long size);
-
} FPDF_FILEWRITE;
-/** @brief Incremental. */
+ // Flags for FPDF_SaveAsCopy()
#define FPDF_INCREMENTAL 1
-/** @brief No Incremental. */
#define FPDF_NO_INCREMENTAL 2
-/** @brief Remove security. */
#define FPDF_REMOVE_SECURITY 3
// Function: FPDF_SaveAsCopy
// Saves the copy of specified document in custom way.
// Parameters:
-// document - Handle to document. Returned by
-// FPDF_LoadDocument and FPDF_CreateNewDocument.
+// document - Handle to document, as returned by
+// FPDF_LoadDocument() or FPDF_CreateNewDocument().
// pFileWrite - A pointer to a custom file write structure.
// flags - The creating flags.
// Return value:
// TRUE for succeed, FALSE for failed.
//
-DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy(FPDF_DOCUMENT document,
- FPDF_FILEWRITE* pFileWrite,
- FPDF_DWORD flags);
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_SaveAsCopy(FPDF_DOCUMENT document,
+ FPDF_FILEWRITE* pFileWrite,
+ FPDF_DWORD flags);
// Function: FPDF_SaveWithVersion
-// Same as function ::FPDF_SaveAsCopy, except the file version of the
-// saved document could be specified by user.
+// Same as FPDF_SaveAsCopy(), except the file version of the
+// saved document can be specified by the caller.
// Parameters:
// document - Handle to document.
// pFileWrite - A pointer to a custom file write structure.
// flags - The creating flags.
// fileVersion - The PDF file version. File version: 14 for 1.4,
-// 15 for 1.5, ...
+// 15 for 1.5, ...
// Return value:
// TRUE if succeed, FALSE if failed.
//
-DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document,
- FPDF_FILEWRITE* pFileWrite,
- FPDF_DWORD flags,
- int fileVersion);
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_SaveWithVersion(FPDF_DOCUMENT document,
+ FPDF_FILEWRITE* pFileWrite,
+ FPDF_DWORD flags,
+ int fileVersion);
#ifdef __cplusplus
}
diff --git a/src/main/cpp/include/fpdf_searchex.h b/src/main/cpp/include/fpdf_searchex.h
new file mode 100644
index 00000000..9c980dbe
--- /dev/null
+++ b/src/main/cpp/include/fpdf_searchex.h
@@ -0,0 +1,39 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_SEARCHEX_H_
+#define PUBLIC_FPDF_SEARCHEX_H_
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// Get the character index in |text_page| internal character list.
+//
+// text_page - a text page information structure.
+// nTextIndex - index of the text returned from FPDFText_GetText().
+//
+// Returns the index of the character in internal character list. -1 for error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFText_GetCharIndexFromTextIndex(FPDF_TEXTPAGE text_page, int nTextIndex);
+
+// Get the text index in |text_page| internal character list.
+//
+// text_page - a text page information structure.
+// nCharIndex - index of the character in internal character list.
+//
+// Returns the index of the text returned from FPDFText_GetText(). -1 for error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFText_GetTextIndexFromCharIndex(FPDF_TEXTPAGE text_page, int nCharIndex);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_SEARCHEX_H_
diff --git a/src/main/cpp/include/fpdf_signature.h b/src/main/cpp/include/fpdf_signature.h
new file mode 100644
index 00000000..9a075e5f
--- /dev/null
+++ b/src/main/cpp/include/fpdf_signature.h
@@ -0,0 +1,155 @@
+// Copyright 2020 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PUBLIC_FPDF_SIGNATURE_H_
+#define PUBLIC_FPDF_SIGNATURE_H_
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// Experimental API.
+// Function: FPDF_GetSignatureCount
+// Get total number of signatures in the document.
+// Parameters:
+// document - Handle to document. Returned by FPDF_LoadDocument().
+// Return value:
+// Total number of signatures in the document on success, -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV FPDF_GetSignatureCount(FPDF_DOCUMENT document);
+
+// Experimental API.
+// Function: FPDF_GetSignatureObject
+// Get the Nth signature of the document.
+// Parameters:
+// document - Handle to document. Returned by FPDF_LoadDocument().
+// index - Index into the array of signatures of the document.
+// Return value:
+// Returns the handle to the signature, or NULL on failure. The caller
+// does not take ownership of the returned FPDF_SIGNATURE. Instead, it
+// remains valid until FPDF_CloseDocument() is called for the document.
+FPDF_EXPORT FPDF_SIGNATURE FPDF_CALLCONV
+FPDF_GetSignatureObject(FPDF_DOCUMENT document, int index);
+
+// Experimental API.
+// Function: FPDFSignatureObj_GetContents
+// Get the contents of a signature object.
+// Parameters:
+// signature - Handle to the signature object. Returned by
+// FPDF_GetSignatureObject().
+// buffer - The address of a buffer that receives the contents.
+// length - The size, in bytes, of |buffer|.
+// Return value:
+// Returns the number of bytes in the contents on success, 0 on error.
+//
+// For public-key signatures, |buffer| is either a DER-encoded PKCS#1 binary or
+// a DER-encoded PKCS#7 binary. If |length| is less than the returned length, or
+// |buffer| is NULL, |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFSignatureObj_GetContents(FPDF_SIGNATURE signature,
+ void* buffer,
+ unsigned long length);
+
+// Experimental API.
+// Function: FPDFSignatureObj_GetByteRange
+// Get the byte range of a signature object.
+// Parameters:
+// signature - Handle to the signature object. Returned by
+// FPDF_GetSignatureObject().
+// buffer - The address of a buffer that receives the
+// byte range.
+// length - The size, in ints, of |buffer|.
+// Return value:
+// Returns the number of ints in the byte range on
+// success, 0 on error.
+//
+// |buffer| is an array of pairs of integers (starting byte offset,
+// length in bytes) that describes the exact byte range for the digest
+// calculation. If |length| is less than the returned length, or
+// |buffer| is NULL, |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFSignatureObj_GetByteRange(FPDF_SIGNATURE signature,
+ int* buffer,
+ unsigned long length);
+
+// Experimental API.
+// Function: FPDFSignatureObj_GetSubFilter
+// Get the encoding of the value of a signature object.
+// Parameters:
+// signature - Handle to the signature object. Returned by
+// FPDF_GetSignatureObject().
+// buffer - The address of a buffer that receives the encoding.
+// length - The size, in bytes, of |buffer|.
+// Return value:
+// Returns the number of bytes in the encoding name (including the
+// trailing NUL character) on success, 0 on error.
+//
+// The |buffer| is always encoded in 7-bit ASCII. If |length| is less than the
+// returned length, or |buffer| is NULL, |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFSignatureObj_GetSubFilter(FPDF_SIGNATURE signature,
+ char* buffer,
+ unsigned long length);
+
+// Experimental API.
+// Function: FPDFSignatureObj_GetReason
+// Get the reason (comment) of the signature object.
+// Parameters:
+// signature - Handle to the signature object. Returned by
+// FPDF_GetSignatureObject().
+// buffer - The address of a buffer that receives the reason.
+// length - The size, in bytes, of |buffer|.
+// Return value:
+// Returns the number of bytes in the reason on success, 0 on error.
+//
+// Regardless of the platform, the |buffer| is always in UTF-16LE encoding. The
+// string is terminated by a UTF16 NUL character. If |length| is less than the
+// returned length, or |buffer| is NULL, |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFSignatureObj_GetReason(FPDF_SIGNATURE signature,
+ void* buffer,
+ unsigned long length);
+
+// Experimental API.
+// Function: FPDFSignatureObj_GetTime
+// Get the time of signing of a signature object.
+// Parameters:
+// signature - Handle to the signature object. Returned by
+// FPDF_GetSignatureObject().
+// buffer - The address of a buffer that receives the time.
+// length - The size, in bytes, of |buffer|.
+// Return value:
+// Returns the number of bytes in the encoding name (including the
+// trailing NUL character) on success, 0 on error.
+//
+// The |buffer| is always encoded in 7-bit ASCII. If |length| is less than the
+// returned length, or |buffer| is NULL, |buffer| will not be modified.
+//
+// The format of time is expected to be D:YYYYMMDDHHMMSS+XX'YY', i.e. it's
+// percision is seconds, with timezone information. This value should be used
+// only when the time of signing is not available in the (PKCS#7 binary)
+// signature.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFSignatureObj_GetTime(FPDF_SIGNATURE signature,
+ char* buffer,
+ unsigned long length);
+
+// Experimental API.
+// Function: FPDFSignatureObj_GetDocMDPPermission
+// Get the DocMDP permission of a signature object.
+// Parameters:
+// signature - Handle to the signature object. Returned by
+// FPDF_GetSignatureObject().
+// Return value:
+// Returns the permission (1, 2 or 3) on success, 0 on error.
+FPDF_EXPORT unsigned int FPDF_CALLCONV
+FPDFSignatureObj_GetDocMDPPermission(FPDF_SIGNATURE signature);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // PUBLIC_FPDF_SIGNATURE_H_
diff --git a/src/main/cpp/include/fpdf_structtree.h b/src/main/cpp/include/fpdf_structtree.h
new file mode 100644
index 00000000..69c5f672
--- /dev/null
+++ b/src/main/cpp/include/fpdf_structtree.h
@@ -0,0 +1,471 @@
+// Copyright 2016 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_STRUCTTREE_H_
+#define PUBLIC_FPDF_STRUCTTREE_H_
+
+// clang-format off
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Function: FPDF_StructTree_GetForPage
+// Get the structure tree for a page.
+// Parameters:
+// page - Handle to the page, as returned by FPDF_LoadPage().
+// Return value:
+// A handle to the structure tree or NULL on error.
+FPDF_EXPORT FPDF_STRUCTTREE FPDF_CALLCONV
+FPDF_StructTree_GetForPage(FPDF_PAGE page);
+
+// Function: FPDF_StructTree_Close
+// Release a resource allocated by FPDF_StructTree_GetForPage().
+// Parameters:
+// struct_tree - Handle to the structure tree, as returned by
+// FPDF_StructTree_LoadPage().
+// Return value:
+// None.
+FPDF_EXPORT void FPDF_CALLCONV
+FPDF_StructTree_Close(FPDF_STRUCTTREE struct_tree);
+
+// Function: FPDF_StructTree_CountChildren
+// Count the number of children for the structure tree.
+// Parameters:
+// struct_tree - Handle to the structure tree, as returned by
+// FPDF_StructTree_LoadPage().
+// Return value:
+// The number of children, or -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_StructTree_CountChildren(FPDF_STRUCTTREE struct_tree);
+
+// Function: FPDF_StructTree_GetChildAtIndex
+// Get a child in the structure tree.
+// Parameters:
+// struct_tree - Handle to the structure tree, as returned by
+// FPDF_StructTree_LoadPage().
+// index - The index for the child, 0-based.
+// Return value:
+// The child at the n-th index or NULL on error.
+FPDF_EXPORT FPDF_STRUCTELEMENT FPDF_CALLCONV
+FPDF_StructTree_GetChildAtIndex(FPDF_STRUCTTREE struct_tree, int index);
+
+// Function: FPDF_StructElement_GetAltText
+// Get the alt text for a given element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// buffer - A buffer for output the alt text. May be NULL.
+// buflen - The length of the buffer, in bytes. May be 0.
+// Return value:
+// The number of bytes in the alt text, including the terminating NUL
+// character. The number of bytes is returned regardless of the
+// |buffer| and |buflen| parameters.
+// Comments:
+// Regardless of the platform, the |buffer| is always in UTF-16LE
+// encoding. The string is terminated by a UTF16 NUL character. If
+// |buflen| is less than the required length, or |buffer| is NULL,
+// |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_StructElement_GetAltText(FPDF_STRUCTELEMENT struct_element,
+ void* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Function: FPDF_StructElement_GetActualText
+// Get the actual text for a given element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// buffer - A buffer for output the actual text. May be NULL.
+// buflen - The length of the buffer, in bytes. May be 0.
+// Return value:
+// The number of bytes in the actual text, including the terminating
+// NUL character. The number of bytes is returned regardless of the
+// |buffer| and |buflen| parameters.
+// Comments:
+// Regardless of the platform, the |buffer| is always in UTF-16LE
+// encoding. The string is terminated by a UTF16 NUL character. If
+// |buflen| is less than the required length, or |buffer| is NULL,
+// |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_StructElement_GetActualText(FPDF_STRUCTELEMENT struct_element,
+ void* buffer,
+ unsigned long buflen);
+
+// Function: FPDF_StructElement_GetID
+// Get the ID for a given element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// buffer - A buffer for output the ID string. May be NULL.
+// buflen - The length of the buffer, in bytes. May be 0.
+// Return value:
+// The number of bytes in the ID string, including the terminating NUL
+// character. The number of bytes is returned regardless of the
+// |buffer| and |buflen| parameters.
+// Comments:
+// Regardless of the platform, the |buffer| is always in UTF-16LE
+// encoding. The string is terminated by a UTF16 NUL character. If
+// |buflen| is less than the required length, or |buffer| is NULL,
+// |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_StructElement_GetID(FPDF_STRUCTELEMENT struct_element,
+ void* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Function: FPDF_StructElement_GetLang
+// Get the case-insensitive IETF BCP 47 language code for an element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// buffer - A buffer for output the lang string. May be NULL.
+// buflen - The length of the buffer, in bytes. May be 0.
+// Return value:
+// The number of bytes in the ID string, including the terminating NUL
+// character. The number of bytes is returned regardless of the
+// |buffer| and |buflen| parameters.
+// Comments:
+// Regardless of the platform, the |buffer| is always in UTF-16LE
+// encoding. The string is terminated by a UTF16 NUL character. If
+// |buflen| is less than the required length, or |buffer| is NULL,
+// |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_StructElement_GetLang(FPDF_STRUCTELEMENT struct_element,
+ void* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Function: FPDF_StructElement_GetStringAttribute
+// Get a struct element attribute of type "name" or "string".
+// Parameters:
+// struct_element - Handle to the struct element.
+// attr_name - The name of the attribute to retrieve.
+// buffer - A buffer for output. May be NULL.
+// buflen - The length of the buffer, in bytes. May be 0.
+// Return value:
+// The number of bytes in the attribute value, including the
+// terminating NUL character. The number of bytes is returned
+// regardless of the |buffer| and |buflen| parameters.
+// Comments:
+// Regardless of the platform, the |buffer| is always in UTF-16LE
+// encoding. The string is terminated by a UTF16 NUL character. If
+// |buflen| is less than the required length, or |buffer| is NULL,
+// |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_StructElement_GetStringAttribute(FPDF_STRUCTELEMENT struct_element,
+ FPDF_BYTESTRING attr_name,
+ void* buffer,
+ unsigned long buflen);
+
+// Function: FPDF_StructElement_GetMarkedContentID
+// Get the marked content ID for a given element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// Return value:
+// The marked content ID of the element. If no ID exists, returns
+// -1.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_StructElement_GetMarkedContentID(FPDF_STRUCTELEMENT struct_element);
+
+// Function: FPDF_StructElement_GetType
+// Get the type (/S) for a given element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// buffer - A buffer for output. May be NULL.
+// buflen - The length of the buffer, in bytes. May be 0.
+// Return value:
+// The number of bytes in the type, including the terminating NUL
+// character. The number of bytes is returned regardless of the
+// |buffer| and |buflen| parameters.
+// Comments:
+// Regardless of the platform, the |buffer| is always in UTF-16LE
+// encoding. The string is terminated by a UTF16 NUL character. If
+// |buflen| is less than the required length, or |buffer| is NULL,
+// |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_StructElement_GetType(FPDF_STRUCTELEMENT struct_element,
+ void* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Function: FPDF_StructElement_GetObjType
+// Get the object type (/Type) for a given element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// buffer - A buffer for output. May be NULL.
+// buflen - The length of the buffer, in bytes. May be 0.
+// Return value:
+// The number of bytes in the object type, including the terminating
+// NUL character. The number of bytes is returned regardless of the
+// |buffer| and |buflen| parameters.
+// Comments:
+// Regardless of the platform, the |buffer| is always in UTF-16LE
+// encoding. The string is terminated by a UTF16 NUL character. If
+// |buflen| is less than the required length, or |buffer| is NULL,
+// |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_StructElement_GetObjType(FPDF_STRUCTELEMENT struct_element,
+ void* buffer,
+ unsigned long buflen);
+
+// Function: FPDF_StructElement_GetTitle
+// Get the title (/T) for a given element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// buffer - A buffer for output. May be NULL.
+// buflen - The length of the buffer, in bytes. May be 0.
+// Return value:
+// The number of bytes in the title, including the terminating NUL
+// character. The number of bytes is returned regardless of the
+// |buffer| and |buflen| parameters.
+// Comments:
+// Regardless of the platform, the |buffer| is always in UTF-16LE
+// encoding. The string is terminated by a UTF16 NUL character. If
+// |buflen| is less than the required length, or |buffer| is NULL,
+// |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_StructElement_GetTitle(FPDF_STRUCTELEMENT struct_element,
+ void* buffer,
+ unsigned long buflen);
+
+// Function: FPDF_StructElement_CountChildren
+// Count the number of children for the structure element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// Return value:
+// The number of children, or -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_StructElement_CountChildren(FPDF_STRUCTELEMENT struct_element);
+
+// Function: FPDF_StructElement_GetChildAtIndex
+// Get a child in the structure element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// index - The index for the child, 0-based.
+// Return value:
+// The child at the n-th index or NULL on error.
+// Comments:
+// If the child exists but is not an element, then this function will
+// return NULL. This will also return NULL for out of bounds indices.
+FPDF_EXPORT FPDF_STRUCTELEMENT FPDF_CALLCONV
+FPDF_StructElement_GetChildAtIndex(FPDF_STRUCTELEMENT struct_element,
+ int index);
+
+// Experimental API.
+// Function: FPDF_StructElement_GetChildMarkedContentID
+// Get the child's content id
+// Parameters:
+// struct_element - Handle to the struct element.
+// index - The index for the child, 0-based.
+// Return value:
+// The marked content ID of the child. If no ID exists, returns -1.
+// Comments:
+// If the child exists but is not a stream or object, then this
+// function will return -1. This will also return -1 for out of bounds
+// indices. Compared to FPDF_StructElement_GetMarkedContentIdAtIndex,
+// it is scoped to the current page.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_StructElement_GetChildMarkedContentID(FPDF_STRUCTELEMENT struct_element,
+ int index);
+
+// Experimental API.
+// Function: FPDF_StructElement_GetParent
+// Get the parent of the structure element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// Return value:
+// The parent structure element or NULL on error.
+// Comments:
+// If structure element is StructTreeRoot, then this function will
+// return NULL.
+FPDF_EXPORT FPDF_STRUCTELEMENT FPDF_CALLCONV
+FPDF_StructElement_GetParent(FPDF_STRUCTELEMENT struct_element);
+
+// Function: FPDF_StructElement_GetAttributeCount
+// Count the number of attributes for the structure element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// Return value:
+// The number of attributes, or -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_StructElement_GetAttributeCount(FPDF_STRUCTELEMENT struct_element);
+
+// Experimental API.
+// Function: FPDF_StructElement_GetAttributeAtIndex
+// Get an attribute object in the structure element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// index - The index for the attribute object, 0-based.
+// Return value:
+// The attribute object at the n-th index or NULL on error.
+// Comments:
+// If the attribute object exists but is not a dict, then this
+// function will return NULL. This will also return NULL for out of
+// bounds indices.
+FPDF_EXPORT FPDF_STRUCTELEMENT_ATTR FPDF_CALLCONV
+FPDF_StructElement_GetAttributeAtIndex(FPDF_STRUCTELEMENT struct_element, int index);
+
+// Experimental API.
+// Function: FPDF_StructElement_Attr_GetCount
+// Count the number of attributes in a structure element attribute map.
+// Parameters:
+// struct_attribute - Handle to the struct element attribute.
+// Return value:
+// The number of attributes, or -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_StructElement_Attr_GetCount(FPDF_STRUCTELEMENT_ATTR struct_attribute);
+
+
+// Experimental API.
+// Function: FPDF_StructElement_Attr_GetName
+// Get the name of an attribute in a structure element attribute map.
+// Parameters:
+// struct_attribute - Handle to the struct element attribute.
+// index - The index of attribute in the map.
+// buffer - A buffer for output. May be NULL. This is only
+// modified if |buflen| is longer than the length
+// of the key. Optional, pass null to just
+// retrieve the size of the buffer needed.
+// buflen - The length of the buffer.
+// out_buflen - A pointer to variable that will receive the
+// minimum buffer size to contain the key. Not
+// filled if FALSE is returned.
+// Return value:
+// TRUE if the operation was successful, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_StructElement_Attr_GetName(FPDF_STRUCTELEMENT_ATTR struct_attribute,
+ int index,
+ void* buffer,
+ unsigned long buflen,
+ unsigned long* out_buflen);
+
+// Experimental API.
+// Function: FPDF_StructElement_Attr_GetType
+// Get the type of an attribute in a structure element attribute map.
+// Parameters:
+// struct_attribute - Handle to the struct element attribute.
+// name - The attribute name.
+// Return value:
+// Returns the type of the value, or FPDF_OBJECT_UNKNOWN in case of
+// failure.
+FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
+FPDF_StructElement_Attr_GetType(FPDF_STRUCTELEMENT_ATTR struct_attribute,
+ FPDF_BYTESTRING name);
+
+// Experimental API.
+// Function: FPDF_StructElement_Attr_GetBooleanValue
+// Get the value of a boolean attribute in an attribute map by name as
+// FPDF_BOOL. FPDF_StructElement_Attr_GetType() should have returned
+// FPDF_OBJECT_BOOLEAN for this property.
+// Parameters:
+// struct_attribute - Handle to the struct element attribute.
+// name - The attribute name.
+// out_value - A pointer to variable that will receive the
+// value. Not filled if false is returned.
+// Return value:
+// Returns TRUE if the name maps to a boolean value, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_StructElement_Attr_GetBooleanValue(
+ FPDF_STRUCTELEMENT_ATTR struct_attribute,
+ FPDF_BYTESTRING name,
+ FPDF_BOOL* out_value);
+
+// Experimental API.
+// Function: FPDF_StructElement_Attr_GetNumberValue
+// Get the value of a number attribute in an attribute map by name as
+// float. FPDF_StructElement_Attr_GetType() should have returned
+// FPDF_OBJECT_NUMBER for this property.
+// Parameters:
+// struct_attribute - Handle to the struct element attribute.
+// name - The attribute name.
+// out_value - A pointer to variable that will receive the
+// value. Not filled if false is returned.
+// Return value:
+// Returns TRUE if the name maps to a number value, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_StructElement_Attr_GetNumberValue(FPDF_STRUCTELEMENT_ATTR struct_attribute,
+ FPDF_BYTESTRING name,
+ float* out_value);
+
+// Experimental API.
+// Function: FPDF_StructElement_Attr_GetStringValue
+// Get the value of a string attribute in an attribute map by name as
+// string. FPDF_StructElement_Attr_GetType() should have returned
+// FPDF_OBJECT_STRING or FPDF_OBJECT_NAME for this property.
+// Parameters:
+// struct_attribute - Handle to the struct element attribute.
+// name - The attribute name.
+// buffer - A buffer for holding the returned key in
+// UTF-16LE. This is only modified if |buflen| is
+// longer than the length of the key. Optional,
+// pass null to just retrieve the size of the
+// buffer needed.
+// buflen - The length of the buffer.
+// out_buflen - A pointer to variable that will receive the
+// minimum buffer size to contain the key. Not
+// filled if FALSE is returned.
+// Return value:
+// Returns TRUE if the name maps to a string value, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_StructElement_Attr_GetStringValue(FPDF_STRUCTELEMENT_ATTR struct_attribute,
+ FPDF_BYTESTRING name,
+ void* buffer,
+ unsigned long buflen,
+ unsigned long* out_buflen);
+
+// Experimental API.
+// Function: FPDF_StructElement_Attr_GetBlobValue
+// Get the value of a blob attribute in an attribute map by name as
+// string.
+// Parameters:
+// struct_attribute - Handle to the struct element attribute.
+// name - The attribute name.
+// buffer - A buffer for holding the returned value. This
+// is only modified if |buflen| is at least as
+// long as the length of the value. Optional, pass
+// null to just retrieve the size of the buffer
+// needed.
+// buflen - The length of the buffer.
+// out_buflen - A pointer to variable that will receive the
+// minimum buffer size to contain the key. Not
+// filled if FALSE is returned.
+// Return value:
+// Returns TRUE if the name maps to a string value, FALSE otherwise.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_StructElement_Attr_GetBlobValue(FPDF_STRUCTELEMENT_ATTR struct_attribute,
+ FPDF_BYTESTRING name,
+ void* buffer,
+ unsigned long buflen,
+ unsigned long* out_buflen);
+
+// Experimental API.
+// Function: FPDF_StructElement_GetMarkedContentIdCount
+// Get the count of marked content ids for a given element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// Return value:
+// The count of marked content ids or -1 if none exists.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_StructElement_GetMarkedContentIdCount(FPDF_STRUCTELEMENT struct_element);
+
+// Experimental API.
+// Function: FPDF_StructElement_GetMarkedContentIdAtIndex
+// Get the marked content id at a given index for a given element.
+// Parameters:
+// struct_element - Handle to the struct element.
+// index - The index of the marked content id, 0-based.
+// Return value:
+// The marked content ID of the element. If no ID exists, returns
+// -1.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_StructElement_GetMarkedContentIdAtIndex(FPDF_STRUCTELEMENT struct_element,
+ int index);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // PUBLIC_FPDF_STRUCTTREE_H_
diff --git a/src/main/jni/include/fpdf_sysfontinfo.h b/src/main/cpp/include/fpdf_sysfontinfo.h
similarity index 66%
rename from src/main/jni/include/fpdf_sysfontinfo.h
rename to src/main/cpp/include/fpdf_sysfontinfo.h
index c2da74b7..0ba711db 100644
--- a/src/main/jni/include/fpdf_sysfontinfo.h
+++ b/src/main/cpp/include/fpdf_sysfontinfo.h
@@ -1,4 +1,4 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
+// Copyright 2014 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,6 +7,8 @@
#ifndef PUBLIC_FPDF_SYSFONTINFO_H_
#define PUBLIC_FPDF_SYSFONTINFO_H_
+// clang-format off
+// NOLINTNEXTLINE(build/include)
#include "fpdfview.h"
/* Character sets for the font */
@@ -17,9 +19,16 @@
#define FXFONT_HANGEUL_CHARSET 129
#define FXFONT_GB2312_CHARSET 134
#define FXFONT_CHINESEBIG5_CHARSET 136
+#define FXFONT_GREEK_CHARSET 161
+#define FXFONT_VIETNAMESE_CHARSET 163
+#define FXFONT_HEBREW_CHARSET 177
+#define FXFONT_ARABIC_CHARSET 178
+#define FXFONT_CYRILLIC_CHARSET 204
+#define FXFONT_THAI_CHARSET 222
+#define FXFONT_EASTERNEUROPEAN_CHARSET 238
/* Font pitch and family flags */
-#define FXFONT_FF_FIXEDPITCH 1
+#define FXFONT_FF_FIXEDPITCH (1 << 0)
#define FXFONT_FF_ROMAN (1 << 4)
#define FXFONT_FF_SCRIPT (4 << 4)
@@ -32,87 +41,84 @@
extern "C" {
#endif
-/**
+/*
* Interface: FPDF_SYSFONTINFO
* Interface for getting system font information and font mapping
*/
typedef struct _FPDF_SYSFONTINFO {
- /**
+ /*
* Version number of the interface. Currently must be 1.
- **/
+ */
int version;
- /**
+ /*
* Method: Release
* Give implementation a chance to release any data after the
- * interface is no longer used
+ * interface is no longer used.
* Interface Version:
* 1
* Implementation Required:
* No
- * Comments:
- * Called by Foxit SDK during the final cleanup process.
* Parameters:
* pThis - Pointer to the interface structure itself
* Return Value:
* None
+ * Comments:
+ * Called by PDFium during the final cleanup process.
*/
void (*Release)(struct _FPDF_SYSFONTINFO* pThis);
- /**
+ /*
* Method: EnumFonts
* Enumerate all fonts installed on the system
* Interface Version:
* 1
* Implementation Required:
* No
- * Comments:
- * Implementation should call FPDF_AddIntalledFont() function for
- * each font found.
- * Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
* Parameters:
* pThis - Pointer to the interface structure itself
* pMapper - An opaque pointer to internal font mapper, used
- * when calling FPDF_AddInstalledFont
+ * when calling FPDF_AddInstalledFont().
* Return Value:
* None
+ * Comments:
+ * Implementations should call FPDF_AddIntalledFont() function for
+ * each font found. Only TrueType/OpenType and Type1 fonts are accepted
+ * by PDFium.
*/
void (*EnumFonts)(struct _FPDF_SYSFONTINFO* pThis, void* pMapper);
- /**
+ /*
* Method: MapFont
* Use the system font mapper to get a font handle from requested
- *parameters
+ * parameters.
* Interface Version:
* 1
* Implementation Required:
- * Yes only if GetFont method is not implemented.
- * Comments:
- * If the system supports native font mapper (like Windows),
- *implementation can implement this method to get a font handle.
- * Otherwise, Foxit SDK will do the mapping and then call GetFont
- *method.
- * Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
+ * Required if GetFont method is not implemented.
* Parameters:
* pThis - Pointer to the interface structure itself
* weight - Weight of the requested font. 400 is normal and
- *700 is bold.
+ * 700 is bold.
* bItalic - Italic option of the requested font, TRUE or
- *FALSE.
+ * FALSE.
* charset - Character set identifier for the requested font.
- *See above defined constants.
+ * See above defined constants.
* pitch_family - A combination of flags. See above defined
- *constants.
+ * constants.
* face - Typeface name. Currently use system local encoding
- *only.
- * bExact - Pointer to a boolean value receiving the indicator
- *whether mapper found the exact match.
- * If mapper is not sure whether it's exact match,
- *ignore this paramter.
+ * only.
+ * bExact - Obsolete: this parameter is now ignored.
* Return Value:
* An opaque pointer for font handle, or NULL if system mapping is
- *not supported.
- **/
+ * not supported.
+ * Comments:
+ * If the system supports native font mapper (like Windows),
+ * implementation can implement this method to get a font handle.
+ * Otherwise, PDFium will do the mapping and then call GetFont
+ * method. Only TrueType/OpenType and Type1 fonts are accepted
+ * by PDFium.
+ */
void* (*MapFont)(struct _FPDF_SYSFONTINFO* pThis,
int weight,
FPDF_BOOL bItalic,
@@ -121,56 +127,53 @@ typedef struct _FPDF_SYSFONTINFO {
const char* face,
FPDF_BOOL* bExact);
- /**
+ /*
* Method: GetFont
* Get a handle to a particular font by its internal ID
* Interface Version:
* 1
* Implementation Required:
- * Yes only if MapFont method is not implemented.
- * Comments:
- * If the system mapping not supported, Foxit SDK will do the font
- *mapping and use this method to get a font handle.
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * face - Typeface name. Currently use system local encoding
- *only.
+ * Required if MapFont method is not implemented.
* Return Value:
* An opaque pointer for font handle.
- **/
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * face - Typeface name in system local encoding.
+ * Comments:
+ * If the system mapping not supported, PDFium will do the font
+ * mapping and use this method to get a font handle.
+ */
void* (*GetFont)(struct _FPDF_SYSFONTINFO* pThis, const char* face);
- /**
+ /*
* Method: GetFontData
* Get font data from a font
* Interface Version:
* 1
* Implementation Required:
* Yes
- * Comments:
- * Can read either full font file, or a particular TrueType/OpenType
- *table
* Parameters:
* pThis - Pointer to the interface structure itself
* hFont - Font handle returned by MapFont or GetFont method
* table - TrueType/OpenType table identifier (refer to
- *TrueType specification).
- * 0 for the whole font file.
+ * TrueType specification), or 0 for the whole file.
* buffer - The buffer receiving the font data. Can be NULL if
- *not provided
- * buf_size - Buffer size, can be zero if not provided
+ * not provided.
+ * buf_size - Buffer size, can be zero if not provided.
* Return Value:
* Number of bytes needed, if buffer not provided or not large
- *enough,
- * or number of bytes written into buffer otherwise.
- **/
+ * enough, or number of bytes written into buffer otherwise.
+ * Comments:
+ * Can read either the full font file, or a particular
+ * TrueType/OpenType table.
+ */
unsigned long (*GetFontData)(struct _FPDF_SYSFONTINFO* pThis,
void* hFont,
unsigned int table,
unsigned char* buffer,
unsigned long buf_size);
- /**
+ /*
* Method: GetFaceName
* Get face name from a font handle
* Interface Version:
@@ -181,19 +184,18 @@ typedef struct _FPDF_SYSFONTINFO {
* pThis - Pointer to the interface structure itself
* hFont - Font handle returned by MapFont or GetFont method
* buffer - The buffer receiving the face name. Can be NULL if
- *not provided
+ * not provided
* buf_size - Buffer size, can be zero if not provided
* Return Value:
* Number of bytes needed, if buffer not provided or not large
- *enough,
- * or number of bytes written into buffer otherwise.
- **/
+ * enough, or number of bytes written into buffer otherwise.
+ */
unsigned long (*GetFaceName)(struct _FPDF_SYSFONTINFO* pThis,
void* hFont,
char* buffer,
unsigned long buf_size);
- /**
+ /*
* Method: GetFontCharset
* Get character set information for a font handle
* Interface Version:
@@ -205,10 +207,10 @@ typedef struct _FPDF_SYSFONTINFO {
* hFont - Font handle returned by MapFont or GetFont method
* Return Value:
* Character set identifier. See defined constants above.
- **/
+ */
int (*GetFontCharset)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
- /**
+ /*
* Method: DeleteFont
* Delete a font handle
* Interface Version:
@@ -220,20 +222,20 @@ typedef struct _FPDF_SYSFONTINFO {
* hFont - Font handle returned by MapFont or GetFont method
* Return Value:
* None
- **/
+ */
void (*DeleteFont)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
} FPDF_SYSFONTINFO;
-/**
+/*
* Struct: FPDF_CharsetFontMap
* Provides the name of a font to use for a given charset value.
- **/
+ */
typedef struct FPDF_CharsetFontMap_ {
int charset; // Character Set Enum value, see FXFONT_*_CHARSET above.
const char* fontname; // Name of default font to use with that charset.
} FPDF_CharsetFontMap;
-/**
+/*
* Function: FPDF_GetDefaultTTFMap
* Returns a pointer to the default character set to TT Font name map. The
* map is an array of FPDF_CharsetFontMap structs, with its end indicated
@@ -242,58 +244,74 @@ typedef struct FPDF_CharsetFontMap_ {
* None.
* Return Value:
* Pointer to the Charset Font Map.
- **/
-DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap();
+ */
+FPDF_EXPORT const FPDF_CharsetFontMap* FPDF_CALLCONV FPDF_GetDefaultTTFMap();
-/**
+/*
* Function: FPDF_AddInstalledFont
- * Add a system font to the list in Foxit SDK.
+ * Add a system font to the list in PDFium.
* Comments:
* This function is only called during the system font list building
- *process.
+ * process.
* Parameters:
* mapper - Opaque pointer to Foxit font mapper
* face - The font face name
* charset - Font character set. See above defined constants.
* Return Value:
* None.
- **/
-DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper,
- const char* face,
- int charset);
+ */
+FPDF_EXPORT void FPDF_CALLCONV FPDF_AddInstalledFont(void* mapper,
+ const char* face,
+ int charset);
-/**
+/*
* Function: FPDF_SetSystemFontInfo
- * Set the system font info interface into Foxit SDK
- * Comments:
- * Platform support implementation should implement required methods of
- *FFDF_SYSFONTINFO interface,
- * then call this function during SDK initialization process.
+ * Set the system font info interface into PDFium
* Parameters:
* pFontInfo - Pointer to a FPDF_SYSFONTINFO structure
* Return Value:
* None
- **/
-DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
+ * Comments:
+ * Platform support implementation should implement required methods of
+ * FFDF_SYSFONTINFO interface, then call this function during PDFium
+ * initialization process.
+ *
+ * Call this with NULL to tell PDFium to stop using a previously set
+ * |FPDF_SYSFONTINFO|.
+ */
+FPDF_EXPORT void FPDF_CALLCONV
+FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
-/**
+/*
* Function: FPDF_GetDefaultSystemFontInfo
* Get default system font info interface for current platform
- * Comments:
- * For some platforms Foxit SDK implement a default version of system
- *font info interface.
- * The default implementation can be used in FPDF_SetSystemFontInfo
- *function.
* Parameters:
* None
* Return Value:
* Pointer to a FPDF_SYSFONTINFO structure describing the default
- *interface.
- * Or NULL if the platform doesn't have a default interface.
- * Application should call FPDF_FreeMemory to free the returned
- *pointer.
- **/
-DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo();
+ * interface, or NULL if the platform doesn't have a default interface.
+ * Application should call FPDF_FreeDefaultSystemFontInfo to free the
+ * returned pointer.
+ * Comments:
+ * For some platforms, PDFium implements a default version of system
+ * font info interface. The default implementation can be passed to
+ * FPDF_SetSystemFontInfo().
+ */
+FPDF_EXPORT FPDF_SYSFONTINFO* FPDF_CALLCONV FPDF_GetDefaultSystemFontInfo();
+
+/*
+ * Function: FPDF_FreeDefaultSystemFontInfo
+ * Free a default system font info interface
+ * Parameters:
+ * pFontInfo - Pointer to a FPDF_SYSFONTINFO structure
+ * Return Value:
+ * None
+ * Comments:
+ * This function should be called on the output from
+ * FPDF_GetDefaultSystemFontInfo() once it is no longer needed.
+ */
+FPDF_EXPORT void FPDF_CALLCONV
+FPDF_FreeDefaultSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
#ifdef __cplusplus
}
diff --git a/src/main/cpp/include/fpdf_text.h b/src/main/cpp/include/fpdf_text.h
new file mode 100644
index 00000000..bd25ba44
--- /dev/null
+++ b/src/main/cpp/include/fpdf_text.h
@@ -0,0 +1,687 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_TEXT_H_
+#define PUBLIC_FPDF_TEXT_H_
+
+// clang-format off
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+// Exported Functions
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Function: FPDFText_LoadPage
+// Prepare information about all characters in a page.
+// Parameters:
+// page - Handle to the page. Returned by FPDF_LoadPage function
+// (in FPDFVIEW module).
+// Return value:
+// A handle to the text page information structure.
+// NULL if something goes wrong.
+// Comments:
+// Application must call FPDFText_ClosePage to release the text page
+// information.
+//
+FPDF_EXPORT FPDF_TEXTPAGE FPDF_CALLCONV FPDFText_LoadPage(FPDF_PAGE page);
+
+// Function: FPDFText_ClosePage
+// Release all resources allocated for a text page information
+// structure.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// Return Value:
+// None.
+//
+FPDF_EXPORT void FPDF_CALLCONV FPDFText_ClosePage(FPDF_TEXTPAGE text_page);
+
+// Function: FPDFText_CountChars
+// Get number of characters in a page.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// Return value:
+// Number of characters in the page. Return -1 for error.
+// Generated characters, like additional space characters, new line
+// characters, are also counted.
+// Comments:
+// Characters in a page form a "stream", inside the stream, each
+// character has an index.
+// We will use the index parameters in many of FPDFTEXT functions. The
+// first character in the page
+// has an index value of zero.
+//
+FPDF_EXPORT int FPDF_CALLCONV FPDFText_CountChars(FPDF_TEXTPAGE text_page);
+
+// Function: FPDFText_GetUnicode
+// Get Unicode of a character in a page.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// Return value:
+// The Unicode of the particular character.
+// If a character is not encoded in Unicode and Foxit engine can't
+// convert to Unicode,
+// the return value will be zero.
+//
+FPDF_EXPORT unsigned int FPDF_CALLCONV
+FPDFText_GetUnicode(FPDF_TEXTPAGE text_page, int index);
+
+// Experimental API.
+// Function: FPDFText_IsGenerated
+// Get if a character in a page is generated by PDFium.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// Return value:
+// 1 if the character is generated by PDFium.
+// 0 if the character is not generated by PDFium.
+// -1 if there was an error.
+//
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFText_IsGenerated(FPDF_TEXTPAGE text_page, int index);
+
+// Experimental API.
+// Function: FPDFText_IsHyphen
+// Get if a character in a page is a hyphen.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// Return value:
+// 1 if the character is a hyphen.
+// 0 if the character is not a hyphen.
+// -1 if there was an error.
+//
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFText_IsHyphen(FPDF_TEXTPAGE text_page, int index);
+
+// Experimental API.
+// Function: FPDFText_HasUnicodeMapError
+// Get if a character in a page has an invalid unicode mapping.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// Return value:
+// 1 if the character has an invalid unicode mapping.
+// 0 if the character has no known unicode mapping issues.
+// -1 if there was an error.
+//
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFText_HasUnicodeMapError(FPDF_TEXTPAGE text_page, int index);
+
+// Function: FPDFText_GetFontSize
+// Get the font size of a particular character.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// Return value:
+// The font size of the particular character, measured in points (about
+// 1/72 inch). This is the typographic size of the font (so called
+// "em size").
+//
+FPDF_EXPORT double FPDF_CALLCONV FPDFText_GetFontSize(FPDF_TEXTPAGE text_page,
+ int index);
+
+// Experimental API.
+// Function: FPDFText_GetFontInfo
+// Get the font name and flags of a particular character.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// buffer - A buffer receiving the font name.
+// buflen - The length of |buffer| in bytes.
+// flags - Optional pointer to an int receiving the font flags.
+// These flags should be interpreted per PDF spec 1.7
+// Section 5.7.1 Font Descriptor Flags.
+// Return value:
+// On success, return the length of the font name, including the
+// trailing NUL character, in bytes. If this length is less than or
+// equal to |length|, |buffer| is set to the font name, |flags| is
+// set to the font flags. |buffer| is in UTF-8 encoding. Return 0 on
+// failure.
+//
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFText_GetFontInfo(FPDF_TEXTPAGE text_page,
+ int index,
+ void* buffer,
+ unsigned long buflen,
+ int* flags);
+
+// Experimental API.
+// Function: FPDFText_GetFontWeight
+// Get the font weight of a particular character.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// Return value:
+// On success, return the font weight of the particular character. If
+// |text_page| is invalid, if |index| is out of bounds, or if the
+// character's text object is undefined, return -1.
+//
+FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetFontWeight(FPDF_TEXTPAGE text_page,
+ int index);
+
+// Experimental API.
+// Function: FPDFText_GetTextRenderMode
+// Get text rendering mode of character.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// Return Value:
+// On success, return the render mode value. A valid value is of type
+// FPDF_TEXT_RENDERMODE. If |text_page| is invalid, if |index| is out
+// of bounds, or if the text object is undefined, then return
+// FPDF_TEXTRENDERMODE_UNKNOWN.
+//
+FPDF_EXPORT FPDF_TEXT_RENDERMODE FPDF_CALLCONV
+FPDFText_GetTextRenderMode(FPDF_TEXTPAGE text_page, int index);
+
+// Experimental API.
+// Function: FPDFText_GetFillColor
+// Get the fill color of a particular character.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// R - Pointer to an unsigned int number receiving the
+// red value of the fill color.
+// G - Pointer to an unsigned int number receiving the
+// green value of the fill color.
+// B - Pointer to an unsigned int number receiving the
+// blue value of the fill color.
+// A - Pointer to an unsigned int number receiving the
+// alpha value of the fill color.
+// Return value:
+// Whether the call succeeded. If false, |R|, |G|, |B| and |A| are
+// unchanged.
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFText_GetFillColor(FPDF_TEXTPAGE text_page,
+ int index,
+ unsigned int* R,
+ unsigned int* G,
+ unsigned int* B,
+ unsigned int* A);
+
+// Experimental API.
+// Function: FPDFText_GetStrokeColor
+// Get the stroke color of a particular character.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// R - Pointer to an unsigned int number receiving the
+// red value of the stroke color.
+// G - Pointer to an unsigned int number receiving the
+// green value of the stroke color.
+// B - Pointer to an unsigned int number receiving the
+// blue value of the stroke color.
+// A - Pointer to an unsigned int number receiving the
+// alpha value of the stroke color.
+// Return value:
+// Whether the call succeeded. If false, |R|, |G|, |B| and |A| are
+// unchanged.
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFText_GetStrokeColor(FPDF_TEXTPAGE text_page,
+ int index,
+ unsigned int* R,
+ unsigned int* G,
+ unsigned int* B,
+ unsigned int* A);
+
+// Experimental API.
+// Function: FPDFText_GetCharAngle
+// Get character rotation angle.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// Return Value:
+// On success, return the angle value in radian. Value will always be
+// greater or equal to 0. If |text_page| is invalid, or if |index| is
+// out of bounds, then return -1.
+//
+FPDF_EXPORT float FPDF_CALLCONV FPDFText_GetCharAngle(FPDF_TEXTPAGE text_page,
+ int index);
+
+// Function: FPDFText_GetCharBox
+// Get bounding box of a particular character.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// left - Pointer to a double number receiving left position
+// of the character box.
+// right - Pointer to a double number receiving right position
+// of the character box.
+// bottom - Pointer to a double number receiving bottom position
+// of the character box.
+// top - Pointer to a double number receiving top position of
+// the character box.
+// Return Value:
+// On success, return TRUE and fill in |left|, |right|, |bottom|, and
+// |top|. If |text_page| is invalid, or if |index| is out of bounds,
+// then return FALSE, and the out parameters remain unmodified.
+// Comments:
+// All positions are measured in PDF "user space".
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetCharBox(FPDF_TEXTPAGE text_page,
+ int index,
+ double* left,
+ double* right,
+ double* bottom,
+ double* top);
+
+// Experimental API.
+// Function: FPDFText_GetLooseCharBox
+// Get a "loose" bounding box of a particular character, i.e., covering
+// the entire glyph bounds, without taking the actual glyph shape into
+// account.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// rect - Pointer to a FS_RECTF receiving the character box.
+// Return Value:
+// On success, return TRUE and fill in |rect|. If |text_page| is
+// invalid, or if |index| is out of bounds, then return FALSE, and the
+// |rect| out parameter remains unmodified.
+// Comments:
+// All positions are measured in PDF "user space".
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFText_GetLooseCharBox(FPDF_TEXTPAGE text_page, int index, FS_RECTF* rect);
+
+// Experimental API.
+// Function: FPDFText_GetMatrix
+// Get the effective transformation matrix for a particular character.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage().
+// index - Zero-based index of the character.
+// matrix - Pointer to a FS_MATRIX receiving the transformation
+// matrix.
+// Return Value:
+// On success, return TRUE and fill in |matrix|. If |text_page| is
+// invalid, or if |index| is out of bounds, or if |matrix| is NULL,
+// then return FALSE, and |matrix| remains unmodified.
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetMatrix(FPDF_TEXTPAGE text_page,
+ int index,
+ FS_MATRIX* matrix);
+
+// Function: FPDFText_GetCharOrigin
+// Get origin of a particular character.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// index - Zero-based index of the character.
+// x - Pointer to a double number receiving x coordinate of
+// the character origin.
+// y - Pointer to a double number receiving y coordinate of
+// the character origin.
+// Return Value:
+// Whether the call succeeded. If false, x and y are unchanged.
+// Comments:
+// All positions are measured in PDF "user space".
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFText_GetCharOrigin(FPDF_TEXTPAGE text_page,
+ int index,
+ double* x,
+ double* y);
+
+// Function: FPDFText_GetCharIndexAtPos
+// Get the index of a character at or nearby a certain position on the
+// page.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// x - X position in PDF "user space".
+// y - Y position in PDF "user space".
+// xTolerance - An x-axis tolerance value for character hit
+// detection, in point units.
+// yTolerance - A y-axis tolerance value for character hit
+// detection, in point units.
+// Return Value:
+// The zero-based index of the character at, or nearby the point (x,y).
+// If there is no character at or nearby the point, return value will
+// be -1. If an error occurs, -3 will be returned.
+//
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFText_GetCharIndexAtPos(FPDF_TEXTPAGE text_page,
+ double x,
+ double y,
+ double xTolerance,
+ double yTolerance);
+
+// Function: FPDFText_GetText
+// Extract unicode text string from the page.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// start_index - Index for the start characters.
+// count - Number of characters to be extracted.
+// result - A buffer (allocated by application) receiving the
+// extracted unicodes. The size of the buffer must be
+// able to hold the number of characters plus a
+// terminator.
+// Return Value:
+// Number of characters written into the result buffer, including the
+// trailing terminator.
+// Comments:
+// This function ignores characters without unicode information.
+// It returns all characters on the page, even those that are not
+// visible when the page has a cropbox. To filter out the characters
+// outside of the cropbox, use FPDF_GetPageBoundingBox() and
+// FPDFText_GetCharBox().
+//
+FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetText(FPDF_TEXTPAGE text_page,
+ int start_index,
+ int count,
+ unsigned short* result);
+
+// Function: FPDFText_CountRects
+// Counts number of rectangular areas occupied by a segment of text,
+// and caches the result for subsequent FPDFText_GetRect() calls.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// start_index - Index for the start character.
+// count - Number of characters, or -1 for all remaining.
+// Return value:
+// Number of rectangles, 0 if text_page is null, or -1 on bad
+// start_index.
+// Comments:
+// This function, along with FPDFText_GetRect can be used by
+// applications to detect the position on the page for a text segment,
+// so proper areas can be highlighted. The FPDFText_* functions will
+// automatically merge small character boxes into bigger one if those
+// characters are on the same line and use same font settings.
+//
+FPDF_EXPORT int FPDF_CALLCONV FPDFText_CountRects(FPDF_TEXTPAGE text_page,
+ int start_index,
+ int count);
+
+// Function: FPDFText_GetRect
+// Get a rectangular area from the result generated by
+// FPDFText_CountRects.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// rect_index - Zero-based index for the rectangle.
+// left - Pointer to a double value receiving the rectangle
+// left boundary.
+// top - Pointer to a double value receiving the rectangle
+// top boundary.
+// right - Pointer to a double value receiving the rectangle
+// right boundary.
+// bottom - Pointer to a double value receiving the rectangle
+// bottom boundary.
+// Return Value:
+// On success, return TRUE and fill in |left|, |top|, |right|, and
+// |bottom|. If |text_page| is invalid then return FALSE, and the out
+// parameters remain unmodified. If |text_page| is valid but
+// |rect_index| is out of bounds, then return FALSE and set the out
+// parameters to 0.
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetRect(FPDF_TEXTPAGE text_page,
+ int rect_index,
+ double* left,
+ double* top,
+ double* right,
+ double* bottom);
+
+// Function: FPDFText_GetBoundedText
+// Extract unicode text within a rectangular boundary on the page.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// left - Left boundary.
+// top - Top boundary.
+// right - Right boundary.
+// bottom - Bottom boundary.
+// buffer - A unicode buffer.
+// buflen - Number of characters (not bytes) for the buffer,
+// excluding an additional terminator.
+// Return Value:
+// If buffer is NULL or buflen is zero, return number of characters
+// (not bytes) of text present within the rectangle, excluding a
+// terminating NUL. Generally you should pass a buffer at least one
+// larger than this if you want a terminating NUL, which will be
+// provided if space is available. Otherwise, return number of
+// characters copied into the buffer, including the terminating NUL
+// when space for it is available.
+// Comment:
+// If the buffer is too small, as much text as will fit is copied into
+// it.
+//
+FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetBoundedText(FPDF_TEXTPAGE text_page,
+ double left,
+ double top,
+ double right,
+ double bottom,
+ unsigned short* buffer,
+ int buflen);
+
+// Flags used by FPDFText_FindStart function.
+//
+// If not set, it will not match case by default.
+#define FPDF_MATCHCASE 0x00000001
+// If not set, it will not match the whole word by default.
+#define FPDF_MATCHWHOLEWORD 0x00000002
+// If not set, it will skip past the current match to look for the next match.
+#define FPDF_CONSECUTIVE 0x00000004
+
+// Function: FPDFText_FindStart
+// Start a search.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// findwhat - A unicode match pattern.
+// flags - Option flags.
+// start_index - Start from this character. -1 for end of the page.
+// Return Value:
+// A handle for the search context. FPDFText_FindClose must be called
+// to release this handle.
+//
+FPDF_EXPORT FPDF_SCHHANDLE FPDF_CALLCONV
+FPDFText_FindStart(FPDF_TEXTPAGE text_page,
+ FPDF_WIDESTRING findwhat,
+ unsigned long flags,
+ int start_index);
+
+// Function: FPDFText_FindNext
+// Search in the direction from page start to end.
+// Parameters:
+// handle - A search context handle returned by
+// FPDFText_FindStart.
+// Return Value:
+// Whether a match is found.
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_FindNext(FPDF_SCHHANDLE handle);
+
+// Function: FPDFText_FindPrev
+// Search in the direction from page end to start.
+// Parameters:
+// handle - A search context handle returned by
+// FPDFText_FindStart.
+// Return Value:
+// Whether a match is found.
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_FindPrev(FPDF_SCHHANDLE handle);
+
+// Function: FPDFText_GetSchResultIndex
+// Get the starting character index of the search result.
+// Parameters:
+// handle - A search context handle returned by
+// FPDFText_FindStart.
+// Return Value:
+// Index for the starting character.
+//
+FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetSchResultIndex(FPDF_SCHHANDLE handle);
+
+// Function: FPDFText_GetSchCount
+// Get the number of matched characters in the search result.
+// Parameters:
+// handle - A search context handle returned by
+// FPDFText_FindStart.
+// Return Value:
+// Number of matched characters.
+//
+FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetSchCount(FPDF_SCHHANDLE handle);
+
+// Function: FPDFText_FindClose
+// Release a search context.
+// Parameters:
+// handle - A search context handle returned by
+// FPDFText_FindStart.
+// Return Value:
+// None.
+//
+FPDF_EXPORT void FPDF_CALLCONV FPDFText_FindClose(FPDF_SCHHANDLE handle);
+
+// Function: FPDFLink_LoadWebLinks
+// Prepare information about weblinks in a page.
+// Parameters:
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// Return Value:
+// A handle to the page's links information structure, or
+// NULL if something goes wrong.
+// Comments:
+// Weblinks are those links implicitly embedded in PDF pages. PDF also
+// has a type of annotation called "link" (FPDFTEXT doesn't deal with
+// that kind of link). FPDFTEXT weblink feature is useful for
+// automatically detecting links in the page contents. For example,
+// things like "https://www.example.com" will be detected, so
+// applications can allow user to click on those characters to activate
+// the link, even the PDF doesn't come with link annotations.
+//
+// FPDFLink_CloseWebLinks must be called to release resources.
+//
+FPDF_EXPORT FPDF_PAGELINK FPDF_CALLCONV
+FPDFLink_LoadWebLinks(FPDF_TEXTPAGE text_page);
+
+// Function: FPDFLink_CountWebLinks
+// Count number of detected web links.
+// Parameters:
+// link_page - Handle returned by FPDFLink_LoadWebLinks.
+// Return Value:
+// Number of detected web links.
+//
+FPDF_EXPORT int FPDF_CALLCONV FPDFLink_CountWebLinks(FPDF_PAGELINK link_page);
+
+// Function: FPDFLink_GetURL
+// Fetch the URL information for a detected web link.
+// Parameters:
+// link_page - Handle returned by FPDFLink_LoadWebLinks.
+// link_index - Zero-based index for the link.
+// buffer - A unicode buffer for the result.
+// buflen - Number of 16-bit code units (not bytes) for the
+// buffer, including an additional terminator.
+// Return Value:
+// If |buffer| is NULL or |buflen| is zero, return the number of 16-bit
+// code units (not bytes) needed to buffer the result (an additional
+// terminator is included in this count).
+// Otherwise, copy the result into |buffer|, truncating at |buflen| if
+// the result is too large to fit, and return the number of 16-bit code
+// units actually copied into the buffer (the additional terminator is
+// also included in this count).
+// If |link_index| does not correspond to a valid link, then the result
+// is an empty string.
+//
+FPDF_EXPORT int FPDF_CALLCONV FPDFLink_GetURL(FPDF_PAGELINK link_page,
+ int link_index,
+ unsigned short* buffer,
+ int buflen);
+
+// Function: FPDFLink_CountRects
+// Count number of rectangular areas for the link.
+// Parameters:
+// link_page - Handle returned by FPDFLink_LoadWebLinks.
+// link_index - Zero-based index for the link.
+// Return Value:
+// Number of rectangular areas for the link. If |link_index| does
+// not correspond to a valid link, then 0 is returned.
+//
+FPDF_EXPORT int FPDF_CALLCONV FPDFLink_CountRects(FPDF_PAGELINK link_page,
+ int link_index);
+
+// Function: FPDFLink_GetRect
+// Fetch the boundaries of a rectangle for a link.
+// Parameters:
+// link_page - Handle returned by FPDFLink_LoadWebLinks.
+// link_index - Zero-based index for the link.
+// rect_index - Zero-based index for a rectangle.
+// left - Pointer to a double value receiving the rectangle
+// left boundary.
+// top - Pointer to a double value receiving the rectangle
+// top boundary.
+// right - Pointer to a double value receiving the rectangle
+// right boundary.
+// bottom - Pointer to a double value receiving the rectangle
+// bottom boundary.
+// Return Value:
+// On success, return TRUE and fill in |left|, |top|, |right|, and
+// |bottom|. If |link_page| is invalid or if |link_index| does not
+// correspond to a valid link, then return FALSE, and the out
+// parameters remain unmodified.
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_GetRect(FPDF_PAGELINK link_page,
+ int link_index,
+ int rect_index,
+ double* left,
+ double* top,
+ double* right,
+ double* bottom);
+
+// Experimental API.
+// Function: FPDFLink_GetTextRange
+// Fetch the start char index and char count for a link.
+// Parameters:
+// link_page - Handle returned by FPDFLink_LoadWebLinks.
+// link_index - Zero-based index for the link.
+// start_char_index - pointer to int receiving the start char index
+// char_count - pointer to int receiving the char count
+// Return Value:
+// On success, return TRUE and fill in |start_char_index| and
+// |char_count|. if |link_page| is invalid or if |link_index| does
+// not correspond to a valid link, then return FALSE and the out
+// parameters remain unmodified.
+//
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFLink_GetTextRange(FPDF_PAGELINK link_page,
+ int link_index,
+ int* start_char_index,
+ int* char_count);
+
+// Function: FPDFLink_CloseWebLinks
+// Release resources used by weblink feature.
+// Parameters:
+// link_page - Handle returned by FPDFLink_LoadWebLinks.
+// Return Value:
+// None.
+//
+FPDF_EXPORT void FPDF_CALLCONV FPDFLink_CloseWebLinks(FPDF_PAGELINK link_page);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // PUBLIC_FPDF_TEXT_H_
diff --git a/src/main/cpp/include/fpdf_thumbnail.h b/src/main/cpp/include/fpdf_thumbnail.h
new file mode 100644
index 00000000..27b6d497
--- /dev/null
+++ b/src/main/cpp/include/fpdf_thumbnail.h
@@ -0,0 +1,59 @@
+// Copyright 2019 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PUBLIC_FPDF_THUMBNAIL_H_
+#define PUBLIC_FPDF_THUMBNAIL_H_
+
+#include
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Experimental API.
+// Gets the decoded data from the thumbnail of |page| if it exists.
+// This only modifies |buffer| if |buflen| less than or equal to the
+// size of the decoded data. Returns the size of the decoded
+// data or 0 if thumbnail DNE. Optional, pass null to just retrieve
+// the size of the buffer needed.
+//
+// page - handle to a page.
+// buffer - buffer for holding the decoded image data.
+// buflen - length of the buffer in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFPage_GetDecodedThumbnailData(FPDF_PAGE page,
+ void* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Gets the raw data from the thumbnail of |page| if it exists.
+// This only modifies |buffer| if |buflen| is less than or equal to
+// the size of the raw data. Returns the size of the raw data or 0
+// if thumbnail DNE. Optional, pass null to just retrieve the size
+// of the buffer needed.
+//
+// page - handle to a page.
+// buffer - buffer for holding the raw image data.
+// buflen - length of the buffer in bytes.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFPage_GetRawThumbnailData(FPDF_PAGE page,
+ void* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Returns the thumbnail of |page| as a FPDF_BITMAP. Returns a nullptr
+// if unable to access the thumbnail's stream.
+//
+// page - handle to a page.
+FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV
+FPDFPage_GetThumbnailAsBitmap(FPDF_PAGE page);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // PUBLIC_FPDF_THUMBNAIL_H_
diff --git a/src/main/cpp/include/fpdf_transformpage.h b/src/main/cpp/include/fpdf_transformpage.h
new file mode 100644
index 00000000..d5c5daaf
--- /dev/null
+++ b/src/main/cpp/include/fpdf_transformpage.h
@@ -0,0 +1,308 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef PUBLIC_FPDF_TRANSFORMPAGE_H_
+#define PUBLIC_FPDF_TRANSFORMPAGE_H_
+
+// NOLINTNEXTLINE(build/include)
+#include "fpdfview.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Set "MediaBox" entry to the page dictionary.
+ *
+ * page - Handle to a page.
+ * left - The left of the rectangle.
+ * bottom - The bottom of the rectangle.
+ * right - The right of the rectangle.
+ * top - The top of the rectangle.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetMediaBox(FPDF_PAGE page,
+ float left,
+ float bottom,
+ float right,
+ float top);
+
+/**
+ * Set "CropBox" entry to the page dictionary.
+ *
+ * page - Handle to a page.
+ * left - The left of the rectangle.
+ * bottom - The bottom of the rectangle.
+ * right - The right of the rectangle.
+ * top - The top of the rectangle.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetCropBox(FPDF_PAGE page,
+ float left,
+ float bottom,
+ float right,
+ float top);
+
+/**
+ * Set "BleedBox" entry to the page dictionary.
+ *
+ * page - Handle to a page.
+ * left - The left of the rectangle.
+ * bottom - The bottom of the rectangle.
+ * right - The right of the rectangle.
+ * top - The top of the rectangle.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetBleedBox(FPDF_PAGE page,
+ float left,
+ float bottom,
+ float right,
+ float top);
+
+/**
+ * Set "TrimBox" entry to the page dictionary.
+ *
+ * page - Handle to a page.
+ * left - The left of the rectangle.
+ * bottom - The bottom of the rectangle.
+ * right - The right of the rectangle.
+ * top - The top of the rectangle.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetTrimBox(FPDF_PAGE page,
+ float left,
+ float bottom,
+ float right,
+ float top);
+
+/**
+ * Set "ArtBox" entry to the page dictionary.
+ *
+ * page - Handle to a page.
+ * left - The left of the rectangle.
+ * bottom - The bottom of the rectangle.
+ * right - The right of the rectangle.
+ * top - The top of the rectangle.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetArtBox(FPDF_PAGE page,
+ float left,
+ float bottom,
+ float right,
+ float top);
+
+/**
+ * Get "MediaBox" entry from the page dictionary.
+ *
+ * page - Handle to a page.
+ * left - Pointer to a float value receiving the left of the rectangle.
+ * bottom - Pointer to a float value receiving the bottom of the rectangle.
+ * right - Pointer to a float value receiving the right of the rectangle.
+ * top - Pointer to a float value receiving the top of the rectangle.
+ *
+ * On success, return true and write to the out parameters. Otherwise return
+ * false and leave the out parameters unmodified.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GetMediaBox(FPDF_PAGE page,
+ float* left,
+ float* bottom,
+ float* right,
+ float* top);
+
+/**
+ * Get "CropBox" entry from the page dictionary.
+ *
+ * page - Handle to a page.
+ * left - Pointer to a float value receiving the left of the rectangle.
+ * bottom - Pointer to a float value receiving the bottom of the rectangle.
+ * right - Pointer to a float value receiving the right of the rectangle.
+ * top - Pointer to a float value receiving the top of the rectangle.
+ *
+ * On success, return true and write to the out parameters. Otherwise return
+ * false and leave the out parameters unmodified.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GetCropBox(FPDF_PAGE page,
+ float* left,
+ float* bottom,
+ float* right,
+ float* top);
+
+/**
+ * Get "BleedBox" entry from the page dictionary.
+ *
+ * page - Handle to a page.
+ * left - Pointer to a float value receiving the left of the rectangle.
+ * bottom - Pointer to a float value receiving the bottom of the rectangle.
+ * right - Pointer to a float value receiving the right of the rectangle.
+ * top - Pointer to a float value receiving the top of the rectangle.
+ *
+ * On success, return true and write to the out parameters. Otherwise return
+ * false and leave the out parameters unmodified.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GetBleedBox(FPDF_PAGE page,
+ float* left,
+ float* bottom,
+ float* right,
+ float* top);
+
+/**
+ * Get "TrimBox" entry from the page dictionary.
+ *
+ * page - Handle to a page.
+ * left - Pointer to a float value receiving the left of the rectangle.
+ * bottom - Pointer to a float value receiving the bottom of the rectangle.
+ * right - Pointer to a float value receiving the right of the rectangle.
+ * top - Pointer to a float value receiving the top of the rectangle.
+ *
+ * On success, return true and write to the out parameters. Otherwise return
+ * false and leave the out parameters unmodified.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GetTrimBox(FPDF_PAGE page,
+ float* left,
+ float* bottom,
+ float* right,
+ float* top);
+
+/**
+ * Get "ArtBox" entry from the page dictionary.
+ *
+ * page - Handle to a page.
+ * left - Pointer to a float value receiving the left of the rectangle.
+ * bottom - Pointer to a float value receiving the bottom of the rectangle.
+ * right - Pointer to a float value receiving the right of the rectangle.
+ * top - Pointer to a float value receiving the top of the rectangle.
+ *
+ * On success, return true and write to the out parameters. Otherwise return
+ * false and leave the out parameters unmodified.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GetArtBox(FPDF_PAGE page,
+ float* left,
+ float* bottom,
+ float* right,
+ float* top);
+
+/**
+ * Apply transforms to |page|.
+ *
+ * If |matrix| is provided it will be applied to transform the page.
+ * If |clipRect| is provided it will be used to clip the resulting page.
+ * If neither |matrix| or |clipRect| are provided this method returns |false|.
+ * Returns |true| if transforms are applied.
+ *
+ * This function will transform the whole page, and would take effect to all the
+ * objects in the page.
+ *
+ * page - Page handle.
+ * matrix - Transform matrix.
+ * clipRect - Clipping rectangle.
+ */
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFPage_TransFormWithClip(FPDF_PAGE page,
+ const FS_MATRIX* matrix,
+ const FS_RECTF* clipRect);
+
+/**
+ * Transform (scale, rotate, shear, move) the clip path of page object.
+ * page_object - Handle to a page object. Returned by
+ * FPDFPageObj_NewImageObj().
+ *
+ * a - The coefficient "a" of the matrix.
+ * b - The coefficient "b" of the matrix.
+ * c - The coefficient "c" of the matrix.
+ * d - The coefficient "d" of the matrix.
+ * e - The coefficient "e" of the matrix.
+ * f - The coefficient "f" of the matrix.
+ */
+FPDF_EXPORT void FPDF_CALLCONV
+FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object,
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f);
+
+// Experimental API.
+// Get the clip path of the page object.
+//
+// page object - Handle to a page object. Returned by e.g.
+// FPDFPage_GetObject().
+//
+// Returns the handle to the clip path, or NULL on failure. The caller does not
+// take ownership of the returned FPDF_CLIPPATH. Instead, it remains valid until
+// FPDF_ClosePage() is called for the page containing |page_object|.
+FPDF_EXPORT FPDF_CLIPPATH FPDF_CALLCONV
+FPDFPageObj_GetClipPath(FPDF_PAGEOBJECT page_object);
+
+// Experimental API.
+// Get number of paths inside |clip_path|.
+//
+// clip_path - handle to a clip_path.
+//
+// Returns the number of objects in |clip_path| or -1 on failure.
+FPDF_EXPORT int FPDF_CALLCONV FPDFClipPath_CountPaths(FPDF_CLIPPATH clip_path);
+
+// Experimental API.
+// Get number of segments inside one path of |clip_path|.
+//
+// clip_path - handle to a clip_path.
+// path_index - index into the array of paths of the clip path.
+//
+// Returns the number of segments or -1 on failure.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFClipPath_CountPathSegments(FPDF_CLIPPATH clip_path, int path_index);
+
+// Experimental API.
+// Get segment in one specific path of |clip_path| at index.
+//
+// clip_path - handle to a clip_path.
+// path_index - the index of a path.
+// segment_index - the index of a segment.
+//
+// Returns the handle to the segment, or NULL on failure. The caller does not
+// take ownership of the returned FPDF_PATHSEGMENT. Instead, it remains valid
+// until FPDF_ClosePage() is called for the page containing |clip_path|.
+FPDF_EXPORT FPDF_PATHSEGMENT FPDF_CALLCONV
+FPDFClipPath_GetPathSegment(FPDF_CLIPPATH clip_path,
+ int path_index,
+ int segment_index);
+
+/**
+ * Create a new clip path, with a rectangle inserted.
+ *
+ * Caller takes ownership of the returned FPDF_CLIPPATH. It should be freed with
+ * FPDF_DestroyClipPath().
+ *
+ * left - The left of the clip box.
+ * bottom - The bottom of the clip box.
+ * right - The right of the clip box.
+ * top - The top of the clip box.
+ */
+FPDF_EXPORT FPDF_CLIPPATH FPDF_CALLCONV FPDF_CreateClipPath(float left,
+ float bottom,
+ float right,
+ float top);
+
+/**
+ * Destroy the clip path.
+ *
+ * clipPath - A handle to the clip path. It will be invalid after this call.
+ */
+FPDF_EXPORT void FPDF_CALLCONV FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath);
+
+/**
+ * Clip the page content, the page content that outside the clipping region
+ * become invisible.
+ *
+ * A clip path will be inserted before the page content stream or content array.
+ * In this way, the page content will be clipped by this clip path.
+ *
+ * page - A page handle.
+ * clipPath - A handle to the clip path. (Does not take ownership.)
+ */
+FPDF_EXPORT void FPDF_CALLCONV FPDFPage_InsertClipPath(FPDF_PAGE page,
+ FPDF_CLIPPATH clipPath);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // PUBLIC_FPDF_TRANSFORMPAGE_H_
diff --git a/src/main/cpp/include/fpdfview.h b/src/main/cpp/include/fpdfview.h
new file mode 100644
index 00000000..719817e2
--- /dev/null
+++ b/src/main/cpp/include/fpdfview.h
@@ -0,0 +1,1475 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+// This is the main header file for embedders of PDFium. It provides APIs to
+// initialize the library, load documents, and render pages, amongst other
+// things.
+//
+// NOTE: None of the PDFium APIs are thread-safe. They expect to be called
+// from a single thread. Barring that, embedders are required to ensure (via
+// a mutex or similar) that only a single PDFium call can be made at a time.
+//
+// NOTE: External docs refer to this file as "fpdfview.h", so do not rename
+// despite lack of consistency with other public files.
+
+#ifndef PUBLIC_FPDFVIEW_H_
+#define PUBLIC_FPDFVIEW_H_
+
+// clang-format off
+
+#include
+
+#if defined(_WIN32) && !defined(__WINDOWS__)
+#include
+#endif
+
+#ifdef PDF_ENABLE_XFA
+// PDF_USE_XFA is set in confirmation that this version of PDFium can support
+// XFA forms as requested by the PDF_ENABLE_XFA setting.
+#define PDF_USE_XFA
+#endif // PDF_ENABLE_XFA
+
+// PDF object types
+#define FPDF_OBJECT_UNKNOWN 0
+#define FPDF_OBJECT_BOOLEAN 1
+#define FPDF_OBJECT_NUMBER 2
+#define FPDF_OBJECT_STRING 3
+#define FPDF_OBJECT_NAME 4
+#define FPDF_OBJECT_ARRAY 5
+#define FPDF_OBJECT_DICTIONARY 6
+#define FPDF_OBJECT_STREAM 7
+#define FPDF_OBJECT_NULLOBJ 8
+#define FPDF_OBJECT_REFERENCE 9
+
+// PDF text rendering modes
+typedef enum {
+ FPDF_TEXTRENDERMODE_UNKNOWN = -1,
+ FPDF_TEXTRENDERMODE_FILL = 0,
+ FPDF_TEXTRENDERMODE_STROKE = 1,
+ FPDF_TEXTRENDERMODE_FILL_STROKE = 2,
+ FPDF_TEXTRENDERMODE_INVISIBLE = 3,
+ FPDF_TEXTRENDERMODE_FILL_CLIP = 4,
+ FPDF_TEXTRENDERMODE_STROKE_CLIP = 5,
+ FPDF_TEXTRENDERMODE_FILL_STROKE_CLIP = 6,
+ FPDF_TEXTRENDERMODE_CLIP = 7,
+ FPDF_TEXTRENDERMODE_LAST = FPDF_TEXTRENDERMODE_CLIP,
+} FPDF_TEXT_RENDERMODE;
+
+// PDF types - use incomplete types (never completed) to force API type safety.
+typedef struct fpdf_action_t__* FPDF_ACTION;
+typedef struct fpdf_annotation_t__* FPDF_ANNOTATION;
+typedef struct fpdf_attachment_t__* FPDF_ATTACHMENT;
+typedef struct fpdf_avail_t__* FPDF_AVAIL;
+typedef struct fpdf_bitmap_t__* FPDF_BITMAP;
+typedef struct fpdf_bookmark_t__* FPDF_BOOKMARK;
+typedef struct fpdf_clippath_t__* FPDF_CLIPPATH;
+typedef struct fpdf_dest_t__* FPDF_DEST;
+typedef struct fpdf_document_t__* FPDF_DOCUMENT;
+typedef struct fpdf_font_t__* FPDF_FONT;
+typedef struct fpdf_form_handle_t__* FPDF_FORMHANDLE;
+typedef const struct fpdf_glyphpath_t__* FPDF_GLYPHPATH;
+typedef struct fpdf_javascript_action_t* FPDF_JAVASCRIPT_ACTION;
+typedef struct fpdf_link_t__* FPDF_LINK;
+typedef struct fpdf_page_t__* FPDF_PAGE;
+typedef struct fpdf_pagelink_t__* FPDF_PAGELINK;
+typedef struct fpdf_pageobject_t__* FPDF_PAGEOBJECT; // (text, path, etc.)
+typedef struct fpdf_pageobjectmark_t__* FPDF_PAGEOBJECTMARK;
+typedef const struct fpdf_pagerange_t__* FPDF_PAGERANGE;
+typedef const struct fpdf_pathsegment_t* FPDF_PATHSEGMENT;
+typedef struct fpdf_schhandle_t__* FPDF_SCHHANDLE;
+typedef const struct fpdf_signature_t__* FPDF_SIGNATURE;
+typedef void* FPDF_SKIA_CANVAS; // Passed into Skia as an SkCanvas.
+typedef struct fpdf_structelement_t__* FPDF_STRUCTELEMENT;
+typedef const struct fpdf_structelement_attr_t__* FPDF_STRUCTELEMENT_ATTR;
+typedef struct fpdf_structtree_t__* FPDF_STRUCTTREE;
+typedef struct fpdf_textpage_t__* FPDF_TEXTPAGE;
+typedef struct fpdf_widget_t__* FPDF_WIDGET;
+typedef struct fpdf_xobject_t__* FPDF_XOBJECT;
+
+// Basic data types
+typedef int FPDF_BOOL;
+typedef int FPDF_RESULT;
+typedef unsigned long FPDF_DWORD;
+typedef float FS_FLOAT;
+
+// Duplex types
+typedef enum _FPDF_DUPLEXTYPE_ {
+ DuplexUndefined = 0,
+ Simplex,
+ DuplexFlipShortEdge,
+ DuplexFlipLongEdge
+} FPDF_DUPLEXTYPE;
+
+// String types
+typedef unsigned short FPDF_WCHAR;
+
+// The public PDFium API uses three types of strings: byte string, wide string
+// (UTF-16LE encoded), and platform dependent string.
+
+// Public PDFium API type for byte strings.
+typedef const char* FPDF_BYTESTRING;
+
+// The public PDFium API always uses UTF-16LE encoded wide strings, each
+// character uses 2 bytes (except surrogation), with the low byte first.
+typedef const FPDF_WCHAR* FPDF_WIDESTRING;
+
+// Structure for persisting a string beyond the duration of a callback.
+// Note: although represented as a char*, string may be interpreted as
+// a UTF-16LE formated string. Used only by XFA callbacks.
+typedef struct FPDF_BSTR_ {
+ char* str; // String buffer, manipulate only with FPDF_BStr_* methods.
+ int len; // Length of the string, in bytes.
+} FPDF_BSTR;
+
+// For Windows programmers: In most cases it's OK to treat FPDF_WIDESTRING as a
+// Windows unicode string, however, special care needs to be taken if you
+// expect to process Unicode larger than 0xffff.
+//
+// For Linux/Unix programmers: most compiler/library environments use 4 bytes
+// for a Unicode character, and you have to convert between FPDF_WIDESTRING and
+// system wide string by yourself.
+typedef const char* FPDF_STRING;
+
+// Matrix for transformation, in the form [a b c d e f], equivalent to:
+// | a b 0 |
+// | c d 0 |
+// | e f 1 |
+//
+// Translation is performed with [1 0 0 1 tx ty].
+// Scaling is performed with [sx 0 0 sy 0 0].
+// See PDF Reference 1.7, 4.2.2 Common Transformations for more.
+typedef struct _FS_MATRIX_ {
+ float a;
+ float b;
+ float c;
+ float d;
+ float e;
+ float f;
+} FS_MATRIX;
+
+// Rectangle area(float) in device or page coordinate system.
+typedef struct _FS_RECTF_ {
+ // The x-coordinate of the left-top corner.
+ float left;
+ // The y-coordinate of the left-top corner.
+ float top;
+ // The x-coordinate of the right-bottom corner.
+ float right;
+ // The y-coordinate of the right-bottom corner.
+ float bottom;
+} * FS_LPRECTF, FS_RECTF;
+
+// Const Pointer to FS_RECTF structure.
+typedef const FS_RECTF* FS_LPCRECTF;
+
+// Rectangle size. Coordinate system agnostic.
+typedef struct FS_SIZEF_ {
+ float width;
+ float height;
+} * FS_LPSIZEF, FS_SIZEF;
+
+// Const Pointer to FS_SIZEF structure.
+typedef const FS_SIZEF* FS_LPCSIZEF;
+
+// 2D Point. Coordinate system agnostic.
+typedef struct FS_POINTF_ {
+ float x;
+ float y;
+} * FS_LPPOINTF, FS_POINTF;
+
+// Const Pointer to FS_POINTF structure.
+typedef const FS_POINTF* FS_LPCPOINTF;
+
+typedef struct _FS_QUADPOINTSF {
+ FS_FLOAT x1;
+ FS_FLOAT y1;
+ FS_FLOAT x2;
+ FS_FLOAT y2;
+ FS_FLOAT x3;
+ FS_FLOAT y3;
+ FS_FLOAT x4;
+ FS_FLOAT y4;
+} FS_QUADPOINTSF;
+
+// Annotation enums.
+typedef int FPDF_ANNOTATION_SUBTYPE;
+typedef int FPDF_ANNOT_APPEARANCEMODE;
+
+// Dictionary value types.
+typedef int FPDF_OBJECT_TYPE;
+
+#if defined(WIN32)
+#if defined(FPDF_IMPLEMENTATION)
+#define FPDF_EXPORT __declspec(dllexport)
+#else
+#define FPDF_EXPORT __declspec(dllimport)
+#endif // defined(FPDF_IMPLEMENTATION)
+#else
+#if defined(FPDF_IMPLEMENTATION)
+#define FPDF_EXPORT __attribute__((visibility("default")))
+#else
+#define FPDF_EXPORT
+#endif // defined(FPDF_IMPLEMENTATION)
+#endif // defined(WIN32)
+
+#if defined(WIN32) && defined(FPDFSDK_EXPORTS)
+#define FPDF_CALLCONV __stdcall
+#else
+#define FPDF_CALLCONV
+#endif
+
+// Exported Functions
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// PDF renderer types - Experimental.
+// Selection of 2D graphics library to use for rendering to FPDF_BITMAPs.
+typedef enum {
+ // Anti-Grain Geometry - https://sourceforge.net/projects/agg/
+ FPDF_RENDERERTYPE_AGG = 0,
+ // Skia - https://skia.org/
+ FPDF_RENDERERTYPE_SKIA = 1,
+} FPDF_RENDERER_TYPE;
+
+// Process-wide options for initializing the library.
+typedef struct FPDF_LIBRARY_CONFIG_ {
+ // Version number of the interface. Currently must be 2.
+ // Support for version 1 will be deprecated in the future.
+ int version;
+
+ // Array of paths to scan in place of the defaults when using built-in
+ // FXGE font loading code. The array is terminated by a NULL pointer.
+ // The Array may be NULL itself to use the default paths. May be ignored
+ // entirely depending upon the platform.
+ const char** m_pUserFontPaths;
+
+ // Version 2.
+
+ // Pointer to the v8::Isolate to use, or NULL to force PDFium to create one.
+ void* m_pIsolate;
+
+ // The embedder data slot to use in the v8::Isolate to store PDFium's
+ // per-isolate data. The value needs to be in the range
+ // [0, |v8::Internals::kNumIsolateDataLots|). Note that 0 is fine for most
+ // embedders.
+ unsigned int m_v8EmbedderSlot;
+
+ // Version 3 - Experimental.
+
+ // Pointer to the V8::Platform to use.
+ void* m_pPlatform;
+
+ // Version 4 - Experimental.
+
+ // Explicit specification of core renderer to use. |m_RendererType| must be
+ // a valid value for |FPDF_LIBRARY_CONFIG| versions of this level or higher,
+ // or else the initialization will fail with an immediate crash.
+ // Note that use of a specified |FPDF_RENDERER_TYPE| value for which the
+ // corresponding render library is not included in the build will similarly
+ // fail with an immediate crash.
+ FPDF_RENDERER_TYPE m_RendererType;
+} FPDF_LIBRARY_CONFIG;
+
+// Function: FPDF_InitLibraryWithConfig
+// Initialize the PDFium library and allocate global resources for it.
+// Parameters:
+// config - configuration information as above.
+// Return value:
+// None.
+// Comments:
+// You have to call this function before you can call any PDF
+// processing functions.
+FPDF_EXPORT void FPDF_CALLCONV
+FPDF_InitLibraryWithConfig(const FPDF_LIBRARY_CONFIG* config);
+
+// Function: FPDF_InitLibrary
+// Initialize the PDFium library (alternative form).
+// Parameters:
+// None
+// Return value:
+// None.
+// Comments:
+// Convenience function to call FPDF_InitLibraryWithConfig() with a
+// default configuration for backwards compatibility purposes. New
+// code should call FPDF_InitLibraryWithConfig() instead. This will
+// be deprecated in the future.
+FPDF_EXPORT void FPDF_CALLCONV FPDF_InitLibrary();
+
+// Function: FPDF_DestroyLibrary
+// Release global resources allocated to the PDFium library by
+// FPDF_InitLibrary() or FPDF_InitLibraryWithConfig().
+// Parameters:
+// None.
+// Return value:
+// None.
+// Comments:
+// After this function is called, you must not call any PDF
+// processing functions.
+//
+// Calling this function does not automatically close other
+// objects. It is recommended to close other objects before
+// closing the library with this function.
+FPDF_EXPORT void FPDF_CALLCONV FPDF_DestroyLibrary();
+
+// Policy for accessing the local machine time.
+#define FPDF_POLICY_MACHINETIME_ACCESS 0
+
+// Function: FPDF_SetSandBoxPolicy
+// Set the policy for the sandbox environment.
+// Parameters:
+// policy - The specified policy for setting, for example:
+// FPDF_POLICY_MACHINETIME_ACCESS.
+// enable - True to enable, false to disable the policy.
+// Return value:
+// None.
+FPDF_EXPORT void FPDF_CALLCONV FPDF_SetSandBoxPolicy(FPDF_DWORD policy,
+ FPDF_BOOL enable);
+
+#if defined(_WIN32)
+// Experimental API.
+// Function: FPDF_SetPrintMode
+// Set printing mode when printing on Windows.
+// Parameters:
+// mode - FPDF_PRINTMODE_EMF to output EMF (default)
+// FPDF_PRINTMODE_TEXTONLY to output text only (for charstream
+// devices)
+// FPDF_PRINTMODE_POSTSCRIPT2 to output level 2 PostScript into
+// EMF as a series of GDI comments.
+// FPDF_PRINTMODE_POSTSCRIPT3 to output level 3 PostScript into
+// EMF as a series of GDI comments.
+// FPDF_PRINTMODE_POSTSCRIPT2_PASSTHROUGH to output level 2
+// PostScript via ExtEscape() in PASSTHROUGH mode.
+// FPDF_PRINTMODE_POSTSCRIPT3_PASSTHROUGH to output level 3
+// PostScript via ExtEscape() in PASSTHROUGH mode.
+// FPDF_PRINTMODE_EMF_IMAGE_MASKS to output EMF, with more
+// efficient processing of documents containing image masks.
+// FPDF_PRINTMODE_POSTSCRIPT3_TYPE42 to output level 3
+// PostScript with embedded Type 42 fonts, when applicable, into
+// EMF as a series of GDI comments.
+// FPDF_PRINTMODE_POSTSCRIPT3_TYPE42_PASSTHROUGH to output level
+// 3 PostScript with embedded Type 42 fonts, when applicable,
+// via ExtEscape() in PASSTHROUGH mode.
+// Return value:
+// True if successful, false if unsuccessful (typically invalid input).
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_SetPrintMode(int mode);
+#endif // defined(_WIN32)
+
+// Function: FPDF_LoadDocument
+// Open and load a PDF document.
+// Parameters:
+// file_path - Path to the PDF file (including extension).
+// password - A string used as the password for the PDF file.
+// If no password is needed, empty or NULL can be used.
+// See comments below regarding the encoding.
+// Return value:
+// A handle to the loaded document, or NULL on failure.
+// Comments:
+// Loaded document can be closed by FPDF_CloseDocument().
+// If this function fails, you can use FPDF_GetLastError() to retrieve
+// the reason why it failed.
+//
+// The encoding for |file_path| is UTF-8.
+//
+// The encoding for |password| can be either UTF-8 or Latin-1. PDFs,
+// depending on the security handler revision, will only accept one or
+// the other encoding. If |password|'s encoding and the PDF's expected
+// encoding do not match, FPDF_LoadDocument() will automatically
+// convert |password| to the other encoding.
+FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV
+FPDF_LoadDocument(FPDF_STRING file_path, FPDF_BYTESTRING password);
+
+// Function: FPDF_LoadMemDocument
+// Open and load a PDF document from memory.
+// Parameters:
+// data_buf - Pointer to a buffer containing the PDF document.
+// size - Number of bytes in the PDF document.
+// password - A string used as the password for the PDF file.
+// If no password is needed, empty or NULL can be used.
+// Return value:
+// A handle to the loaded document, or NULL on failure.
+// Comments:
+// The memory buffer must remain valid when the document is open.
+// The loaded document can be closed by FPDF_CloseDocument.
+// If this function fails, you can use FPDF_GetLastError() to retrieve
+// the reason why it failed.
+//
+// See the comments for FPDF_LoadDocument() regarding the encoding for
+// |password|.
+// Notes:
+// If PDFium is built with the XFA module, the application should call
+// FPDF_LoadXFA() function after the PDF document loaded to support XFA
+// fields defined in the fpdfformfill.h file.
+FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV
+FPDF_LoadMemDocument(const void* data_buf, int size, FPDF_BYTESTRING password);
+
+// Experimental API.
+// Function: FPDF_LoadMemDocument64
+// Open and load a PDF document from memory.
+// Parameters:
+// data_buf - Pointer to a buffer containing the PDF document.
+// size - Number of bytes in the PDF document.
+// password - A string used as the password for the PDF file.
+// If no password is needed, empty or NULL can be used.
+// Return value:
+// A handle to the loaded document, or NULL on failure.
+// Comments:
+// The memory buffer must remain valid when the document is open.
+// The loaded document can be closed by FPDF_CloseDocument.
+// If this function fails, you can use FPDF_GetLastError() to retrieve
+// the reason why it failed.
+//
+// See the comments for FPDF_LoadDocument() regarding the encoding for
+// |password|.
+// Notes:
+// If PDFium is built with the XFA module, the application should call
+// FPDF_LoadXFA() function after the PDF document loaded to support XFA
+// fields defined in the fpdfformfill.h file.
+FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV
+FPDF_LoadMemDocument64(const void* data_buf,
+ size_t size,
+ FPDF_BYTESTRING password);
+
+// Structure for custom file access.
+typedef struct {
+ // File length, in bytes.
+ unsigned long m_FileLen;
+
+ // A function pointer for getting a block of data from a specific position.
+ // Position is specified by byte offset from the beginning of the file.
+ // The pointer to the buffer is never NULL and the size is never 0.
+ // The position and size will never go out of range of the file length.
+ // It may be possible for PDFium to call this function multiple times for
+ // the same position.
+ // Return value: should be non-zero if successful, zero for error.
+ int (*m_GetBlock)(void* param,
+ unsigned long position,
+ unsigned char* pBuf,
+ unsigned long size);
+
+ // A custom pointer for all implementation specific data. This pointer will
+ // be used as the first parameter to the m_GetBlock callback.
+ void* m_Param;
+} FPDF_FILEACCESS;
+
+/*
+ * Structure for file reading or writing (I/O).
+ *
+ * Note: This is a handler and should be implemented by callers,
+ * and is only used from XFA.
+ */
+typedef struct FPDF_FILEHANDLER_ {
+ /*
+ * User-defined data.
+ * Note: Callers can use this field to track controls.
+ */
+ void* clientData;
+
+ /*
+ * Callback function to release the current file stream object.
+ *
+ * Parameters:
+ * clientData - Pointer to user-defined data.
+ * Returns:
+ * None.
+ */
+ void (*Release)(void* clientData);
+
+ /*
+ * Callback function to retrieve the current file stream size.
+ *
+ * Parameters:
+ * clientData - Pointer to user-defined data.
+ * Returns:
+ * Size of file stream.
+ */
+ FPDF_DWORD (*GetSize)(void* clientData);
+
+ /*
+ * Callback function to read data from the current file stream.
+ *
+ * Parameters:
+ * clientData - Pointer to user-defined data.
+ * offset - Offset position starts from the beginning of file
+ * stream. This parameter indicates reading position.
+ * buffer - Memory buffer to store data which are read from
+ * file stream. This parameter should not be NULL.
+ * size - Size of data which should be read from file stream,
+ * in bytes. The buffer indicated by |buffer| must be
+ * large enough to store specified data.
+ * Returns:
+ * 0 for success, other value for failure.
+ */
+ FPDF_RESULT (*ReadBlock)(void* clientData,
+ FPDF_DWORD offset,
+ void* buffer,
+ FPDF_DWORD size);
+
+ /*
+ * Callback function to write data into the current file stream.
+ *
+ * Parameters:
+ * clientData - Pointer to user-defined data.
+ * offset - Offset position starts from the beginning of file
+ * stream. This parameter indicates writing position.
+ * buffer - Memory buffer contains data which is written into
+ * file stream. This parameter should not be NULL.
+ * size - Size of data which should be written into file
+ * stream, in bytes.
+ * Returns:
+ * 0 for success, other value for failure.
+ */
+ FPDF_RESULT (*WriteBlock)(void* clientData,
+ FPDF_DWORD offset,
+ const void* buffer,
+ FPDF_DWORD size);
+ /*
+ * Callback function to flush all internal accessing buffers.
+ *
+ * Parameters:
+ * clientData - Pointer to user-defined data.
+ * Returns:
+ * 0 for success, other value for failure.
+ */
+ FPDF_RESULT (*Flush)(void* clientData);
+
+ /*
+ * Callback function to change file size.
+ *
+ * Description:
+ * This function is called under writing mode usually. Implementer
+ * can determine whether to realize it based on application requests.
+ * Parameters:
+ * clientData - Pointer to user-defined data.
+ * size - New size of file stream, in bytes.
+ * Returns:
+ * 0 for success, other value for failure.
+ */
+ FPDF_RESULT (*Truncate)(void* clientData, FPDF_DWORD size);
+} FPDF_FILEHANDLER;
+
+// Function: FPDF_LoadCustomDocument
+// Load PDF document from a custom access descriptor.
+// Parameters:
+// pFileAccess - A structure for accessing the file.
+// password - Optional password for decrypting the PDF file.
+// Return value:
+// A handle to the loaded document, or NULL on failure.
+// Comments:
+// The application must keep the file resources |pFileAccess| points to
+// valid until the returned FPDF_DOCUMENT is closed. |pFileAccess|
+// itself does not need to outlive the FPDF_DOCUMENT.
+//
+// The loaded document can be closed with FPDF_CloseDocument().
+//
+// See the comments for FPDF_LoadDocument() regarding the encoding for
+// |password|.
+// Notes:
+// If PDFium is built with the XFA module, the application should call
+// FPDF_LoadXFA() function after the PDF document loaded to support XFA
+// fields defined in the fpdfformfill.h file.
+FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV
+FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, FPDF_BYTESTRING password);
+
+// Function: FPDF_GetFileVersion
+// Get the file version of the given PDF document.
+// Parameters:
+// doc - Handle to a document.
+// fileVersion - The PDF file version. File version: 14 for 1.4, 15
+// for 1.5, ...
+// Return value:
+// True if succeeds, false otherwise.
+// Comments:
+// If the document was created by FPDF_CreateNewDocument,
+// then this function will always fail.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_GetFileVersion(FPDF_DOCUMENT doc,
+ int* fileVersion);
+
+#define FPDF_ERR_SUCCESS 0 // No error.
+#define FPDF_ERR_UNKNOWN 1 // Unknown error.
+#define FPDF_ERR_FILE 2 // File not found or could not be opened.
+#define FPDF_ERR_FORMAT 3 // File not in PDF format or corrupted.
+#define FPDF_ERR_PASSWORD 4 // Password required or incorrect password.
+#define FPDF_ERR_SECURITY 5 // Unsupported security scheme.
+#define FPDF_ERR_PAGE 6 // Page not found or content error.
+#ifdef PDF_ENABLE_XFA
+#define FPDF_ERR_XFALOAD 7 // Load XFA error.
+#define FPDF_ERR_XFALAYOUT 8 // Layout XFA error.
+#endif // PDF_ENABLE_XFA
+
+// Function: FPDF_GetLastError
+// Get last error code when a function fails.
+// Parameters:
+// None.
+// Return value:
+// A 32-bit integer indicating error code as defined above.
+// Comments:
+// If the previous SDK call succeeded, the return value of this
+// function is not defined. This function only works in conjunction
+// with APIs that mention FPDF_GetLastError() in their documentation.
+FPDF_EXPORT unsigned long FPDF_CALLCONV FPDF_GetLastError();
+
+// Experimental API.
+// Function: FPDF_DocumentHasValidCrossReferenceTable
+// Whether the document's cross reference table is valid or not.
+// Parameters:
+// document - Handle to a document. Returned by FPDF_LoadDocument.
+// Return value:
+// True if the PDF parser did not encounter problems parsing the cross
+// reference table. False if the parser could not parse the cross
+// reference table and the table had to be rebuild from other data
+// within the document.
+// Comments:
+// The return value can change over time as the PDF parser evolves.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_DocumentHasValidCrossReferenceTable(FPDF_DOCUMENT document);
+
+// Experimental API.
+// Function: FPDF_GetTrailerEnds
+// Get the byte offsets of trailer ends.
+// Parameters:
+// document - Handle to document. Returned by FPDF_LoadDocument().
+// buffer - The address of a buffer that receives the
+// byte offsets.
+// length - The size, in ints, of |buffer|.
+// Return value:
+// Returns the number of ints in the buffer on success, 0 on error.
+//
+// |buffer| is an array of integers that describes the exact byte offsets of the
+// trailer ends in the document. If |length| is less than the returned length,
+// or |document| or |buffer| is NULL, |buffer| will not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_GetTrailerEnds(FPDF_DOCUMENT document,
+ unsigned int* buffer,
+ unsigned long length);
+
+// Function: FPDF_GetDocPermissions
+// Get file permission flags of the document.
+// Parameters:
+// document - Handle to a document. Returned by FPDF_LoadDocument.
+// Return value:
+// A 32-bit integer indicating permission flags. Please refer to the
+// PDF Reference for detailed descriptions. If the document is not
+// protected or was unlocked by the owner, 0xffffffff will be returned.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_GetDocPermissions(FPDF_DOCUMENT document);
+
+// Function: FPDF_GetDocUserPermissions
+// Get user file permission flags of the document.
+// Parameters:
+// document - Handle to a document. Returned by FPDF_LoadDocument.
+// Return value:
+// A 32-bit integer indicating permission flags. Please refer to the
+// PDF Reference for detailed descriptions. If the document is not
+// protected, 0xffffffff will be returned. Always returns user
+// permissions, even if the document was unlocked by the owner.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_GetDocUserPermissions(FPDF_DOCUMENT document);
+
+// Function: FPDF_GetSecurityHandlerRevision
+// Get the revision for the security handler.
+// Parameters:
+// document - Handle to a document. Returned by FPDF_LoadDocument.
+// Return value:
+// The security handler revision number. Please refer to the PDF
+// Reference for a detailed description. If the document is not
+// protected, -1 will be returned.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document);
+
+// Function: FPDF_GetPageCount
+// Get total number of pages in the document.
+// Parameters:
+// document - Handle to document. Returned by FPDF_LoadDocument.
+// Return value:
+// Total number of pages in the document.
+FPDF_EXPORT int FPDF_CALLCONV FPDF_GetPageCount(FPDF_DOCUMENT document);
+
+// Function: FPDF_LoadPage
+// Load a page inside the document.
+// Parameters:
+// document - Handle to document. Returned by FPDF_LoadDocument
+// page_index - Index number of the page. 0 for the first page.
+// Return value:
+// A handle to the loaded page, or NULL if page load fails.
+// Comments:
+// The loaded page can be rendered to devices using FPDF_RenderPage.
+// The loaded page can be closed using FPDF_ClosePage.
+FPDF_EXPORT FPDF_PAGE FPDF_CALLCONV FPDF_LoadPage(FPDF_DOCUMENT document,
+ int page_index);
+
+// Experimental API
+// Function: FPDF_GetPageWidthF
+// Get page width.
+// Parameters:
+// page - Handle to the page. Returned by FPDF_LoadPage().
+// Return value:
+// Page width (excluding non-displayable area) measured in points.
+// One point is 1/72 inch (around 0.3528 mm).
+FPDF_EXPORT float FPDF_CALLCONV FPDF_GetPageWidthF(FPDF_PAGE page);
+
+// Function: FPDF_GetPageWidth
+// Get page width.
+// Parameters:
+// page - Handle to the page. Returned by FPDF_LoadPage.
+// Return value:
+// Page width (excluding non-displayable area) measured in points.
+// One point is 1/72 inch (around 0.3528 mm).
+// Note:
+// Prefer FPDF_GetPageWidthF() above. This will be deprecated in the
+// future.
+FPDF_EXPORT double FPDF_CALLCONV FPDF_GetPageWidth(FPDF_PAGE page);
+
+// Experimental API
+// Function: FPDF_GetPageHeightF
+// Get page height.
+// Parameters:
+// page - Handle to the page. Returned by FPDF_LoadPage().
+// Return value:
+// Page height (excluding non-displayable area) measured in points.
+// One point is 1/72 inch (around 0.3528 mm)
+FPDF_EXPORT float FPDF_CALLCONV FPDF_GetPageHeightF(FPDF_PAGE page);
+
+// Function: FPDF_GetPageHeight
+// Get page height.
+// Parameters:
+// page - Handle to the page. Returned by FPDF_LoadPage.
+// Return value:
+// Page height (excluding non-displayable area) measured in points.
+// One point is 1/72 inch (around 0.3528 mm)
+// Note:
+// Prefer FPDF_GetPageHeightF() above. This will be deprecated in the
+// future.
+FPDF_EXPORT double FPDF_CALLCONV FPDF_GetPageHeight(FPDF_PAGE page);
+
+// Experimental API.
+// Function: FPDF_GetPageBoundingBox
+// Get the bounding box of the page. This is the intersection between
+// its media box and its crop box.
+// Parameters:
+// page - Handle to the page. Returned by FPDF_LoadPage.
+// rect - Pointer to a rect to receive the page bounding box.
+// On an error, |rect| won't be filled.
+// Return value:
+// True for success.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_GetPageBoundingBox(FPDF_PAGE page,
+ FS_RECTF* rect);
+
+// Experimental API.
+// Function: FPDF_GetPageSizeByIndexF
+// Get the size of the page at the given index.
+// Parameters:
+// document - Handle to document. Returned by FPDF_LoadDocument().
+// page_index - Page index, zero for the first page.
+// size - Pointer to a FS_SIZEF to receive the page size.
+// (in points).
+// Return value:
+// Non-zero for success. 0 for error (document or page not found).
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_GetPageSizeByIndexF(FPDF_DOCUMENT document,
+ int page_index,
+ FS_SIZEF* size);
+
+// Function: FPDF_GetPageSizeByIndex
+// Get the size of the page at the given index.
+// Parameters:
+// document - Handle to document. Returned by FPDF_LoadDocument.
+// page_index - Page index, zero for the first page.
+// width - Pointer to a double to receive the page width
+// (in points).
+// height - Pointer to a double to receive the page height
+// (in points).
+// Return value:
+// Non-zero for success. 0 for error (document or page not found).
+// Note:
+// Prefer FPDF_GetPageSizeByIndexF() above. This will be deprecated in
+// the future.
+FPDF_EXPORT int FPDF_CALLCONV FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document,
+ int page_index,
+ double* width,
+ double* height);
+
+// Page rendering flags. They can be combined with bit-wise OR.
+//
+// Set if annotations are to be rendered.
+#define FPDF_ANNOT 0x01
+// Set if using text rendering optimized for LCD display. This flag will only
+// take effect if anti-aliasing is enabled for text.
+#define FPDF_LCD_TEXT 0x02
+// Don't use the native text output available on some platforms
+#define FPDF_NO_NATIVETEXT 0x04
+// Grayscale output.
+#define FPDF_GRAYSCALE 0x08
+// Obsolete, has no effect, retained for compatibility.
+#define FPDF_DEBUG_INFO 0x80
+// Obsolete, has no effect, retained for compatibility.
+#define FPDF_NO_CATCH 0x100
+// Limit image cache size.
+#define FPDF_RENDER_LIMITEDIMAGECACHE 0x200
+// Always use halftone for image stretching.
+#define FPDF_RENDER_FORCEHALFTONE 0x400
+// Render for printing.
+#define FPDF_PRINTING 0x800
+// Set to disable anti-aliasing on text. This flag will also disable LCD
+// optimization for text rendering.
+#define FPDF_RENDER_NO_SMOOTHTEXT 0x1000
+// Set to disable anti-aliasing on images.
+#define FPDF_RENDER_NO_SMOOTHIMAGE 0x2000
+// Set to disable anti-aliasing on paths.
+#define FPDF_RENDER_NO_SMOOTHPATH 0x4000
+// Set whether to render in a reverse Byte order, this flag is only used when
+// rendering to a bitmap.
+#define FPDF_REVERSE_BYTE_ORDER 0x10
+// Set whether fill paths need to be stroked. This flag is only used when
+// FPDF_COLORSCHEME is passed in, since with a single fill color for paths the
+// boundaries of adjacent fill paths are less visible.
+#define FPDF_CONVERT_FILL_TO_STROKE 0x20
+
+// Struct for color scheme.
+// Each should be a 32-bit value specifying the color, in 8888 ARGB format.
+typedef struct FPDF_COLORSCHEME_ {
+ FPDF_DWORD path_fill_color;
+ FPDF_DWORD path_stroke_color;
+ FPDF_DWORD text_fill_color;
+ FPDF_DWORD text_stroke_color;
+} FPDF_COLORSCHEME;
+
+#ifdef _WIN32
+// Function: FPDF_RenderPage
+// Render contents of a page to a device (screen, bitmap, or printer).
+// This function is only supported on Windows.
+// Parameters:
+// dc - Handle to the device context.
+// page - Handle to the page. Returned by FPDF_LoadPage.
+// start_x - Left pixel position of the display area in
+// device coordinates.
+// start_y - Top pixel position of the display area in device
+// coordinates.
+// size_x - Horizontal size (in pixels) for displaying the page.
+// size_y - Vertical size (in pixels) for displaying the page.
+// rotate - Page orientation:
+// 0 (normal)
+// 1 (rotated 90 degrees clockwise)
+// 2 (rotated 180 degrees)
+// 3 (rotated 90 degrees counter-clockwise)
+// flags - 0 for normal display, or combination of flags
+// defined above.
+// Return value:
+// None.
+FPDF_EXPORT void FPDF_CALLCONV FPDF_RenderPage(HDC dc,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags);
+#endif
+
+// Function: FPDF_RenderPageBitmap
+// Render contents of a page to a device independent bitmap.
+// Parameters:
+// bitmap - Handle to the device independent bitmap (as the
+// output buffer). The bitmap handle can be created
+// by FPDFBitmap_Create or retrieved from an image
+// object by FPDFImageObj_GetBitmap.
+// page - Handle to the page. Returned by FPDF_LoadPage
+// start_x - Left pixel position of the display area in
+// bitmap coordinates.
+// start_y - Top pixel position of the display area in bitmap
+// coordinates.
+// size_x - Horizontal size (in pixels) for displaying the page.
+// size_y - Vertical size (in pixels) for displaying the page.
+// rotate - Page orientation:
+// 0 (normal)
+// 1 (rotated 90 degrees clockwise)
+// 2 (rotated 180 degrees)
+// 3 (rotated 90 degrees counter-clockwise)
+// flags - 0 for normal display, or combination of the Page
+// Rendering flags defined above. With the FPDF_ANNOT
+// flag, it renders all annotations that do not require
+// user-interaction, which are all annotations except
+// widget and popup annotations.
+// Return value:
+// None.
+FPDF_EXPORT void FPDF_CALLCONV FPDF_RenderPageBitmap(FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags);
+
+// Function: FPDF_RenderPageBitmapWithMatrix
+// Render contents of a page to a device independent bitmap.
+// Parameters:
+// bitmap - Handle to the device independent bitmap (as the
+// output buffer). The bitmap handle can be created
+// by FPDFBitmap_Create or retrieved by
+// FPDFImageObj_GetBitmap.
+// page - Handle to the page. Returned by FPDF_LoadPage.
+// matrix - The transform matrix, which must be invertible.
+// See PDF Reference 1.7, 4.2.2 Common Transformations.
+// clipping - The rect to clip to in device coords.
+// flags - 0 for normal display, or combination of the Page
+// Rendering flags defined above. With the FPDF_ANNOT
+// flag, it renders all annotations that do not require
+// user-interaction, which are all annotations except
+// widget and popup annotations.
+// Return value:
+// None. Note that behavior is undefined if det of |matrix| is 0.
+FPDF_EXPORT void FPDF_CALLCONV
+FPDF_RenderPageBitmapWithMatrix(FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ const FS_MATRIX* matrix,
+ const FS_RECTF* clipping,
+ int flags);
+
+#if defined(PDF_USE_SKIA)
+// Experimental API.
+// Function: FPDF_RenderPageSkia
+// Render contents of a page to a Skia SkCanvas.
+// Parameters:
+// canvas - SkCanvas to render to.
+// page - Handle to the page.
+// size_x - Horizontal size (in pixels) for displaying the page.
+// size_y - Vertical size (in pixels) for displaying the page.
+// Return value:
+// None.
+FPDF_EXPORT void FPDF_CALLCONV FPDF_RenderPageSkia(FPDF_SKIA_CANVAS canvas,
+ FPDF_PAGE page,
+ int size_x,
+ int size_y);
+#endif
+
+// Function: FPDF_ClosePage
+// Close a loaded PDF page.
+// Parameters:
+// page - Handle to the loaded page.
+// Return value:
+// None.
+FPDF_EXPORT void FPDF_CALLCONV FPDF_ClosePage(FPDF_PAGE page);
+
+// Function: FPDF_CloseDocument
+// Close a loaded PDF document.
+// Parameters:
+// document - Handle to the loaded document.
+// Return value:
+// None.
+FPDF_EXPORT void FPDF_CALLCONV FPDF_CloseDocument(FPDF_DOCUMENT document);
+
+// Function: FPDF_DeviceToPage
+// Convert the screen coordinates of a point to page coordinates.
+// Parameters:
+// page - Handle to the page. Returned by FPDF_LoadPage.
+// start_x - Left pixel position of the display area in
+// device coordinates.
+// start_y - Top pixel position of the display area in device
+// coordinates.
+// size_x - Horizontal size (in pixels) for displaying the page.
+// size_y - Vertical size (in pixels) for displaying the page.
+// rotate - Page orientation:
+// 0 (normal)
+// 1 (rotated 90 degrees clockwise)
+// 2 (rotated 180 degrees)
+// 3 (rotated 90 degrees counter-clockwise)
+// device_x - X value in device coordinates to be converted.
+// device_y - Y value in device coordinates to be converted.
+// page_x - A pointer to a double receiving the converted X
+// value in page coordinates.
+// page_y - A pointer to a double receiving the converted Y
+// value in page coordinates.
+// Return value:
+// Returns true if the conversion succeeds, and |page_x| and |page_y|
+// successfully receives the converted coordinates.
+// Comments:
+// The page coordinate system has its origin at the left-bottom corner
+// of the page, with the X-axis on the bottom going to the right, and
+// the Y-axis on the left side going up.
+//
+// NOTE: this coordinate system can be altered when you zoom, scroll,
+// or rotate a page, however, a point on the page should always have
+// the same coordinate values in the page coordinate system.
+//
+// The device coordinate system is device dependent. For screen device,
+// its origin is at the left-top corner of the window. However this
+// origin can be altered by the Windows coordinate transformation
+// utilities.
+//
+// You must make sure the start_x, start_y, size_x, size_y
+// and rotate parameters have exactly same values as you used in
+// the FPDF_RenderPage() function call.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_DeviceToPage(FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int device_x,
+ int device_y,
+ double* page_x,
+ double* page_y);
+
+// Function: FPDF_PageToDevice
+// Convert the page coordinates of a point to screen coordinates.
+// Parameters:
+// page - Handle to the page. Returned by FPDF_LoadPage.
+// start_x - Left pixel position of the display area in
+// device coordinates.
+// start_y - Top pixel position of the display area in device
+// coordinates.
+// size_x - Horizontal size (in pixels) for displaying the page.
+// size_y - Vertical size (in pixels) for displaying the page.
+// rotate - Page orientation:
+// 0 (normal)
+// 1 (rotated 90 degrees clockwise)
+// 2 (rotated 180 degrees)
+// 3 (rotated 90 degrees counter-clockwise)
+// page_x - X value in page coordinates.
+// page_y - Y value in page coordinate.
+// device_x - A pointer to an integer receiving the result X
+// value in device coordinates.
+// device_y - A pointer to an integer receiving the result Y
+// value in device coordinates.
+// Return value:
+// Returns true if the conversion succeeds, and |device_x| and
+// |device_y| successfully receives the converted coordinates.
+// Comments:
+// See comments for FPDF_DeviceToPage().
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_PageToDevice(FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ double page_x,
+ double page_y,
+ int* device_x,
+ int* device_y);
+
+// Function: FPDFBitmap_Create
+// Create a device independent bitmap (FXDIB).
+// Parameters:
+// width - The number of pixels in width for the bitmap.
+// Must be greater than 0.
+// height - The number of pixels in height for the bitmap.
+// Must be greater than 0.
+// alpha - A flag indicating whether the alpha channel is used.
+// Non-zero for using alpha, zero for not using.
+// Return value:
+// The created bitmap handle, or NULL if a parameter error or out of
+// memory.
+// Comments:
+// The bitmap always uses 4 bytes per pixel. The first byte is always
+// double word aligned.
+//
+// The byte order is BGRx (the last byte unused if no alpha channel) or
+// BGRA.
+//
+// The pixels in a horizontal line are stored side by side, with the
+// left most pixel stored first (with lower memory address).
+// Each line uses width * 4 bytes.
+//
+// Lines are stored one after another, with the top most line stored
+// first. There is no gap between adjacent lines.
+//
+// This function allocates enough memory for holding all pixels in the
+// bitmap, but it doesn't initialize the buffer. Applications can use
+// FPDFBitmap_FillRect() to fill the bitmap using any color. If the OS
+// allows it, this function can allocate up to 4 GB of memory.
+FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV FPDFBitmap_Create(int width,
+ int height,
+ int alpha);
+
+// More DIB formats
+// Unknown or unsupported format.
+#define FPDFBitmap_Unknown 0
+// Gray scale bitmap, one byte per pixel.
+#define FPDFBitmap_Gray 1
+// 3 bytes per pixel, byte order: blue, green, red.
+#define FPDFBitmap_BGR 2
+// 4 bytes per pixel, byte order: blue, green, red, unused.
+#define FPDFBitmap_BGRx 3
+// 4 bytes per pixel, byte order: blue, green, red, alpha.
+#define FPDFBitmap_BGRA 4
+
+// Function: FPDFBitmap_CreateEx
+// Create a device independent bitmap (FXDIB)
+// Parameters:
+// width - The number of pixels in width for the bitmap.
+// Must be greater than 0.
+// height - The number of pixels in height for the bitmap.
+// Must be greater than 0.
+// format - A number indicating for bitmap format, as defined
+// above.
+// first_scan - A pointer to the first byte of the first line if
+// using an external buffer. If this parameter is NULL,
+// then a new buffer will be created.
+// stride - Number of bytes for each scan line. The value must
+// be 0 or greater. When the value is 0,
+// FPDFBitmap_CreateEx() will automatically calculate
+// the appropriate value using |width| and |format|.
+// When using an external buffer, it is recommended for
+// the caller to pass in the value.
+// When not using an external buffer, it is recommended
+// for the caller to pass in 0.
+// Return value:
+// The bitmap handle, or NULL if parameter error or out of memory.
+// Comments:
+// Similar to FPDFBitmap_Create function, but allows for more formats
+// and an external buffer is supported. The bitmap created by this
+// function can be used in any place that a FPDF_BITMAP handle is
+// required.
+//
+// If an external buffer is used, then the caller should destroy the
+// buffer. FPDFBitmap_Destroy() will not destroy the buffer.
+//
+// It is recommended to use FPDFBitmap_GetStride() to get the stride
+// value.
+FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV FPDFBitmap_CreateEx(int width,
+ int height,
+ int format,
+ void* first_scan,
+ int stride);
+
+// Function: FPDFBitmap_GetFormat
+// Get the format of the bitmap.
+// Parameters:
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// or FPDFImageObj_GetBitmap.
+// Return value:
+// The format of the bitmap.
+// Comments:
+// Only formats supported by FPDFBitmap_CreateEx are supported by this
+// function; see the list of such formats above.
+FPDF_EXPORT int FPDF_CALLCONV FPDFBitmap_GetFormat(FPDF_BITMAP bitmap);
+
+// Function: FPDFBitmap_FillRect
+// Fill a rectangle in a bitmap.
+// Parameters:
+// bitmap - The handle to the bitmap. Returned by
+// FPDFBitmap_Create.
+// left - The left position. Starting from 0 at the
+// left-most pixel.
+// top - The top position. Starting from 0 at the
+// top-most line.
+// width - Width in pixels to be filled.
+// height - Height in pixels to be filled.
+// color - A 32-bit value specifing the color, in 8888 ARGB
+// format.
+// Return value:
+// None.
+// Comments:
+// This function sets the color and (optionally) alpha value in the
+// specified region of the bitmap.
+//
+// NOTE: If the alpha channel is used, this function does NOT
+// composite the background with the source color, instead the
+// background will be replaced by the source color and the alpha.
+//
+// If the alpha channel is not used, the alpha parameter is ignored.
+FPDF_EXPORT void FPDF_CALLCONV FPDFBitmap_FillRect(FPDF_BITMAP bitmap,
+ int left,
+ int top,
+ int width,
+ int height,
+ FPDF_DWORD color);
+
+// Function: FPDFBitmap_GetBuffer
+// Get data buffer of a bitmap.
+// Parameters:
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// or FPDFImageObj_GetBitmap.
+// Return value:
+// The pointer to the first byte of the bitmap buffer.
+// Comments:
+// The stride may be more than width * number of bytes per pixel
+//
+// Applications can use this function to get the bitmap buffer pointer,
+// then manipulate any color and/or alpha values for any pixels in the
+// bitmap.
+//
+// Use FPDFBitmap_GetFormat() to find out the format of the data.
+FPDF_EXPORT void* FPDF_CALLCONV FPDFBitmap_GetBuffer(FPDF_BITMAP bitmap);
+
+// Function: FPDFBitmap_GetWidth
+// Get width of a bitmap.
+// Parameters:
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// or FPDFImageObj_GetBitmap.
+// Return value:
+// The width of the bitmap in pixels.
+FPDF_EXPORT int FPDF_CALLCONV FPDFBitmap_GetWidth(FPDF_BITMAP bitmap);
+
+// Function: FPDFBitmap_GetHeight
+// Get height of a bitmap.
+// Parameters:
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// or FPDFImageObj_GetBitmap.
+// Return value:
+// The height of the bitmap in pixels.
+FPDF_EXPORT int FPDF_CALLCONV FPDFBitmap_GetHeight(FPDF_BITMAP bitmap);
+
+// Function: FPDFBitmap_GetStride
+// Get number of bytes for each line in the bitmap buffer.
+// Parameters:
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// or FPDFImageObj_GetBitmap.
+// Return value:
+// The number of bytes for each line in the bitmap buffer.
+// Comments:
+// The stride may be more than width * number of bytes per pixel.
+FPDF_EXPORT int FPDF_CALLCONV FPDFBitmap_GetStride(FPDF_BITMAP bitmap);
+
+// Function: FPDFBitmap_Destroy
+// Destroy a bitmap and release all related buffers.
+// Parameters:
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// or FPDFImageObj_GetBitmap.
+// Return value:
+// None.
+// Comments:
+// This function will not destroy any external buffers provided when
+// the bitmap was created.
+FPDF_EXPORT void FPDF_CALLCONV FPDFBitmap_Destroy(FPDF_BITMAP bitmap);
+
+// Function: FPDF_VIEWERREF_GetPrintScaling
+// Whether the PDF document prefers to be scaled or not.
+// Parameters:
+// document - Handle to the loaded document.
+// Return value:
+// None.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document);
+
+// Function: FPDF_VIEWERREF_GetNumCopies
+// Returns the number of copies to be printed.
+// Parameters:
+// document - Handle to the loaded document.
+// Return value:
+// The number of copies to be printed.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document);
+
+// Function: FPDF_VIEWERREF_GetPrintPageRange
+// Page numbers to initialize print dialog box when file is printed.
+// Parameters:
+// document - Handle to the loaded document.
+// Return value:
+// The print page range to be used for printing.
+FPDF_EXPORT FPDF_PAGERANGE FPDF_CALLCONV
+FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document);
+
+// Experimental API.
+// Function: FPDF_VIEWERREF_GetPrintPageRangeCount
+// Returns the number of elements in a FPDF_PAGERANGE.
+// Parameters:
+// pagerange - Handle to the page range.
+// Return value:
+// The number of elements in the page range. Returns 0 on error.
+FPDF_EXPORT size_t FPDF_CALLCONV
+FPDF_VIEWERREF_GetPrintPageRangeCount(FPDF_PAGERANGE pagerange);
+
+// Experimental API.
+// Function: FPDF_VIEWERREF_GetPrintPageRangeElement
+// Returns an element from a FPDF_PAGERANGE.
+// Parameters:
+// pagerange - Handle to the page range.
+// index - Index of the element.
+// Return value:
+// The value of the element in the page range at a given index.
+// Returns -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDF_VIEWERREF_GetPrintPageRangeElement(FPDF_PAGERANGE pagerange, size_t index);
+
+// Function: FPDF_VIEWERREF_GetDuplex
+// Returns the paper handling option to be used when printing from
+// the print dialog.
+// Parameters:
+// document - Handle to the loaded document.
+// Return value:
+// The paper handling option to be used when printing.
+FPDF_EXPORT FPDF_DUPLEXTYPE FPDF_CALLCONV
+FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document);
+
+// Function: FPDF_VIEWERREF_GetName
+// Gets the contents for a viewer ref, with a given key. The value must
+// be of type "name".
+// Parameters:
+// document - Handle to the loaded document.
+// key - Name of the key in the viewer pref dictionary,
+// encoded in UTF-8.
+// buffer - A string to write the contents of the key to.
+// length - Length of the buffer.
+// Return value:
+// The number of bytes in the contents, including the NULL terminator.
+// Thus if the return value is 0, then that indicates an error, such
+// as when |document| is invalid or |buffer| is NULL. If |length| is
+// less than the returned length, or |buffer| is NULL, |buffer| will
+// not be modified.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDF_VIEWERREF_GetName(FPDF_DOCUMENT document,
+ FPDF_BYTESTRING key,
+ char* buffer,
+ unsigned long length);
+
+// Function: FPDF_CountNamedDests
+// Get the count of named destinations in the PDF document.
+// Parameters:
+// document - Handle to a document
+// Return value:
+// The count of named destinations.
+FPDF_EXPORT FPDF_DWORD FPDF_CALLCONV
+FPDF_CountNamedDests(FPDF_DOCUMENT document);
+
+// Function: FPDF_GetNamedDestByName
+// Get a the destination handle for the given name.
+// Parameters:
+// document - Handle to the loaded document.
+// name - The name of a destination.
+// Return value:
+// The handle to the destination.
+FPDF_EXPORT FPDF_DEST FPDF_CALLCONV
+FPDF_GetNamedDestByName(FPDF_DOCUMENT document, FPDF_BYTESTRING name);
+
+// Function: FPDF_GetNamedDest
+// Get the named destination by index.
+// Parameters:
+// document - Handle to a document
+// index - The index of a named destination.
+// buffer - The buffer to store the destination name,
+// used as wchar_t*.
+// buflen [in/out] - Size of the buffer in bytes on input,
+// length of the result in bytes on output
+// or -1 if the buffer is too small.
+// Return value:
+// The destination handle for a given index, or NULL if there is no
+// named destination corresponding to |index|.
+// Comments:
+// Call this function twice to get the name of the named destination:
+// 1) First time pass in |buffer| as NULL and get buflen.
+// 2) Second time pass in allocated |buffer| and buflen to retrieve
+// |buffer|, which should be used as wchar_t*.
+//
+// If buflen is not sufficiently large, it will be set to -1 upon
+// return.
+FPDF_EXPORT FPDF_DEST FPDF_CALLCONV FPDF_GetNamedDest(FPDF_DOCUMENT document,
+ int index,
+ void* buffer,
+ long* buflen);
+
+// Experimental API.
+// Function: FPDF_GetXFAPacketCount
+// Get the number of valid packets in the XFA entry.
+// Parameters:
+// document - Handle to the document.
+// Return value:
+// The number of valid packets, or -1 on error.
+FPDF_EXPORT int FPDF_CALLCONV FPDF_GetXFAPacketCount(FPDF_DOCUMENT document);
+
+// Experimental API.
+// Function: FPDF_GetXFAPacketName
+// Get the name of a packet in the XFA array.
+// Parameters:
+// document - Handle to the document.
+// index - Index number of the packet. 0 for the first packet.
+// buffer - Buffer for holding the name of the XFA packet.
+// buflen - Length of |buffer| in bytes.
+// Return value:
+// The length of the packet name in bytes, or 0 on error.
+//
+// |document| must be valid and |index| must be in the range [0, N), where N is
+// the value returned by FPDF_GetXFAPacketCount().
+// |buffer| is only modified if it is non-NULL and |buflen| is greater than or
+// equal to the length of the packet name. The packet name includes a
+// terminating NUL character. |buffer| is unmodified on error.
+FPDF_EXPORT unsigned long FPDF_CALLCONV FPDF_GetXFAPacketName(
+ FPDF_DOCUMENT document,
+ int index,
+ void* buffer,
+ unsigned long buflen);
+
+// Experimental API.
+// Function: FPDF_GetXFAPacketContent
+// Get the content of a packet in the XFA array.
+// Parameters:
+// document - Handle to the document.
+// index - Index number of the packet. 0 for the first packet.
+// buffer - Buffer for holding the content of the XFA packet.
+// buflen - Length of |buffer| in bytes.
+// out_buflen - Pointer to the variable that will receive the minimum
+// buffer size needed to contain the content of the XFA
+// packet.
+// Return value:
+// Whether the operation succeeded or not.
+//
+// |document| must be valid and |index| must be in the range [0, N), where N is
+// the value returned by FPDF_GetXFAPacketCount(). |out_buflen| must not be
+// NULL. When the aforementioned arguments are valid, the operation succeeds,
+// and |out_buflen| receives the content size. |buffer| is only modified if
+// |buffer| is non-null and long enough to contain the content. Callers must
+// check both the return value and the input |buflen| is no less than the
+// returned |out_buflen| before using the data in |buffer|.
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_GetXFAPacketContent(
+ FPDF_DOCUMENT document,
+ int index,
+ void* buffer,
+ unsigned long buflen,
+ unsigned long* out_buflen);
+
+#ifdef PDF_ENABLE_V8
+// Function: FPDF_GetRecommendedV8Flags
+// Returns a space-separated string of command line flags that are
+// recommended to be passed into V8 via V8::SetFlagsFromString()
+// prior to initializing the PDFium library.
+// Parameters:
+// None.
+// Return value:
+// NUL-terminated string of the form "--flag1 --flag2".
+// The caller must not attempt to modify or free the result.
+FPDF_EXPORT const char* FPDF_CALLCONV FPDF_GetRecommendedV8Flags();
+
+// Experimental API.
+// Function: FPDF_GetArrayBufferAllocatorSharedInstance()
+// Helper function for initializing V8 isolates that will
+// use PDFium's internal memory management.
+// Parameters:
+// None.
+// Return Value:
+// Pointer to a suitable v8::ArrayBuffer::Allocator, returned
+// as void for C compatibility.
+// Notes:
+// Use is optional, but allows external creation of isolates
+// matching the ones PDFium will make when none is provided
+// via |FPDF_LIBRARY_CONFIG::m_pIsolate|.
+//
+// Can only be called when the library is in an uninitialized or
+// destroyed state.
+FPDF_EXPORT void* FPDF_CALLCONV FPDF_GetArrayBufferAllocatorSharedInstance();
+#endif // PDF_ENABLE_V8
+
+#ifdef PDF_ENABLE_XFA
+// Function: FPDF_BStr_Init
+// Helper function to initialize a FPDF_BSTR.
+FPDF_EXPORT FPDF_RESULT FPDF_CALLCONV FPDF_BStr_Init(FPDF_BSTR* bstr);
+
+// Function: FPDF_BStr_Set
+// Helper function to copy string data into the FPDF_BSTR.
+FPDF_EXPORT FPDF_RESULT FPDF_CALLCONV FPDF_BStr_Set(FPDF_BSTR* bstr,
+ const char* cstr,
+ int length);
+
+// Function: FPDF_BStr_Clear
+// Helper function to clear a FPDF_BSTR.
+FPDF_EXPORT FPDF_RESULT FPDF_CALLCONV FPDF_BStr_Clear(FPDF_BSTR* bstr);
+#endif // PDF_ENABLE_XFA
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // PUBLIC_FPDFVIEW_H_
diff --git a/src/main/jni/include/utils/Errors.h b/src/main/cpp/include/utils/Errors.h
similarity index 100%
rename from src/main/jni/include/utils/Errors.h
rename to src/main/cpp/include/utils/Errors.h
diff --git a/src/main/jni/include/utils/Mutex.h b/src/main/cpp/include/utils/Mutex.h
similarity index 99%
rename from src/main/jni/include/utils/Mutex.h
rename to src/main/cpp/include/utils/Mutex.h
index dd201c89..4f85add9 100644
--- a/src/main/jni/include/utils/Mutex.h
+++ b/src/main/cpp/include/utils/Mutex.h
@@ -25,7 +25,7 @@
# include
#endif
-#include
+#include "Errors.h"
// ---------------------------------------------------------------------------
namespace android {
diff --git a/src/main/jni/src/mainJNILib.cpp b/src/main/cpp/mainJNILib.cpp
similarity index 98%
rename from src/main/jni/src/mainJNILib.cpp
rename to src/main/cpp/mainJNILib.cpp
index a888e69f..04c57fc0 100644
--- a/src/main/jni/src/mainJNILib.cpp
+++ b/src/main/cpp/mainJNILib.cpp
@@ -11,20 +11,21 @@ extern "C" {
#include
#include
#include
-#include
+#include "include/utils/Mutex.h"
using namespace android;
-#include
-#include
+#include "include/fpdfview.h"
+#include "include/fpdf_doc.h"
#include
#include
+#include
-static Mutex sLibraryLock;
+static std::mutex sLibraryLock;
static int sLibraryReferenceCount = 0;
static void initLibraryIfNeed(){
- Mutex::Autolock lock(sLibraryLock);
+ const std::lock_guard lock(sLibraryLock);
if(sLibraryReferenceCount == 0){
LOGD("Init FPDF library");
FPDF_InitLibrary();
@@ -33,7 +34,7 @@ static void initLibraryIfNeed(){
}
static void destroyLibraryIfNeed(){
- Mutex::Autolock lock(sLibraryLock);
+ const std::lock_guard lock(sLibraryLock);
sLibraryReferenceCount--;
if(sLibraryReferenceCount == 0){
LOGD("Destroy FPDF library");
@@ -618,7 +619,7 @@ JNI_FUNC(jlong, PdfiumCore, nativeGetBookmarkDestIndex)(JNI_ARGS, jlong docPtr,
if (dest == NULL) {
return -1;
}
- return (jlong) FPDFDest_GetPageIndex(doc->pdfDocument, dest);
+ return FPDFDest_GetDestPageIndex(doc->pdfDocument, dest);
}
JNI_FUNC(jlongArray, PdfiumCore, nativeGetPageLinks)(JNI_ARGS, jlong pagePtr) {
@@ -642,7 +643,7 @@ JNI_FUNC(jobject, PdfiumCore, nativeGetDestPageIndex)(JNI_ARGS, jlong docPtr, jl
if (dest == NULL) {
return NULL;
}
- unsigned long index = FPDFDest_GetPageIndex(doc->pdfDocument, dest);
+ unsigned long index = FPDFDest_GetDestPageIndex(doc->pdfDocument, dest);
return NewInteger(env, (jint) index);
}
diff --git a/src/main/jni/src/util.hpp b/src/main/cpp/util.hpp
similarity index 100%
rename from src/main/jni/src/util.hpp
rename to src/main/cpp/util.hpp
diff --git a/src/main/java/com/shockwave/pdfium/PdfDocument.java b/src/main/java/com/shockwave/pdfium/PdfDocument.java
index b5306a67..5a6930e5 100644
--- a/src/main/java/com/shockwave/pdfium/PdfDocument.java
+++ b/src/main/java/com/shockwave/pdfium/PdfDocument.java
@@ -2,7 +2,7 @@
import android.graphics.RectF;
import android.os.ParcelFileDescriptor;
-import android.support.v4.util.ArrayMap;
+import androidx.collection.ArrayMap;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/com/shockwave/pdfium/PdfiumCore.java b/src/main/java/com/shockwave/pdfium/PdfiumCore.java
index 0b2421e6..4ca25763 100644
--- a/src/main/java/com/shockwave/pdfium/PdfiumCore.java
+++ b/src/main/java/com/shockwave/pdfium/PdfiumCore.java
@@ -23,11 +23,7 @@ public class PdfiumCore {
static {
try {
- System.loadLibrary("c++_shared");
- System.loadLibrary("modpng");
- System.loadLibrary("modft2");
- System.loadLibrary("modpdfium");
- System.loadLibrary("jniPdfium");
+ System.loadLibrary("pdfiumandroid");
} catch (UnsatisfiedLinkError e) {
Log.e(TAG, "Native libraries failed to load - " + e);
}
@@ -335,7 +331,7 @@ public void closeDocument(PdfDocument doc) {
try {
doc.parcelFileDescriptor.close();
} catch (IOException e) {
- /* ignore */
+ /* ignore */
}
doc.parcelFileDescriptor = null;
}
diff --git a/src/main/jni/Android.mk b/src/main/jni/Android.mk
deleted file mode 100644
index 131211ee..00000000
--- a/src/main/jni/Android.mk
+++ /dev/null
@@ -1,48 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-#Prebuilt libraries
-include $(CLEAR_VARS)
-LOCAL_MODULE := aospPdfium
-
-ARCH_PATH = $(TARGET_ARCH_ABI)
-
-LOCAL_SRC_FILES := $(LOCAL_PATH)/lib/$(ARCH_PATH)/libmodpdfium.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-#c++_shared
-include $(CLEAR_VARS)
-LOCAL_MODULE := libmodc++_shared
-
-LOCAL_SRC_FILES := $(LOCAL_PATH)/lib/$(ARCH_PATH)/libc++_shared.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-#libmodft2
-include $(CLEAR_VARS)
-LOCAL_MODULE := libmodft2
-
-LOCAL_SRC_FILES := $(LOCAL_PATH)/lib/$(ARCH_PATH)/libmodft2.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-#libmodpng
-include $(CLEAR_VARS)
-LOCAL_MODULE := libmodpng
-
-LOCAL_SRC_FILES := $(LOCAL_PATH)/lib/$(ARCH_PATH)/libmodpng.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-#Main JNI library
-include $(CLEAR_VARS)
-LOCAL_MODULE := jniPdfium
-
-LOCAL_CFLAGS += -DHAVE_PTHREADS
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
-LOCAL_SHARED_LIBRARIES += aospPdfium
-LOCAL_LDLIBS += -llog -landroid -ljnigraphics
-
-LOCAL_SRC_FILES := $(LOCAL_PATH)/src/mainJNILib.cpp
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/src/main/jni/Application.mk b/src/main/jni/Application.mk
deleted file mode 100644
index df5c5088..00000000
--- a/src/main/jni/Application.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-APP_STL := c++_shared
-APP_CPPFLAGS += -fexceptions
-
-#For ANativeWindow support
-APP_PLATFORM = android-14
-
-APP_ABI := armeabi-v7a \
- arm64-v8a \
- mips \
- mips64 \
- x86 \
- x86_64
\ No newline at end of file
diff --git a/src/main/jni/include/fpdf_dataavail.h b/src/main/jni/include/fpdf_dataavail.h
deleted file mode 100644
index 0f8ff7d6..00000000
--- a/src/main/jni/include/fpdf_dataavail.h
+++ /dev/null
@@ -1,273 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_DATAAVAIL_H_
-#define PUBLIC_FPDF_DATAAVAIL_H_
-
-#include // For size_t.
-
-#include "fpdfview.h"
-
-#define PDF_LINEARIZATION_UNKNOWN -1
-#define PDF_NOT_LINEARIZED 0
-#define PDF_LINEARIZED 1
-
-#define PDF_DATA_ERROR -1
-#define PDF_DATA_NOTAVAIL 0
-#define PDF_DATA_AVAIL 1
-
-#define PDF_FORM_ERROR -1
-#define PDF_FORM_NOTAVAIL 0
-#define PDF_FORM_AVAIL 1
-#define PDF_FORM_NOTEXIST 2
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Interface: FX_FILEAVAIL
- * Interface for checking whether the section of the file is available.
- */
-typedef struct _FX_FILEAVAIL {
- /**
- * Version number of the interface. Currently must be 1.
- */
- int version;
-
- /**
- * Method: IsDataAvail
- * Report whether the specified data section is available. A section is
- * available only if all bytes in the section is available.
- * Interface Version:
- * 1
- * Implementation Required:
- * Yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * offset - The offset of the data section in the file.
- * size - The size of the data section
- * Return Value:
- * true means the specified data section is available.
- * Comments:
- * Called by Foxit SDK to check whether the data section is ready.
- */
- FPDF_BOOL (*IsDataAvail)(struct _FX_FILEAVAIL* pThis, size_t offset, size_t size);
-} FX_FILEAVAIL;
-
-typedef void* FPDF_AVAIL;
-
-/**
-* Function: FPDFAvail_Create
-* Create a document availability provider.
-*
-* Parameters:
-* file_avail - Pointer to file availability interface to check
-* availability of file data.
-* file - Pointer to a file access interface for reading data
-* from file.
-* Return value:
-* A handle to the document availability provider. NULL for error.
-* Comments:
-* Application must call FPDFAvail_Destroy when done with the
-* availability provider.
-*/
-DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail,
- FPDF_FILEACCESS* file);
-
-/**
-* Function: FPDFAvail_Destroy
-* Destroy a document availibity provider.
-*
-* Parameters:
-* avail - Handle to document availability provider returned by
-* FPDFAvail_Create
-* Return Value:
-* None.
-*/
-DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail);
-
-/**
- * Interface: FX_DOWNLOADHINTS
- * Download hints interface. Used to receive hints for further
- * downloading.
- */
-typedef struct _FX_DOWNLOADHINTS {
- /**
- * Version number of the interface. Currently must be 1.
- */
- int version;
-
- /**
- * Method: AddSegment
- * Add a section to be downloaded.
- * Interface Version:
- * 1
- * Implementation Required:
- * Yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * offset - The offset of the hint reported to be downloaded.
- * size - The size of the hint reported to be downloaded.
- * Return Value:
- * None.
- * Comments:
- * Called by Foxit SDK to report some downloading hints for download
- * manager.
- * The position and size of section may be not accurate, part of the
- * section might be already available.
- * The download manager must deal with that to maximize download
- * efficiency.
- */
- void (*AddSegment)(struct _FX_DOWNLOADHINTS* pThis,
- size_t offset,
- size_t size);
-} FX_DOWNLOADHINTS;
-
-/**
-* Function: FPDFAvail_IsDocAvail
-* Check whether the document is ready for loading, if not, get
-* download hints.
-*
-* Parameters:
-* avail - Handle to document availability provider returned by
-* FPDFAvail_Create
-* hints - Pointer to a download hints interface, receiving
-* generated hints
-* Return value:
-* PDF_DATA_ERROR: A common error is returned. It can't tell
-* whehter data are availabe or not.
-* PDF_DATA_NOTAVAIL: Data are not yet available.
-* PDF_DATA_AVAIL: Data are available.
-* Comments:
-* Applications should call this function whenever new data arrived,
-* and process all the generated download hints if any, until the
-* function returns PDF_DATA_ERROR or PDF_DATA_AVAIL. Then
-* applications can call FPDFAvail_GetDocument() to get a document
-* handle.
-*/
-DLLEXPORT int STDCALL
-FPDFAvail_IsDocAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints);
-
-/**
-* Function: FPDFAvail_GetDocument
-* Get document from the availability provider.
-*
-* Parameters:
-* avail - Handle to document availability provider returned by
-* FPDFAvail_Create
-* password - Optional password for decrypting the PDF file.
-* Return value:
-* Handle to the document.
-* Comments:
-* After FPDFAvail_IsDocAvail() returns TRUE, the application should
-* call this function to
-* get the document handle. To close the document, use
-* FPDF_CloseDocument function.
-*/
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail,
- FPDF_BYTESTRING password);
-
-/**
-* Function: FPDFAvail_GetFirstPageNum
-* Get page number for the first available page in a linearized PDF
-*
-* Parameters:
-* doc - A document handle returned by FPDFAvail_GetDocument
-* Return Value:
-* Zero-based index for the first available page.
-* Comments:
-* For most linearized PDFs, the first available page would be just the
-* first page, however,
-* some PDFs might make other page to be the first available page.
-* For non-linearized PDF, this function will always return zero.
-*/
-DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc);
-
-/**
-* Function: FPDFAvail_IsPageAvail
-* Check whether a page is ready for loading, if not, get download
-* hints.
-*
-* Parameters:
-* avail - Handle to document availability provider returned by
-* FPDFAvail_Create
-* page_index - Index number of the page. 0 for the first page.
-* hints - Pointer to a download hints interface, receiving
-* generated hints
-* Return value:
-* PDF_DATA_ERROR: A common error is returned. It can't tell
-* whehter data are availabe or not.
-* PDF_DATA_NOTAVAIL: Data are not yet available.
-* PDF_DATA_AVAIL: Data are available.
-* Comments:
-* This function can be called only after FPDFAvail_GetDocument is
-* called. Applications should call this function whenever new data
-* arrived and process all the generated download hints if any, until
-* this function returns PDF_DATA_ERROR or PDF_DATA_AVAIL. Then
-* applications can perform page loading.
-*/
-DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail,
- int page_index,
- FX_DOWNLOADHINTS* hints);
-
-/**
-* Function: FPDFAvail_ISFormAvail
-* Check whether Form data is ready for init, if not, get download
-* hints.
-*
-* Parameters:
-* avail - Handle to document availability provider returned by
-* FPDFAvail_Create
-* hints - Pointer to a download hints interface, receiving
-* generated hints
-* Return value:
-* PDF_FORM_ERROR - A common eror, in general incorrect parameters,
-* like 'hints' is nullptr.
-* PDF_FORM_NOTAVAIL - data not available
-* PDF_FORM_AVAIL - data available
-* PDF_FORM_NOTEXIST - no form data
-* Comments:
-* This function can be called only after FPDFAvail_GetDocument is
-* called.
-* The application should call this function whenever new data arrived,
-* and process all the
-* generated download hints if any, until the function returns non-zero
-* value. Then the
-* application can perform page loading. Recommend to call
-* FPDFDOC_InitFormFillEnvironment
-* after the function returns non-zero value.
-*/
-DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail,
- FX_DOWNLOADHINTS* hints);
-
-/**
-* Function: FPDFAvail_IsLinearized
-* To check whether a document is Linearized PDF file.
-*
-* Parameters:
-* avail - Handle to document availability provider returned by
-* FPDFAvail_Create
-* Return value:
-* PDF_LINEARIZED is a linearize file.
-* PDF_NOT_LINEARIZED is not a linearize file.
-* PDF_LINEARIZATION_UNKNOWN doesn't know whether the file is a
-*linearize file.
-*
-* Comments:
-* It return PDF_LINEARIZED or PDF_NOT_LINEARIZED as soon as
-* we have first 1K data. If the file's size less than 1K, it returns
-* PDF_LINEARIZATION_UNKNOWN because there is not enough information to
-* tell whether a PDF file is a linearized file or not.
-*
-*/
-DLLEXPORT int STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_DATAAVAIL_H_
diff --git a/src/main/jni/include/fpdf_doc.h b/src/main/jni/include/fpdf_doc.h
deleted file mode 100644
index de05eb3a..00000000
--- a/src/main/jni/include/fpdf_doc.h
+++ /dev/null
@@ -1,365 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_DOC_H_
-#define PUBLIC_FPDF_DOC_H_
-
-#include "fpdfview.h"
-
-// Exported Functions
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Function: FPDFBookmark_GetFirstChild
-// Get the first child of a bookmark item, or the first top level
-// bookmark item.
-// Parameters:
-// document - Handle to the document. Returned by
-// FPDF_LoadDocument or FPDF_LoadMemDocument.
-// bookmark - Handle to the current bookmark. Can be NULL if you
-// want to get the first top level item.
-// Return value:
-// Handle to the first child or top level bookmark item. NULL if no
-// child or top level bookmark found.
-//
-DLLEXPORT FPDF_BOOKMARK STDCALL
-FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
-
-// Function: FPDFBookmark_GetNextSibling
-// Get next bookmark item at the same level.
-// Parameters:
-// document - Handle to the document. Returned by
-// FPDF_LoadDocument or FPDF_LoadMemDocument.
-// bookmark - Handle to the current bookmark. Cannot be NULL.
-// Return value:
-// Handle to the next bookmark item at the same level. NULL if this is
-// the last bookmark at this level.
-//
-DLLEXPORT FPDF_BOOKMARK STDCALL
-FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
-
-// Function: FPDFBookmark_GetTitle
-// Get title of a bookmark.
-// Parameters:
-// bookmark - Handle to the bookmark.
-// buffer - Buffer for the title. Can be NULL.
-// buflen - The length of the buffer in bytes. Can be 0.
-// Return value:
-// Number of bytes the title consumes, including trailing zeros.
-// Comments:
-// Regardless of the platform, the title is always in UTF-16LE
-// encoding. That means the buffer
-// can be treated as an array of WORD (on Intel and compatible CPUs),
-// each WORD representing the Unicode of
-// a character(some special Unicode may take 2 WORDs).The string is
-// followed by two bytes of zero
-// indicating the end of the string.
-//
-// The return value always indicates the number of bytes required for
-// the buffer, even if no buffer is specified
-// or the buffer size is less then required. In these cases, the buffer
-// will not be modified.
-//
-DLLEXPORT unsigned long STDCALL FPDFBookmark_GetTitle(FPDF_BOOKMARK bookmark,
- void* buffer,
- unsigned long buflen);
-
-// Function: FPDFBookmark_Find
-// Find a bookmark in the document, using the bookmark title.
-// Parameters:
-// document - Handle to the document. Returned by
-// FPDF_LoadDocument or FPDF_LoadMemDocument.
-// title - The UTF-16LE encoded Unicode string for the bookmark
-// title to be searched. Can't be NULL.
-// Return value:
-// Handle to the found bookmark item. NULL if the title can't be found.
-// Comments:
-// It always returns the first found bookmark if more than one
-// bookmarks have the same title.
-//
-DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document,
- FPDF_WIDESTRING title);
-
-// Function: FPDFBookmark_GetDest
-// Get the destination associated with a bookmark item.
-// Parameters:
-// document - Handle to the document.
-// bookmark - Handle to the bookmark.
-// Return value:
-// Handle to the destination data. NULL if no destination is associated
-// with this bookmark.
-//
-DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document,
- FPDF_BOOKMARK bookmark);
-
-// Function: FPDFBookmark_GetAction
-// Get the action associated with a bookmark item.
-// Parameters:
-// bookmark - Handle to the bookmark.
-// Return value:
-// Handle to the action data. NULL if no action is associated with this
-// bookmark. In this case, the
-// application should try FPDFBookmark_GetDest.
-//
-DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK bookmark);
-
-#define PDFACTION_UNSUPPORTED 0 // Unsupported action type.
-#define PDFACTION_GOTO 1 // Go to a destination within current document.
-#define PDFACTION_REMOTEGOTO 2 // Go to a destination within another document.
-#define PDFACTION_URI 3 // Universal Resource Identifier, including web
- // pages and other Internet based resources.
-#define PDFACTION_LAUNCH 4 // Launch an application or open a file.
-
-// Function: FPDFAction_GetType
-// Get type of an action.
-// Parameters:
-// action - Handle to the action.
-// Return value:
-// A type number as defined above.
-//
-DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION action);
-
-// Function: FPDFAction_GetDest
-// Get destination of an action.
-// Parameters:
-// document - Handle to the document.
-// action - Handle to the action. It must be a GOTO or
-// REMOTEGOTO action.
-// Return value:
-// Handle to the destination data.
-// Comments:
-// In case of remote goto action, the application should first use
-// FPDFAction_GetFilePath to
-// get file path, then load that particular document, and use its
-// document handle to call this
-// function.
-//
-DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document,
- FPDF_ACTION action);
-
-// Function: FPDFAction_GetFilePath
-// Get file path of a remote goto action.
-// Parameters:
-// action - Handle to the action. Must be a REMOTEGOTO or
-// LAUNCH action.
-// buffer - A buffer for output the path string. Can be NULL.
-// buflen - The length of the buffer, number of bytes. Can be 0.
-// Return value:
-// Number of bytes the file path consumes, including trailing zero.
-//
-// Comments:
-// The file path is UTF-8 encoded. The return value is the number of
-// bytes required for the buffer, even when there is no buffer
-// specified, or the buffer size is less then required. In this case,
-// the buffer will not be modified.
-//
-DLLEXPORT unsigned long STDCALL
-FPDFAction_GetFilePath(FPDF_ACTION action, void* buffer, unsigned long buflen);
-
-// Function: FPDFAction_GetURIPath
-// Get URI path of a URI action.
-// Parameters:
-// document - Handle to the document.
-// action - Handle to the action. Must be a URI action.
-// buffer - A buffer for output the path string. Can be NULL.
-// buflen - The length of the buffer, number of bytes. Can be 0.
-// Return value:
-// Number of bytes the URI path consumes, including trailing zeros.
-// Comments:
-// The URI path is always encoded in 7-bit ASCII.
-//
-// The return value is the number of bytes required for the buffer,
-// even when there is no buffer specified, or the buffer size is less
-// then required. In this case, the buffer will not be modified.
-//
-DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document,
- FPDF_ACTION action,
- void* buffer,
- unsigned long buflen);
-
-// Function: FPDFDest_GetPageIndex
-// Get page index of a destination.
-// Parameters:
-// document - Handle to the document.
-// dest - Handle to the destination.
-// Return value:
-// The page index. Starting from 0 for the first page.
-//
-DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document,
- FPDF_DEST dest);
-
-// Function: FPDFLink_GetLinkAtPoint
-// Find a link at specified point on a document page.
-// Parameters:
-// page - Handle to the document page.
-// x - The x coordinate of the point, specified in page
-// coordinate system.
-// y - The y coordinate of the point, specified in page
-// coordinate system.
-// Return value:
-// Handle to the link. NULL if no link found at that point.
-// Comments:
-// The point coordinates are specified in page coordinate system. You can
-// convert coordinates from screen system to page system using
-// FPDF_DeviceToPage().
-//
-DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page,
- double x,
- double y);
-
-// Function: FPDFLink_GetLinkZOrderAtPoint
-// Find the z-order of a link at specified point on a document page.
-// Parameters:
-// page - Handle to the document page.
-// x - The x coordinate of the point, specified in page
-// coordinate system.
-// y - The y coordinate of the point, specified in page
-// coordinate system.
-// Return value:
-// Z-order of the link, or -1 if no link found at that point.
-// Higher numbers are closer to the front.
-// Comments:
-// The point coordinates are specified in page coordinate system. You can
-// convert coordinates from screen system to page system using
-// FPDF_DeviceToPage().
-//
-DLLEXPORT int STDCALL
-FPDFLink_GetLinkZOrderAtPoint(FPDF_PAGE page, double x, double y);
-
-// Function: FPDFLink_GetDest
-// Get destination info of a link.
-// Parameters:
-// document - Handle to the document.
-// link - Handle to the link. Returned by
-// FPDFLink_GetLinkAtPoint.
-// Return value:
-// Handle to the destination. NULL if there is no destination
-// associated with the link, in this case
-// the application should try FPDFLink_GetAction.
-//
-DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document,
- FPDF_LINK link);
-
-// Function: FPDFLink_GetAction
-// Get action info of a link.
-// Parameters:
-// link - Handle to the link.
-// Return value:
-// Handle to the action. NULL if there is no action associated with the
-// link.
-//
-DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK link);
-
-// Function: FPDFLink_Enumerate
-// This function would enumerate all the link annotations in a single
-// PDF page.
-// Parameters:
-// page[in] - Handle to the page.
-// startPos[in,out] - The start position to enumerate the link
-// annotations, which should be specified to start from
-// - 0 for the first call, and would receive the
-// next position for enumerating to start from.
-// linkAnnot[out] - Receive the link handle.
-// Return value:
-// TRUE if succceed, else False;
-//
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page,
- int* startPos,
- FPDF_LINK* linkAnnot);
-
-// Function: FPDFLink_GetAnnotRect
-// Get the annotation rectangle. (Specified by the ¡°Rect¡± entry of
-// annotation dictionary).
-// Parameters:
-// linkAnnot[in] - Handle to the link annotation.
-// rect[out] - The annotation rect.
-// Return value:
-// TRUE if succceed, else False;
-//
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot,
- FS_RECTF* rect);
-
-// Function: FPDFLink_CountQuadPoints
-// Get the count of quadrilateral points to the link annotation.
-// Parameters:
-// linkAnnot[in] - Handle to the link annotation.
-// Return value:
-// The count of quadrilateral points.
-//
-DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot);
-
-/* _FS_DEF_STRUCTURE_QUADPOINTSF_ */
-#ifndef _FS_DEF_STRUCTURE_QUADPOINTSF_
-#define _FS_DEF_STRUCTURE_QUADPOINTSF_
-typedef struct _FS_QUADPOINTSF {
- FS_FLOAT x1;
- FS_FLOAT y1;
- FS_FLOAT x2;
- FS_FLOAT y2;
- FS_FLOAT x3;
- FS_FLOAT y3;
- FS_FLOAT x4;
- FS_FLOAT y4;
-} FS_QUADPOINTSF;
-#endif /* _FS_DEF_STRUCTURE_QUADPOINTSF_ */
-
-// Function: FPDFLink_GetQuadPoints
-// Get the quadrilateral points for the specified index in the link
-// annotation.
-// Parameters:
-// linkAnnot[in] - Handle to the link annotation.
-// quadIndex[in] - The specified quad points index.
-// quadPoints[out] - Receive the quadrilateral points.
-// Return value:
-// True if succeed, else False.
-//
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot,
- int quadIndex,
- FS_QUADPOINTSF* quadPoints);
-
-// Function: FPDF_GetMetaText
-// Get a text from meta data of the document. Result is encoded in
-// UTF-16LE.
-// Parameters:
-// doc - Handle to a document
-// tag - The tag for the meta data. Currently, It can be
-// "Title", "Author",
-// "Subject", "Keywords", "Creator", "Producer",
-// "CreationDate", or "ModDate".
-// For detailed explanation of these tags and their
-// respective values,
-// please refer to PDF Reference 1.6, section 10.2.1,
-// "Document Information Dictionary".
-// buffer - A buffer for output the title. Can be NULL.
-// buflen - The length of the buffer, number of bytes. Can be 0.
-// Return value:
-// Number of bytes the title consumes, including trailing zeros.
-// Comments:
-// No matter on what platform, the title is always output in UTF-16LE
-// encoding, which means the buffer
-// can be regarded as an array of WORD (on Intel and compatible CPUs),
-// each WORD represent the Unicode of
-// a character (some special Unicode may take 2 WORDs). The string is
-// followed by two bytes of zero
-// indicating end of the string.
-//
-// The return value always indicated number of bytes required for the
-// buffer, even when there is
-// no buffer specified, or the buffer size is less then required. In
-// this case, the buffer will not
-// be modified.
-//
-DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc,
- FPDF_BYTESTRING tag,
- void* buffer,
- unsigned long buflen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_DOC_H_
diff --git a/src/main/jni/include/fpdf_edit.h b/src/main/jni/include/fpdf_edit.h
deleted file mode 100644
index 64eef263..00000000
--- a/src/main/jni/include/fpdf_edit.h
+++ /dev/null
@@ -1,307 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_EDIT_H_
-#define PUBLIC_FPDF_EDIT_H_
-
-#include
-
-#include "fpdfview.h"
-
-// Define all types used in the SDK. Note they can be simply regarded as opaque
-// pointers
-// or long integer numbers.
-
-#define FPDF_ARGB(a, r, g, b) \
- ((((uint32_t)(((uint8_t)(b) | ((FX_WORD)((uint8_t)(g)) << 8)) | \
- (((FX_DWORD)(uint8_t)(r)) << 16)))) | \
- (((FX_DWORD)(uint8_t)(a)) << 24))
-#define FPDF_GetBValue(argb) ((uint8_t)(argb))
-#define FPDF_GetGValue(argb) ((uint8_t)(((uint16_t)(argb)) >> 8))
-#define FPDF_GetRValue(argb) ((uint8_t)((argb) >> 16))
-#define FPDF_GetAValue(argb) ((uint8_t)((argb) >> 24))
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//////////////////////////////////////////////////////////////////////
-//
-// Document functions
-//
-//////////////////////////////////////////////////////////////////////
-
-// Function: FPDF_CreateNewDocument
-// Create a new PDF document.
-// Parameters:
-// None.
-// Return value:
-// A handle to a document. If failed, NULL is returned.
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument();
-
-//////////////////////////////////////////////////////////////////////
-//
-// Page functions
-//
-//////////////////////////////////////////////////////////////////////
-
-// Function: FPDFPage_New
-// Construct an empty page.
-// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument
-// and FPDF_CreateNewDocument.
-// page_index - The index of a page.
-// width - The page width.
-// height - The page height.
-// Return value:
-// The handle to the page.
-// Comments:
-// Loaded page can be deleted by FPDFPage_Delete.
-DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document,
- int page_index,
- double width,
- double height);
-
-// Function: FPDFPage_Delete
-// Delete a PDF page.
-// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument
-// and FPDF_CreateNewDocument.
-// page_index - The index of a page.
-// Return value:
-// None.
-DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index);
-
-// Function: FPDFPage_GetRotation
-// Get the page rotation. One of following values will be returned:
-// 0(0), 1(90), 2(180), 3(270).
-// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or
-// FPDF_LoadPage.
-// Return value:
-// The PDF page rotation.
-// Comment:
-// The PDF page rotation is rotated clockwise.
-DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page);
-
-// Function: FPDFPage_SetRotation
-// Set page rotation. One of following values will be set: 0(0), 1(90),
-// 2(180), 3(270).
-// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or
-// FPDF_LoadPage.
-// rotate - The value of the PDF page rotation.
-// Return value:
-// None.
-// Comment:
-// The PDF page rotation is rotated clockwise.
-//
-DLLEXPORT void STDCALL FPDFPage_SetRotation(FPDF_PAGE page, int rotate);
-
-// Function: FPDFPage_InsertObject
-// Insert an object to the page. The page object is automatically
-// freed.
-// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or
-// FPDF_LoadPage.
-// page_obj - Handle to a page object. Returned by
-// FPDFPageObj_NewTextObj,FPDFPageObj_NewTextObjEx and
-// FPDFPageObj_NewPathObj.
-// Return value:
-// None.
-DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page,
- FPDF_PAGEOBJECT page_obj);
-
-// Function: FPDFPage_CountObject
-// Get number of page objects inside the page.
-// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or
-// FPDF_LoadPage.
-// Return value:
-// The number of the page object.
-DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page);
-
-// Function: FPDFPage_GetObject
-// Get page object by index.
-// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or
-// FPDF_LoadPage.
-// index - The index of a page object.
-// Return value:
-// The handle of the page object. Null for failed.
-DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page, int index);
-
-// Function: FPDFPage_HasTransparency
-// Check that whether the content of specified PDF page contains
-// transparency.
-// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or
-// FPDF_LoadPage.
-// Return value:
-// TRUE means that the PDF page does contains transparency.
-// Otherwise, returns FALSE.
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_HasTransparency(FPDF_PAGE page);
-
-// Function: FPDFPage_GenerateContent
-// Generate PDF Page content.
-// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or
-// FPDF_LoadPage.
-// Return value:
-// True if successful, false otherwise.
-// Comment:
-// Before you save the page to a file, or reload the page, you must
-// call the FPDFPage_GenerateContent function.
-// Or the changed information will be lost.
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GenerateContent(FPDF_PAGE page);
-
-//////////////////////////////////////////////////////////////////////
-//
-// Page Object functions
-//
-//////////////////////////////////////////////////////////////////////
-
-// Function: FPDFPageObj_HasTransparency
-// Check that whether the specified PDF page object contains
-// transparency.
-// Parameters:
-// pageObject - Handle to a page object.
-// Return value:
-// TRUE means that the PDF page object does contains transparency.
-// Otherwise, returns FALSE.
-DLLEXPORT FPDF_BOOL STDCALL
-FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject);
-
-// Function: FPDFPageObj_Transform
-// Transform (scale, rotate, shear, move) page object.
-// Parameters:
-// page_object - Handle to a page object. Returned by
-// FPDFPageObj_NewImageObj.
-// a - The coefficient "a" of the matrix.
-// b - The coefficient "b" of the matrix.
-// c - The coefficient "c" of the matrix.
-// d - The coefficient "d" of the matrix.
-// e - The coefficient "e" of the matrix.
-// f - The coefficient "f" of the matrix.
-// Return value:
-// None.
-DLLEXPORT void STDCALL FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
- double a,
- double b,
- double c,
- double d,
- double e,
- double f);
-
-// Function: FPDFPage_TransformAnnots
-// Transform (scale, rotate, shear, move) all annots in a page.
-// Parameters:
-// page - Handle to a page.
-// a - The coefficient "a" of the matrix.
-// b - The coefficient "b" of the matrix.
-// c - The coefficient "c" of the matrix.
-// d - The coefficient "d" of the matrix.
-// e - The coefficient "e" of the matrix.
-// f - The coefficient "f" of the matrix.
-// Return value:
-// None.
-DLLEXPORT void STDCALL FPDFPage_TransformAnnots(FPDF_PAGE page,
- double a,
- double b,
- double c,
- double d,
- double e,
- double f);
-
-// The page object constants.
-#define FPDF_PAGEOBJ_TEXT 1
-#define FPDF_PAGEOBJ_PATH 2
-#define FPDF_PAGEOBJ_IMAGE 3
-#define FPDF_PAGEOBJ_SHADING 4
-#define FPDF_PAGEOBJ_FORM 5
-
-//////////////////////////////////////////////////////////////////////
-//
-// Image functions
-//
-//////////////////////////////////////////////////////////////////////
-
-// Function: FPDFPageObj_NewImgeObj
-// Create a new Image Object.
-// Parameters:
-// document - Handle to document. Returned by
-// FPDF_LoadDocument or FPDF_CreateNewDocument function.
-// Return Value:
-// Handle of image object.
-DLLEXPORT FPDF_PAGEOBJECT STDCALL
-FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document);
-
-// Function: FPDFImageObj_LoadJpegFile
-// Load Image from a JPEG image file and then set it to an image
-// object.
-// Parameters:
-// pages - Pointers to the start of all loaded pages, could
-// be NULL.
-// nCount - Number of pages, could be 0.
-// image_object - Handle of image object returned by
-// FPDFPageObj_NewImgeObj.
-// fileAccess - The custom file access handler, which specifies
-// the JPEG image file.
-// Return Value:
-// TRUE if successful, FALSE otherwise.
-// Note:
-// The image object might already has an associated image, which is
-// shared and cached by the loaded pages, In this case, we need to
-// clear the cache of image for all the loaded pages.
-// Pass pages and count to this API to clear the image cache.
-DLLEXPORT FPDF_BOOL STDCALL
-FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages,
- int nCount,
- FPDF_PAGEOBJECT image_object,
- FPDF_FILEACCESS* fileAccess);
-
-// Function: FPDFImageObj_SetMatrix
-// Set the matrix of an image object.
-// Parameters:
-// image_object - Handle of image object returned by
-// FPDFPageObj_NewImgeObj.
-// a - The coefficient "a" of the matrix.
-// b - The coefficient "b" of the matrix.
-// c - The coefficient "c" of the matrix.
-// d - The coefficient "d" of the matrix.
-// e - The coefficient "e" of the matrix.
-// f - The coefficient "f" of the matrix.
-// Return value:
-// TRUE if successful, FALSE otherwise.
-DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetMatrix(FPDF_PAGEOBJECT image_object,
- double a,
- double b,
- double c,
- double d,
- double e,
- double f);
-
-// Function: FPDFImageObj_SetBitmap
-// Set the bitmap to an image object.
-// Parameters:
-// pages - Pointer's to the start of all loaded pages.
-// nCount - Number of pages.
-// image_object - Handle of image object returned by
-// FPDFPageObj_NewImgeObj.
-// bitmap - The handle of the bitmap which you want to set
-// it to the image object.
-// Return value:
-// TRUE if successful, FALSE otherwise.
-DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages,
- int nCount,
- FPDF_PAGEOBJECT image_object,
- FPDF_BITMAP bitmap);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_EDIT_H_
diff --git a/src/main/jni/include/fpdf_ext.h b/src/main/jni/include/fpdf_ext.h
deleted file mode 100644
index c80dcbbf..00000000
--- a/src/main/jni/include/fpdf_ext.h
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_EXT_H_
-#define PUBLIC_FPDF_EXT_H_
-
-#include "fpdfview.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// flags for type of unsupport object.
-#define FPDF_UNSP_DOC_XFAFORM 1
-#define FPDF_UNSP_DOC_PORTABLECOLLECTION 2
-#define FPDF_UNSP_DOC_ATTACHMENT 3
-#define FPDF_UNSP_DOC_SECURITY 4
-#define FPDF_UNSP_DOC_SHAREDREVIEW 5
-#define FPDF_UNSP_DOC_SHAREDFORM_ACROBAT 6
-#define FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM 7
-#define FPDF_UNSP_DOC_SHAREDFORM_EMAIL 8
-#define FPDF_UNSP_ANNOT_3DANNOT 11
-#define FPDF_UNSP_ANNOT_MOVIE 12
-#define FPDF_UNSP_ANNOT_SOUND 13
-#define FPDF_UNSP_ANNOT_SCREEN_MEDIA 14
-#define FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA 15
-#define FPDF_UNSP_ANNOT_ATTACHMENT 16
-#define FPDF_UNSP_ANNOT_SIG 17
-
-typedef struct _UNSUPPORT_INFO {
- /**
- * Version number of the interface. Currently must be 1.
- **/
- int version;
-
- /**
- * Method: FSDK_UnSupport_Handler
- * UnSupport Object process handling function.
- * Interface Version:
- * 1
- * Implementation Required:
- * Yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * nType - The type of unsupportObject
- * Return value:
- * None.
- * */
-
- void (*FSDK_UnSupport_Handler)(struct _UNSUPPORT_INFO* pThis, int nType);
-} UNSUPPORT_INFO;
-
-/**
- * Function: FSDK_SetUnSpObjProcessHandler
- * Setup A UnSupport Object process handler for foxit sdk.
- * Parameters:
- * unsp_info - Pointer to a UNSUPPORT_INFO structure.
- * Return Value:
- * TRUE means successful. FALSE means fails.
- **/
-
-DLLEXPORT FPDF_BOOL STDCALL
-FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info);
-
-// flags for page mode.
-
-// Unknown value
-#define PAGEMODE_UNKNOWN -1
-
-// Neither document outline nor thumbnail images visible
-#define PAGEMODE_USENONE 0
-
-// Document outline visible
-#define PAGEMODE_USEOUTLINES 1
-
-// Thumbnial images visible
-#define PAGEMODE_USETHUMBS 2
-
-// Full-screen mode, with no menu bar, window controls, or any other window
-// visible
-#define PAGEMODE_FULLSCREEN 3
-
-// Optional content group panel visible
-#define PAGEMODE_USEOC 4
-
-// Attachments panel visible
-#define PAGEMODE_USEATTACHMENTS 5
-
-/**
- * Function: FPDFDoc_GetPageMode
- * Get the document's PageMode(How the document should be displayed
- *when opened)
- * Parameters:
- * doc - Handle to document. Returned by FPDF_LoadDocument
- *function.
- * Return Value:
- * The flags for page mode.
- **/
-DLLEXPORT int FPDFDoc_GetPageMode(FPDF_DOCUMENT document);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_EXT_H_
diff --git a/src/main/jni/include/fpdf_flatten.h b/src/main/jni/include/fpdf_flatten.h
deleted file mode 100644
index af77c293..00000000
--- a/src/main/jni/include/fpdf_flatten.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_FLATTEN_H_
-#define PUBLIC_FPDF_FLATTEN_H_
-
-#include "fpdfview.h"
-
-// Result codes.
-#define FLATTEN_FAIL 0 // Flatten operation failed.
-#define FLATTEN_SUCCESS 1 // Flatten operation succeed.
-#define FLATTEN_NOTHINGTODO 2 // There is nothing to be flattened.
-
-// Flags.
-#define FLAT_NORMALDISPLAY 0
-#define FLAT_PRINT 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Function: FPDFPage_Flatten
-// Make annotations and form fields become part of the page contents
-// itself.
-// Parameters:
-// page - Handle to the page, as returned by FPDF_LoadPage().
-// nFlag - Intended use of the flattened result: 0 for normal display,
-// 1 for printing.
-// Return value:
-// Either FLATTEN_FAIL, FLATTEN_SUCCESS, or FLATTEN_NOTHINGTODO (see
-// above).
-// Comments:
-// Currently, all failures return FLATTEN_FAIL, with no indication for
-// the reason
-// for the failure.
-DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_FLATTEN_H_
diff --git a/src/main/jni/include/fpdf_formfill.h b/src/main/jni/include/fpdf_formfill.h
deleted file mode 100644
index b3bbb928..00000000
--- a/src/main/jni/include/fpdf_formfill.h
+++ /dev/null
@@ -1,1695 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_FORMFILL_H_
-#define PUBLIC_FPDF_FORMFILL_H_
-
-#include "fpdfview.h"
-
-typedef void* FPDF_FORMHANDLE;
-
-#ifdef PDF_ENABLE_XFA
-#define DOCTYPE_PDF 0 // Normal pdf Document
-#define DOCTYPE_DYNAMIC_XFA 1 // Dynamic xfa Document Type
-#define DOCTYPE_STATIC_XFA 2 // Static xfa Document Type
-#endif // PDF_ENABLE_XFA
-
-// Exported Functions
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct _IPDF_JsPlatform {
- /**
- * Version number of the interface. Currently must be 2.
- **/
- int version;
-
- /* Version 1. */
-
- /**
- * Method: app_alert
- * pop up a dialog to show warning or hint.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * Msg - A string containing the message to be displayed.
- * Title - The title of the dialog.
- * Type - The stype of button group.
- * 0-OK(default);
- * 1-OK,Cancel;
- * 2-Yes,NO;
- * 3-Yes, NO, Cancel.
- * nIcon - The Icon type.
- * 0-Error(default);
- * 1-Warning;
- * 2-Question;
- * 3-Status.
- * 4-Asterisk
- * Return Value:
- * The return value could be the folowing type:
- * 1-OK;
- * 2-Cancel;
- * 3-NO;
- * 4-Yes;
- */
- int (*app_alert)(struct _IPDF_JsPlatform* pThis,
- FPDF_WIDESTRING Msg,
- FPDF_WIDESTRING Title,
- int Type,
- int Icon);
-
- /**
- * Method: app_beep
- * Causes the system to play a sound.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * nType - The sound type.
- * 0 - Error
- * 1 - Warning
- * 2 - Question
- * 3 - Status
- * 4 - Default (default value)
- * Return Value:
- * None
- */
- void (*app_beep)(struct _IPDF_JsPlatform* pThis, int nType);
-
- /**
- * Method: app_response
- * Displays a dialog box containing a question and an entry field for
- * the user to reply to the question.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * Question - The question to be posed to the user.
- * Title - The title of the dialog box.
- * Default - A default value for the answer to the question. If
- * not specified, no default value is presented.
- * cLabel - A short string to appear in front of and on the
- * same line as the edit text field.
- * bPassword - If true, indicates that the user's response should
- * show as asterisks (*) or bullets (?) to mask the response, which might be
- * sensitive information. The default is false.
- * response - A string buffer allocated by SDK, to receive the
- * user's response.
- * length - The length of the buffer, number of bytes.
- * Currently, It's always be 2048.
- * Return Value:
- * Number of bytes the complete user input would actually require, not
- * including trailing zeros, regardless of the value of the length
- * parameter or the presence of the response buffer.
- * Comments:
- * No matter on what platform, the response buffer should be always
- * written using UTF-16LE encoding. If a response buffer is
- * present and the size of the user input exceeds the capacity of the
- * buffer as specified by the length parameter, only the
- * first "length" bytes of the user input are to be written to the
- * buffer.
- */
- int (*app_response)(struct _IPDF_JsPlatform* pThis,
- FPDF_WIDESTRING Question,
- FPDF_WIDESTRING Title,
- FPDF_WIDESTRING Default,
- FPDF_WIDESTRING cLabel,
- FPDF_BOOL bPassword,
- void* response,
- int length);
-
- /*
- * Method: Doc_getFilePath
- * Get the file path of the current document.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * filePath - The string buffer to receive the file path. Can be
- * NULL.
- * length - The length of the buffer, number of bytes. Can be
- * 0.
- * Return Value:
- * Number of bytes the filePath consumes, including trailing zeros.
- * Comments:
- * The filePath should be always input in local encoding.
- *
- * The return value always indicated number of bytes required for the
- * buffer, even when there is
- * no buffer specified, or the buffer size is less then required. In this
- * case, the buffer will not
- * be modified.
- */
- int (*Doc_getFilePath)(struct _IPDF_JsPlatform* pThis,
- void* filePath,
- int length);
-
- /*
- * Method: Doc_mail
- * Mails the data buffer as an attachment to all recipients, with or
- * without user interaction.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * mailData - Pointer to the data buffer to be sent.Can be NULL.
- * length - The size,in bytes, of the buffer pointed by
- * mailData parameter.Can be 0.
- * bUI - If true, the rest of the parameters are used in a
- * compose-new-message window that is displayed to the user. If false, the cTo
- * parameter is required and all others are optional.
- * To - A semicolon-delimited list of recipients for the
- * message.
- * Subject - The subject of the message. The length limit is 64
- * KB.
- * CC - A semicolon-delimited list of CC recipients for
- * the message.
- * BCC - A semicolon-delimited list of BCC recipients for
- * the message.
- * Msg - The content of the message. The length limit is 64
- * KB.
- * Return Value:
- * None.
- * Comments:
- * If the parameter mailData is NULL or length is 0, the current
- * document will be mailed as an attachment to all recipients.
- */
- void (*Doc_mail)(struct _IPDF_JsPlatform* pThis,
- void* mailData,
- int length,
- FPDF_BOOL bUI,
- FPDF_WIDESTRING To,
- FPDF_WIDESTRING Subject,
- FPDF_WIDESTRING CC,
- FPDF_WIDESTRING BCC,
- FPDF_WIDESTRING Msg);
-
- /*
- * Method: Doc_print
- * Prints all or a specific number of pages of the document.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * bUI - If true, will cause a UI to be presented to the
- * user to obtain printing information and confirm the action.
- * nStart - A 0-based index that defines the start of an
- * inclusive range of pages.
- * nEnd - A 0-based index that defines the end of an
- * inclusive page range.
- * bSilent - If true, suppresses the cancel dialog box while
- * the document is printing. The default is false.
- * bShrinkToFit - If true, the page is shrunk (if necessary) to
- * fit within the imageable area of the printed page.
- * bPrintAsImage - If true, print pages as an image.
- * bReverse - If true, print from nEnd to nStart.
- * bAnnotations - If true (the default), annotations are
- * printed.
- */
- void (*Doc_print)(struct _IPDF_JsPlatform* pThis,
- FPDF_BOOL bUI,
- int nStart,
- int nEnd,
- FPDF_BOOL bSilent,
- FPDF_BOOL bShrinkToFit,
- FPDF_BOOL bPrintAsImage,
- FPDF_BOOL bReverse,
- FPDF_BOOL bAnnotations);
-
- /*
- * Method: Doc_submitForm
- * Send the form data to a specified URL.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * formData - Pointer to the data buffer to be sent.
- * length - The size,in bytes, of the buffer pointed by
- * formData parameter.
- * URL - The URL to send to.
- * Return Value:
- * None.
- *
- */
- void (*Doc_submitForm)(struct _IPDF_JsPlatform* pThis,
- void* formData,
- int length,
- FPDF_WIDESTRING URL);
-
- /*
- * Method: Doc_gotoPage
- * Jump to a specified page.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * nPageNum - The specified page number, zero for the first
- * page.
- * Return Value:
- * None.
- *
- */
- void (*Doc_gotoPage)(struct _IPDF_JsPlatform* pThis, int nPageNum);
- /*
- * Method: Field_browse
- * Show a file selection dialog, and return the selected file path.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * filePath - Pointer to the data buffer to receive the file
- * path.Can be NULL.
- * length - The length of the buffer, number of bytes. Can be
- * 0.
- * Return Value:
- * Number of bytes the filePath consumes, including trailing zeros.
- * Comments:
- * The filePath shoule be always input in local encoding.
- */
- int (*Field_browse)(struct _IPDF_JsPlatform* pThis,
- void* filePath,
- int length);
-
- /**
- * pointer to FPDF_FORMFILLINFO interface.
- **/
- void* m_pFormfillinfo;
-
- /* Version 2. */
-
- void* m_isolate; /* Unused in v3, retain for compatibility. */
- unsigned int m_v8EmbedderSlot; /* Unused in v3, retain for compatibility. */
-
- /* Version 3. */
- /* Version 3 moves m_Isolate and m_v8EmbedderSlot to FPDF_LIBRARY_CONFIG. */
-
-} IPDF_JSPLATFORM;
-
-// Flags for Cursor type
-#define FXCT_ARROW 0
-#define FXCT_NESW 1
-#define FXCT_NWSE 2
-#define FXCT_VBEAM 3
-#define FXCT_HBEAM 4
-#define FXCT_HAND 5
-
-/**
- * Declares of a pointer type to the callback function for the FFI_SetTimer
- *method.
- * Parameters:
- * idEvent - Identifier of the timer.
- * Return value:
- * None.
- **/
-typedef void (*TimerCallback)(int idEvent);
-
-/**
- * Declares of a struct type to the local system time.
-**/
-typedef struct _FPDF_SYSTEMTIME {
- unsigned short wYear; /* years since 1900 */
- unsigned short wMonth; /* months since January - [0,11] */
- unsigned short wDayOfWeek; /* days since Sunday - [0,6] */
- unsigned short wDay; /* day of the month - [1,31] */
- unsigned short wHour; /* hours since midnight - [0,23] */
- unsigned short wMinute; /* minutes after the hour - [0,59] */
- unsigned short wSecond; /* seconds after the minute - [0,59] */
- unsigned short wMilliseconds; /* milliseconds after the second - [0,999] */
-} FPDF_SYSTEMTIME;
-
-#ifdef PDF_ENABLE_XFA
-// XFA
-/**
- * @name Pageview event flags
- */
-/*@{*/
-/** @brief After a new pageview is added. */
-#define FXFA_PAGEVIEWEVENT_POSTADDED 1
-/** @brief After a pageview is removed. */
-#define FXFA_PAGEVIEWEVENT_POSTREMOVED 3
-/*@}*/
-
-// menu
-/**
- * @name Macro Definitions for Right Context Menu Features Of XFA Fields
- */
-/*@{*/
-#define FXFA_MEMU_COPY 1
-#define FXFA_MEMU_CUT 2
-#define FXFA_MEMU_SELECTALL 4
-#define FXFA_MEMU_UNDO 8
-#define FXFA_MEMU_REDO 16
-#define FXFA_MEMU_PASTE 32
-/*@}*/
-
-// file type
-/**
- * @name Macro Definitions for File Type.
- */
-/*@{*/
-#define FXFA_SAVEAS_XML 1
-#define FXFA_SAVEAS_XDP 2
-/*@}*/
-#endif // PDF_ENABLE_XFA
-
-typedef struct _FPDF_FORMFILLINFO {
- /**
- * Version number of the interface. Currently must be 1 (when PDFium is built
- * without the XFA module) or must be 2 (when built with the XFA module).
- **/
- int version;
-
- /* Version 1. */
- /**
- *Method: Release
- * Give implementation a chance to release any data after the
- * interface is no longer used
- *Interface Version:
- * 1
- *Implementation Required:
- * No
- *Comments:
- * Called by Foxit SDK during the final cleanup process.
- *Parameters:
- * pThis - Pointer to the interface structure itself
- *Return Value:
- * None
- */
- void (*Release)(struct _FPDF_FORMFILLINFO* pThis);
-
- /**
- * Method: FFI_Invalidate
- * Invalidate the client area within the specified rectangle.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * page - Handle to the page. Returned by FPDF_LoadPage
- *function.
- * left - Left position of the client area in PDF page
- *coordinate.
- * top - Top position of the client area in PDF page
- *coordinate.
- * right - Right position of the client area in PDF page
- *coordinate.
- * bottom - Bottom position of the client area in PDF page
- *coordinate.
- * Return Value:
- * None.
- *
- *comments:
- * All positions are measured in PDF "user space".
- * Implementation should call FPDF_RenderPageBitmap() function for
- *repainting a specified page area.
- */
- void (*FFI_Invalidate)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_PAGE page,
- double left,
- double top,
- double right,
- double bottom);
-
- /**
- * Method: FFI_OutputSelectedRect
- * When user is taking the mouse to select texts on a form field,
- * this callback function will keep
- * returning the selected areas to the implementation.
- *
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * page - Handle to the page. Returned by FPDF_LoadPage
- * function.
- * left - Left position of the client area in PDF page
- * coordinate.
- * top - Top position of the client area in PDF page
- * coordinate.
- * right - Right position of the client area in PDF page
- * coordinate.
- * bottom - Bottom position of the client area in PDF page
- * coordinate.
- * Return Value:
- * None.
- *
- * comments:
- * This CALLBACK function is useful for implementing special text
- * selection effect. Implementation should
- * first records the returned rectangles, then draw them one by one
- * at the painting period, last,remove all
- * the recorded rectangles when finish painting.
- */
- void (*FFI_OutputSelectedRect)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_PAGE page,
- double left,
- double top,
- double right,
- double bottom);
-
- /**
- * Method: FFI_SetCursor
- * Set the Cursor shape.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * nCursorType - Cursor type. see Flags for Cursor type for the
- * details.
- * Return value:
- * None.
- * */
- void (*FFI_SetCursor)(struct _FPDF_FORMFILLINFO* pThis, int nCursorType);
-
- /**
- * Method: FFI_SetTimer
- * This method installs a system timer. A time-out value is
- * specified,
- * and every time a time-out occurs, the system passes a message to
- * the TimerProc callback function.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * uElapse - Specifies the time-out value, in milliseconds.
- * lpTimerFunc - A pointer to the callback function-TimerCallback.
- * Return value:
- * The timer identifier of the new timer if the function is successful.
- * An application passes this value to the FFI_KillTimer method to kill
- * the timer. Nonzero if it is successful; otherwise, it is zero.
- * */
- int (*FFI_SetTimer)(struct _FPDF_FORMFILLINFO* pThis,
- int uElapse,
- TimerCallback lpTimerFunc);
-
- /**
- * Method: FFI_KillTimer
- * This method kills the timer event identified by nIDEvent, set by
- * an earlier call to FFI_SetTimer.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * nTimerID - The timer ID return by FFI_SetTimer function.
- * Return value:
- * None.
- * */
- void (*FFI_KillTimer)(struct _FPDF_FORMFILLINFO* pThis, int nTimerID);
-
- /**
- * Method: FFI_GetLocalTime
- * This method receives the current local time on the system.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * Return value:
- * None.
- * */
- FPDF_SYSTEMTIME (*FFI_GetLocalTime)(struct _FPDF_FORMFILLINFO* pThis);
-
- /**
- * Method: FFI_OnChange
- * This method will be invoked to notify implementation when the
- * value of any FormField on the document had been changed.
- * Interface Version:
- * 1
- * Implementation Required:
- * no
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * Return value:
- * None.
- * */
- void (*FFI_OnChange)(struct _FPDF_FORMFILLINFO* pThis);
-
- /**
- * Method: FFI_GetPage
- * This method receives the page pointer associated with a specified
- * page index.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * document - Handle to document. Returned by FPDF_LoadDocument
- * function.
- * nPageIndex - Index number of the page. 0 for the first page.
- * Return value:
- * Handle to the page. Returned by FPDF_LoadPage function.
- * Comments:
- * In some cases, the document-level JavaScript action may refer to a
- * page which hadn't been loaded yet.
- * To successfully run the javascript action, implementation need to load
- * the page for SDK.
- * */
- FPDF_PAGE (*FFI_GetPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document, int nPageIndex);
-
- /**
- * Method: FFI_GetCurrentPage
- * This method receives the current page pointer.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * document - Handle to document. Returned by FPDF_LoadDocument
- * function.
- * Return value:
- * Handle to the page. Returned by FPDF_LoadPage function.
- * */
- FPDF_PAGE (*FFI_GetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document);
-
- /**
- * Method: FFI_GetRotation
- * This method receives currently rotation of the page view.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * page - Handle to page. Returned by FPDF_LoadPage function.
- * Return value:
- * The page rotation. Should be 0(0 degree),1(90 degree),2(180
- * degree),3(270 degree), in a clockwise direction.
- * */
- int (*FFI_GetRotation)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page);
-
- /**
- * Method: FFI_ExecuteNamedAction
- * This method will execute an named action.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * namedAction - A byte string which indicates the named action,
- * terminated by 0.
- * Return value:
- * None.
- * Comments:
- * See the named actions description of <>
- * for more details.
- * */
- void (*FFI_ExecuteNamedAction)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_BYTESTRING namedAction);
- /**
- * @brief This method will be called when a text field is getting or losing a
- * focus.
- *
- * @param[in] pThis Pointer to the interface structure itself.
- * @param[in] value The string value of the form field, in UTF-16LE
- * format.
- * @param[in] valueLen The length of the string value, number of characters
- * (not bytes).
- * @param[in] is_focus True if the form field is getting a focus, False for
- * losing a focus.
- *
- * @return None.
- *
- * @note Currently,only support text field and combobox field.
- * */
- void (*FFI_SetTextFieldFocus)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_WIDESTRING value,
- FPDF_DWORD valueLen,
- FPDF_BOOL is_focus);
-
- /**
- * Method: FFI_DoURIAction
- * This action resolves to a uniform resource identifier.
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * bsURI - A byte string which indicates the uniform resource
- * identifier, terminated by 0.
- * Return value:
- * None.
- * Comments:
- * See the URI actions description of <> for
- * more details.
- * */
- void (*FFI_DoURIAction)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_BYTESTRING bsURI);
-
- /**
- * Method: FFI_DoGoToAction
- * This action changes the view to a specified destination.
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * nPageIndex - The index of the PDF page.
- * zoomMode - The zoom mode for viewing page.See Macros
- *"PDFZOOM_XXX" defined in "fpdfdoc.h".
- * fPosArray - The float array which carries the position info.
- * sizeofArray - The size of float array.
- * Return value:
- * None.
- * Comments:
- * See the Destinations description of <> in
- *8.2.1 for more details.
- **/
- void (*FFI_DoGoToAction)(struct _FPDF_FORMFILLINFO* pThis,
- int nPageIndex,
- int zoomMode,
- float* fPosArray,
- int sizeofArray);
-
- /**
- * pointer to IPDF_JSPLATFORM interface
- **/
- IPDF_JSPLATFORM* m_pJsPlatform;
-
-#ifdef PDF_ENABLE_XFA
- /* Version 2. */
- /**
- * Method: FFI_DisplayCaret
- * This method will show the caret at specified position.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * page - Handle to page. Returned by FPDF_LoadPage
- *function.
- * left - Left position of the client area in PDF page
- *coordinate.
- * top - Top position of the client area in PDF page
- *coordinate.
- * right - Right position of the client area in PDF page
- *coordinate.
- * bottom - Bottom position of the client area in PDF page
- *coordinate.
- * Return value:
- * None.
- **/
- void (*FFI_DisplayCaret)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_PAGE page,
- FPDF_BOOL bVisible,
- double left,
- double top,
- double right,
- double bottom);
-
- /**
- * Method: FFI_GetCurrentPageIndex
- * This method will get the current page index.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * document - Handle to document. Returned by FPDF_LoadDocument
- *function.
- * Return value:
- * The index of current page.
- **/
- int (*FFI_GetCurrentPageIndex)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_DOCUMENT document);
-
- /**
- * Method: FFI_SetCurrentPage
- * This method will set the current page.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * document - Handle to document. Returned by FPDF_LoadDocument
- *function.
- * iCurPage - The index of the PDF page.
- * Return value:
- * None.
- **/
- void (*FFI_SetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_DOCUMENT document,
- int iCurPage);
-
- /**
- * Method: FFI_GotoURL
- * This method will link to the specified URL.
- * Interface Version:
- * 1
- * Implementation Required:
- * no
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * document - Handle to document. Returned by FPDF_LoadDocument
- *function.
- * wsURL - The string value of the URL, in UTF-16LE format.
- * Return value:
- * None.
- **/
- void (*FFI_GotoURL)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_DOCUMENT document,
- FPDF_WIDESTRING wsURL);
-
- /**
- * Method: FFI_GetPageViewRect
- * This method will get the current page view rectangle.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * page - Handle to page. Returned by FPDF_LoadPage
- *function.
- * left - The pointer to receive left position of the page
- *view area in PDF page coordinate.
- * top - The pointer to receive top position of the page
- *view area in PDF page coordinate.
- * right - The pointer to receive right position of the
- *client area in PDF page coordinate.
- * bottom - The pointer to receive bottom position of the
- *client area in PDF page coordinate.
- * Return value:
- * None.
- **/
- void (*FFI_GetPageViewRect)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_PAGE page,
- double* left,
- double* top,
- double* right,
- double* bottom);
- /**
- * Method: FFI_PopupMenu
- * This method will track the right context menu for XFA fields.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * page - Handle to page. Returned by FPDF_LoadPage
- *function.
- * hWidget - Handle to XFA fields.
- * menuFlag - The menu flags. Please refer to macro definition
- *of FXFA_MEMU_XXX and this can be one or a combination of these macros.
- * x - X position of the client area in PDF page
- *coordinate.
- * y - Y position of the client area in PDF page
- *coordinate.
- * Return value:
- * TRUE indicates success; otherwise false.
- **/
- FPDF_BOOL (*FFI_PopupMenu)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page, FPDF_WIDGET hWidget, int menuFlag, float x, float y);
-
- /**
- * Method: FFI_OpenFile
- * This method will open the specified file with the specified mode.
- * Interface Version
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * fileFlag - The file flag.Please refer to macro definition of
- *FXFA_SAVEAS_XXX and this can be one of these macros.
- * wsURL - The string value of the file URL, in UTF-16LE
- *format.
- * mode - The mode for open file.
- * Return value:
- * The handle to FPDF_FILEHANDLER.
- **/
- FPDF_FILEHANDLER* (*FFI_OpenFile)(struct _FPDF_FORMFILLINFO* pThis,
- int fileFlag,
- FPDF_WIDESTRING wsURL,
- const char* mode);
-
- /**
- * Method: FFI_EmailTo
- * This method will email the specified file stream to the specified
- *contacter.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * pFileHandler - Handle to the FPDF_FILEHANDLER.
- * pTo - A semicolon-delimited list of recipients for the
- *message,in UTF-16LE format.
- * pSubject - The subject of the message,in UTF-16LE format.
- * pCC - A semicolon-delimited list of CC recipients for
- *the message,in UTF-16LE format.
- * pBcc - A semicolon-delimited list of BCC recipients for
- *the message,in UTF-16LE format.
- * pMsg - Pointer to the data buffer to be sent.Can be
- *NULL,in UTF-16LE format.
- * Return value:
- * None.
- **/
- void (*FFI_EmailTo)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_FILEHANDLER* fileHandler,
- FPDF_WIDESTRING pTo,
- FPDF_WIDESTRING pSubject,
- FPDF_WIDESTRING pCC,
- FPDF_WIDESTRING pBcc,
- FPDF_WIDESTRING pMsg);
-
- /**
- * Method: FFI_UploadTo
- * This method will get upload the specified file stream to the
- *specified URL.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * pFileHandler - Handle to the FPDF_FILEHANDLER.
- * fileFlag - The file flag.Please refer to macro definition of
- *FXFA_SAVEAS_XXX and this can be one of these macros.
- * uploadTo - Pointer to the URL path, in UTF-16LE format.
- * Return value:
- * None.
- **/
- void (*FFI_UploadTo)(struct _FPDF_FORMFILLINFO* pThis,
- FPDF_FILEHANDLER* fileHandler,
- int fileFlag,
- FPDF_WIDESTRING uploadTo);
-
- /**
- * Method: FFI_GetPlatform
- * This method will get the current platform.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * platform - Pointer to the data buffer to receive the
- *platform.Can be NULL,in UTF-16LE format.
- * length - The length of the buffer, number of bytes. Can be
- *0.
- * Return value:
- * The length of the buffer, number of bytes.
- **/
- int (*FFI_GetPlatform)(struct _FPDF_FORMFILLINFO* pThis,
- void* platform,
- int length);
-
- /**
- * Method: FFI_GetLanguage
- * This method will get the current language.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * language - Pointer to the data buffer to receive the current
- *language.Can be NULL.
- * length - The length of the buffer, number of bytes. Can be
- *0.
- * Return value:
- * The length of the buffer, number of bytes.
- **/
- int (*FFI_GetLanguage)(struct _FPDF_FORMFILLINFO* pThis,
- void* language,
- int length);
-
- /**
- * Method: FFI_DownloadFromURL
- * This method will download the specified file from the URL.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * URL - The string value of the file URL, in UTF-16LE
- *format.
- * Return value:
- * The handle to FPDF_FILEHANDLER.
- **/
- FPDF_LPFILEHANDLER (*FFI_DownloadFromURL)(struct _FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING URL);
- /**
- * Method: FFI_PostRequestURL
- * This method will post the request to the server URL.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * wsURL - The string value of the server URL, in UTF-16LE
- *format.
- * wsData - The post data,in UTF-16LE format.
- * wsContentType - The content type of the request data,in UTF-16LE
- *format.
- * wsEncode - The encode type,in UTF-16LE format.
- * wsHeader - The request header,in UTF-16LE format.
- * response - Pointer to the FPDF_BSTR to receive the response
- *data from server,,in UTF-16LE format.
- * Return value:
- * TRUE indicates success, otherwise FALSE.
- **/
- FPDF_BOOL (*FFI_PostRequestURL)(struct _FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING wsURL, FPDF_WIDESTRING wsData, FPDF_WIDESTRING wsContentType, FPDF_WIDESTRING wsEncode, FPDF_WIDESTRING wsHeader, FPDF_BSTR* respone);
-
- /**
- * Method: FFI_PutRequestURL
- * This method will put the request to the server URL.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * wsURL - The string value of the server URL, in UTF-16LE
- *format.
- * wsData - The put data, in UTF-16LE format.
- * wsEncode - The encode type, in UTR-16LE format.
- * Return value:
- * TRUE indicates success, otherwise FALSE.
- **/
- FPDF_BOOL (*FFI_PutRequestURL)(struct _FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING wsURL, FPDF_WIDESTRING wsData, FPDF_WIDESTRING wsEncode);
-#endif // PDF_ENABLE_XFA
-
-} FPDF_FORMFILLINFO;
-
-/**
- * Function: FPDFDOC_InitFormFillEnvironment
- * Init form fill environment.
- * Comments:
- * This function should be called before any form fill operation.
- * Parameters:
- * document - Handle to document. Returned by
- *FPDF_LoadDocument function.
- * pFormFillInfo - Pointer to a FPDF_FORMFILLINFO structure.
- * Return Value:
- * Return handler to the form fill module. NULL means fails.
- **/
-DLLEXPORT FPDF_FORMHANDLE STDCALL
-FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document,
- FPDF_FORMFILLINFO* formInfo);
-
-/**
- * Function: FPDFDOC_ExitFormFillEnvironment
- * Exit form fill environment.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * Return Value:
- * NULL.
- **/
-DLLEXPORT void STDCALL FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle);
-
-/**
- * Function: FORM_OnAfterLoadPage
- * This method is required for implementing all the form related
- *functions. Should be invoked after user
- * successfully loaded a PDF page, and method
- *FPDFDOC_InitFormFillEnvironment had been invoked.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * Return Value:
- * NONE.
- **/
-DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page,
- FPDF_FORMHANDLE hHandle);
-
-/**
- * Function: FORM_OnBeforeClosePage
- * This method is required for implementing all the form related
- *functions. Should be invoked before user
- * close the PDF page.
- * Parameters:
- * page - Handle to the page. Returned by FPDF_LoadPage
- *function.
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * Return Value:
- * NONE.
- **/
-DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page,
- FPDF_FORMHANDLE hHandle);
-
-/**
-* Function: FORM_DoDocumentJSAction
-* This method is required for performing Document-level JavaScript
-*action. It should be invoked after the PDF document
-* had been loaded.
-* Parameters:
-* hHandle - Handle to the form fill module. Returned by
-*FPDFDOC_InitFormFillEnvironment.
-* Return Value:
-* NONE
-* Comments:
-* If there is Document-level JavaScript action embedded in the
-*document, this method will execute the javascript action;
-* otherwise, the method will do nothing.
-**/
-DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle);
-
-/**
-* Function: FORM_DoDocumentOpenAction
-* This method is required for performing open-action when the document
-*is opened.
-* Parameters:
-* hHandle - Handle to the form fill module. Returned by
-*FPDFDOC_InitFormFillEnvironment.
-* Return Value:
-* NONE
-* Comments:
-* This method will do nothing if there is no open-actions embedded in
-*the document.
-**/
-DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle);
-
-// additional actions type of document.
-#define FPDFDOC_AACTION_WC \
- 0x10 // WC, before closing document, JavaScript action.
-#define FPDFDOC_AACTION_WS \
- 0x11 // WS, before saving document, JavaScript action.
-#define FPDFDOC_AACTION_DS 0x12 // DS, after saving document, JavaScript
- // action.
-#define FPDFDOC_AACTION_WP \
- 0x13 // WP, before printing document, JavaScript action.
-#define FPDFDOC_AACTION_DP \
- 0x14 // DP, after printing document, JavaScript action.
-
-/**
-* Function: FORM_DoDocumentAAction
-* This method is required for performing the document's
-*additional-action.
-* Parameters:
-* hHandle - Handle to the form fill module. Returned by
-*FPDFDOC_InitFormFillEnvironment.
-* aaType - The type of the additional-actions which defined
-*above.
-* Return Value:
-* NONE
-* Comments:
-* This method will do nothing if there is no document
-*additional-action corresponding to the specified aaType.
-**/
-
-DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle,
- int aaType);
-
-// Additional-action types of page object
-#define FPDFPAGE_AACTION_OPEN \
- 0 // /O -- An action to be performed when the page is opened
-#define FPDFPAGE_AACTION_CLOSE \
- 1 // /C -- An action to be performed when the page is closed
-
-/**
-* Function: FORM_DoPageAAction
-* This method is required for performing the page object's
-*additional-action when opened or closed.
-* Parameters:
-* page - Handle to the page. Returned by FPDF_LoadPage
-*function.
-* hHandle - Handle to the form fill module. Returned by
-*FPDFDOC_InitFormFillEnvironment.
-* aaType - The type of the page object's additional-actions
-*which defined above.
-* Return Value:
-* NONE
-* Comments:
-* This method will do nothing if no additional-action corresponding to
-*the specified aaType exists.
-**/
-DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page,
- FPDF_FORMHANDLE hHandle,
- int aaType);
-
-/**
- * Function: FORM_OnMouseMove
- * You can call this member function when the mouse cursor moves.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage
- *function.
- * modifier - Indicates whether various virtual keys are down.
- * page_x - Specifies the x-coordinate of the cursor in PDF user
- *space.
- * page_y - Specifies the y-coordinate of the cursor in PDF user
- *space.
- * Return Value:
- * TRUE indicates success; otherwise false.
- **/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int modifier,
- double page_x,
- double page_y);
-
-/**
- * Function: FORM_OnLButtonDown
- * You can call this member function when the user presses the left
- *mouse button.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage
- *function.
- * modifier - Indicates whether various virtual keys are down.
- * page_x - Specifies the x-coordinate of the cursor in PDF user
- *space.
- * page_y - Specifies the y-coordinate of the cursor in PDF user
- *space.
- * Return Value:
- * TRUE indicates success; otherwise false.
- **/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int modifier,
- double page_x,
- double page_y);
-
-/**
- * Function: FORM_OnLButtonUp
- * You can call this member function when the user releases the left
- *mouse button.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage
- *function.
- * modifier - Indicates whether various virtual keys are down.
- * page_x - Specifies the x-coordinate of the cursor in device.
- * page_y - Specifies the y-coordinate of the cursor in device.
- * Return Value:
- * TRUE indicates success; otherwise false.
- **/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int modifier,
- double page_x,
- double page_y);
-
-#ifdef PDF_ENABLE_XFA
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonDown(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int modifier,
- double page_x,
- double page_y);
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonUp(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int modifier,
- double page_x,
- double page_y);
-#endif // PDF_ENABLE_XFA
-
-/**
- * Function: FORM_OnKeyDown
- * You can call this member function when a nonsystem key is pressed.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage
- *function.
- * nKeyCode - Indicates whether various virtual keys are down.
- * modifier - Contains the scan code, key-transition code,
- *previous key state, and context code.
- * Return Value:
- * TRUE indicates success; otherwise false.
- **/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int nKeyCode,
- int modifier);
-
-/**
- * Function: FORM_OnKeyUp
- * You can call this member function when a nonsystem key is released.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage
- *function.
- * nKeyCode - The virtual-key code of the given key.
- * modifier - Contains the scan code, key-transition code,
- *previous key state, and context code.
- * Return Value:
- * TRUE indicates success; otherwise false.
- **/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int nKeyCode,
- int modifier);
-
-/**
- * Function: FORM_OnChar
- * You can call this member function when a keystroke translates to a
- *nonsystem character.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage
- *function.
- * nChar - The character code value of the key.
- * modifier - Contains the scan code, key-transition code,
- *previous key state, and context code.
- * Return Value:
- * TRUE indicates success; otherwise false.
- **/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int nChar,
- int modifier);
-
-/**
- * Function: FORM_ForceToKillFocus.
- * You can call this member function to force to kill the focus of the
- *form field which got focus.
- * It would kill the focus on the form field, save the value of form
- *field if it's changed by user.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * Return Value:
- * TRUE indicates success; otherwise false.
- **/
-DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle);
-
-// Field Types
-#define FPDF_FORMFIELD_UNKNOWN 0 // Unknown.
-#define FPDF_FORMFIELD_PUSHBUTTON 1 // push button type.
-#define FPDF_FORMFIELD_CHECKBOX 2 // check box type.
-#define FPDF_FORMFIELD_RADIOBUTTON 3 // radio button type.
-#define FPDF_FORMFIELD_COMBOBOX 4 // combo box type.
-#define FPDF_FORMFIELD_LISTBOX 5 // list box type.
-#define FPDF_FORMFIELD_TEXTFIELD 6 // text field type.
-#ifdef PDF_ENABLE_XFA
-#define FPDF_FORMFIELD_XFA 7 // text field type.
-#endif // PDF_ENABLE_XFA
-
-/**
- * Function: FPDFPage_HasFormFieldAtPoint
- * Get the form field type by point.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- * FPDFDOC_InitFormFillEnvironment().
- * page - Handle to the page. Returned by FPDF_LoadPage().
- * page_x - X position in PDF "user space".
- * page_y - Y position in PDF "user space".
- * Return Value:
- * Return the type of the form field; -1 indicates no field.
- * See field types above.
- **/
-DLLEXPORT int STDCALL FPDFPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- double page_x,
- double page_y);
-
-/**
- * Function: FPDPage_HasFormFieldAtPoint
- * DEPRECATED. Please use FPDFPage_HasFormFieldAtPoint.
- **/
-DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- double page_x,
- double page_y);
-
-/**
- * Function: FPDFPage_FormFieldZOrderAtPoint
- * Get the form field z-order by point.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- * FPDFDOC_InitFormFillEnvironment().
- * page - Handle to the page. Returned by FPDF_LoadPage().
- * page_x - X position in PDF "user space".
- * page_y - Y position in PDF "user space".
- * Return Value:
- * Return the z-order of the form field; -1 indicates no field.
- * Higher numbers are closer to the front.
- **/
-DLLEXPORT int STDCALL FPDFPage_FormFieldZOrderAtPoint(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- double page_x,
- double page_y);
-
-/**
- * Function: FPDF_SetFormFieldHighlightColor
- * Set the highlight color of specified or all the form fields in the
- *document.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * doc - Handle to the document. Returned by
- *FPDF_LoadDocument function.
- * fieldType - A 32-bit integer indicating the type of a form
- *field(defined above).
- * color - The highlight color of the form field.Constructed by
- *0xxxrrggbb.
- * Return Value:
- * NONE.
- * Comments:
- * When the parameter fieldType is set to zero, the highlight color
- *will be applied to all the form fields in the
- * document.
- * Please refresh the client window to show the highlight immediately
- *if necessary.
- **/
-DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle,
- int fieldType,
- unsigned long color);
-
-/**
- * Function: FPDF_SetFormFieldHighlightAlpha
- * Set the transparency of the form field highlight color in the
- *document.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * doc - Handle to the document. Returned by
- *FPDF_LoadDocument function.
- * alpha - The transparency of the form field highlight color.
- *between 0-255.
- * Return Value:
- * NONE.
- **/
-DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle,
- unsigned char alpha);
-
-/**
- * Function: FPDF_RemoveFormFieldHighlight
- * Remove the form field highlight color in the document.
- * Parameters:
- * hHandle - Handle to the form fill module. Returned by
- *FPDFDOC_InitFormFillEnvironment.
- * Return Value:
- * NONE.
- * Comments:
- * Please refresh the client window to remove the highlight immediately
- *if necessary.
- **/
-DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle);
-
-/**
-* Function: FPDF_FFLDraw
-* Render FormFeilds on a page to a device independent bitmap.
-* Parameters:
-* hHandle - Handle to the form fill module. Returned by
-*FPDFDOC_InitFormFillEnvironment.
-* bitmap - Handle to the device independent bitmap (as the
-*output buffer).
-* Bitmap handle can be created by FPDFBitmap_Create
-*function.
-* page - Handle to the page. Returned by FPDF_LoadPage
-*function.
-* start_x - Left pixel position of the display area in the
-*device coordinate.
-* start_y - Top pixel position of the display area in the device
-*coordinate.
-* size_x - Horizontal size (in pixels) for displaying the page.
-* size_y - Vertical size (in pixels) for displaying the page.
-* rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees
-*clockwise),
-* 2 (rotated 180 degrees), 3 (rotated 90 degrees
-*counter-clockwise).
-* flags - 0 for normal display, or combination of flags
-*defined above.
-* Return Value:
-* None.
-* Comments:
-* This method is designed to only render annotations and FormFields on
-*the page.
-* Without FPDF_ANNOT specified for flags, Rendering functions such as
-*FPDF_RenderPageBitmap or FPDF_RenderPageBitmap_Start will only render page
-*contents(without annotations) to a bitmap.
-* In order to implement the FormFill functions,Implementation should
-*call this method after rendering functions finish rendering the page contents.
-**/
-DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,
- FPDF_BITMAP bitmap,
- FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int flags);
-
-#ifdef PDF_ENABLE_XFA
-/**
- * Function: FPDF_HasXFAField
- * This method is designed to check whether a pdf document
- *has XFA fields.
- * Parameters:
- * document - Handle to document.
- *Returned by FPDF_LoadDocument function.
- * docType - Document type defined as
- *DOCTYPE_xxx.
- * Return Value:
- * TRUE indicates that the input document has XFA fields,
- *otherwise FALSE.
- **/
-DLLEXPORT FPDF_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document,
- int* docType);
-
-/**
- * Function: FPDF_LoadXFA
- * If the document consists of XFA fields, there should call this
- *method to load XFA fields.
- * Parameters:
- * document - Handle to document. Returned by
- *FPDF_LoadDocument function.
- * Return Value:
- * TRUE indicates success,otherwise FALSE.
- **/
-DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document);
-
-/**
- * Function: FPDF_Widget_Undo
- * This method will implement the undo feature for the specified xfa
- *field.
- * Parameters:
- * document - Handle to document. Returned by
- *FPDF_LoadDocument function.
- * hWidget - Handle to the xfa field.
- * Return Value:
- * None.
- **/
-DLLEXPORT void STDCALL FPDF_Widget_Undo(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget);
-/**
- * Function: FPDF_Widget_Redo
- * This method will implement the redo feature for the specified xfa
- *field.
- * Parameters:
- * document - Handle to document. Returned by
- *FPDF_LoadDocument function.
- * hWidget - Handle to the xfa field.
- * Return Value:
- * None.
- **/
-DLLEXPORT void STDCALL FPDF_Widget_Redo(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget);
-/**
- * Function: FPDF_Widget_SelectAll
- * This method will implement the select all feature for the specified
- *xfa field.
- * Parameters:
- * document - Handle to document. Returned by
- *FPDF_LoadDocument function.
- * hWidget - Handle to the xfa field.
- * Return Value:
- * None.
- **/
-DLLEXPORT void STDCALL FPDF_Widget_SelectAll(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget);
-/**
- * Function: FPDF_Widget_Copy
- * This method will implement the copy feature for the specified xfa
- *field.
- * Parameters:
- * document - Handle to document. Returned by
- *FPDF_LoadDocument function.
- * hWidget - Handle to the xfa field.
- * wsText - Pointer to data buffer to receive the copied
- *data, in UTF-16LE format.
- * size - The data buffer size.
- * Return Value:
- * None.
- **/
-DLLEXPORT void STDCALL FPDF_Widget_Copy(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget,
- FPDF_WIDESTRING wsText,
- FPDF_DWORD* size);
-/**
- * Function: FPDF_Widget_Cut
- * This method will implement the cut feature for the specified xfa
- *field.
- * Parameters:
- * document - Handle to document. Returned by
- *FPDF_LoadDocument function.
- * hWidget - Handle to the xfa field.
- * wsText - Pointer to data buffer to receive the cut
- *data,in UTF-16LE format.
- * size - The data buffer size,not the byte number.
- * Return Value:
- * None.
- **/
-DLLEXPORT void STDCALL FPDF_Widget_Cut(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget,
- FPDF_WIDESTRING wsText,
- FPDF_DWORD* size);
-/**
- * Function: FPDF_Widget_Paste
- * This method will implement the paste feature for the specified xfa
- *field.
- * Parameters:
- * document - Handle to document. Returned by
- *FPDF_LoadDocument function.
- * hWidget - Handle to the xfa field.
- * wsText - The paste text buffer, in UTF-16LE format.
- * size - The data buffer size,not the byte number.
- * Return Value:
- * None.
- **/
-DLLEXPORT void STDCALL FPDF_Widget_Paste(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget,
- FPDF_WIDESTRING wsText,
- FPDF_DWORD size);
-/**
- * Function: FPDF_Widget_ReplaceSpellCheckWord
- * This method will implement the spell check feature for the specified
- *xfa field.
- * Parameters:
- * document - Handle to document. Returned by
- *FPDF_LoadDocument function.
- * hWidget - Handle to the xfa field.
- * x - The x value of the specified point.
- * y - The y value of the specified point.
- * bsText - The text buffer needed to be speck check, in
- *UTF-16LE format.
- * Return Value:
- * None.
- **/
-DLLEXPORT void STDCALL
-FPDF_Widget_ReplaceSpellCheckWord(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget,
- float x,
- float y,
- FPDF_BYTESTRING bsText);
-/**
- * Function: FPDF_Widget_GetSpellCheckWords
- * This method will implement the spell check feature for the specified
- *xfa field.
- * Parameters:
- * document - Handle to document. Returned by
- *FPDF_LoadDocument function.
- * hWidget - Handle to the xfa field.
- * x - The x value of the specified point.
- * y - The y value of the specified point.
- * stringHandle - Pointer to FPDF_STRINGHANDLE to receive the
- *speck check text buffer, in UTF-16LE format.
- * Return Value:
- * None.
- **/
-DLLEXPORT void STDCALL
-FPDF_Widget_GetSpellCheckWords(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget,
- float x,
- float y,
- FPDF_STRINGHANDLE* stringHandle);
-/**
- * Function: FPDF_StringHandleCounts
- * This method will get the count of the text buffer.
- * Parameters:
- * stringHandle - Pointer to FPDF_STRINGHANDLE.
- * Return Value:
- * None.
- **/
-DLLEXPORT int STDCALL FPDF_StringHandleCounts(FPDF_STRINGHANDLE stringHandle);
-/**
- * Function: FPDF_StringHandleGetStringByIndex
- * This method will get the specified index of the text buffer.
- * Parameters:
- * stringHandle - Pointer to FPDF_STRINGHANDLE.
- * index - The specified index of text buffer.
- * bsText - Pointer to data buffer to receive the text
- *buffer, in UTF-16LE format.
- * size - The byte size of data buffer.
- * Return Value:
- * TRUE indicates success, otherwise FALSE.
- **/
-DLLEXPORT FPDF_BOOL STDCALL
-FPDF_StringHandleGetStringByIndex(FPDF_STRINGHANDLE stringHandle,
- int index,
- FPDF_BYTESTRING bsText,
- FPDF_DWORD* size);
-/**
- * Function: FPDF_StringHandleRelease
- * This method will release the FPDF_STRINGHANDLE.
- * Parameters:
- * stringHandle - Pointer to FPDF_STRINGHANDLE.
- * Return Value:
- * None.
- **/
-DLLEXPORT void STDCALL FPDF_StringHandleRelease(FPDF_STRINGHANDLE stringHandle);
-/**
- * Function: FPDF_StringHandleAddString
- * This method will add the specified text buffer.
- * Parameters:
- * stringHandle - Pointer to FPDF_STRINGHANDLE.
- * bsText - Pointer to data buffer of the text buffer, in
- *UTF-16LE format.
- * size - The byte size of data buffer.
- * Return Value:
- * TRUE indicates success, otherwise FALSE.
- **/
-DLLEXPORT FPDF_BOOL STDCALL
-FPDF_StringHandleAddString(FPDF_STRINGHANDLE stringHandle,
- FPDF_BYTESTRING bsText,
- FPDF_DWORD size);
-#endif // PDF_ENABLE_XFA
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_FORMFILL_H_
diff --git a/src/main/jni/include/fpdf_ppo.h b/src/main/jni/include/fpdf_ppo.h
deleted file mode 100644
index e7d77678..00000000
--- a/src/main/jni/include/fpdf_ppo.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_PPO_H_
-#define PUBLIC_FPDF_PPO_H_
-
-#include "fpdfview.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Function: FPDF_ImportPages
-// Import some pages to a PDF document.
-// Parameters:
-// dest_doc - The destination document which add the pages.
-// src_doc - A document to be imported.
-// pagerange - A page range string, Such as "1,3,5-7".
-// If this parameter is NULL, it would import all pages
-// in src_doc.
-// index - The page index wanted to insert from.
-// Return value:
-// TRUE for succeed, FALSE for Failed.
-DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc,
- FPDF_DOCUMENT src_doc,
- FPDF_BYTESTRING pagerange,
- int index);
-
-// Function: FPDF_CopyViewerPreferences
-// Copy the viewer preferences from one PDF document to another.#endif
-// Parameters:
-// dest_doc - Handle to document to write the viewer preferences
-// to.
-// src_doc - Handle to document with the viewer preferences.
-// Return value:
-// TRUE for success, FALSE for failure.
-DLLEXPORT FPDF_BOOL STDCALL FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc,
- FPDF_DOCUMENT src_doc);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_PPO_H_
diff --git a/src/main/jni/include/fpdf_progressive.h b/src/main/jni/include/fpdf_progressive.h
deleted file mode 100644
index f352ff9d..00000000
--- a/src/main/jni/include/fpdf_progressive.h
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_PROGRESSIVE_H_
-#define PUBLIC_FPDF_PROGRESSIVE_H_
-
-#include "fpdfview.h"
-
-// Flags for progressive process status.
-#define FPDF_RENDER_READER 0
-#define FPDF_RENDER_TOBECOUNTINUED 1
-#define FPDF_RENDER_DONE 2
-#define FPDF_RENDER_FAILED 3
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// IFPDF_RENDERINFO interface.
-typedef struct _IFSDK_PAUSE {
- /**
- * Version number of the interface. Currently must be 1.
- **/
- int version;
-
- /*
- * Method: NeedToPauseNow
- * Check if we need to pause a progressive process now.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * Return Value:
- * Non-zero for pause now, 0 for continue.
- *
- */
- FPDF_BOOL (*NeedToPauseNow)(struct _IFSDK_PAUSE* pThis);
-
- // A user defined data pointer, used by user's application. Can be NULL.
- void* user;
-} IFSDK_PAUSE;
-
-// Function: FPDF_RenderPageBitmap_Start
-// Start to render page contents to a device independent bitmap
-// progressively.
-// Parameters:
-// bitmap - Handle to the device independent bitmap (as the
-// output buffer).
-// Bitmap handle can be created by FPDFBitmap_Create
-// function.
-// page - Handle to the page. Returned by FPDF_LoadPage
-// function.
-// start_x - Left pixel position of the display area in the
-// bitmap coordinate.
-// start_y - Top pixel position of the display area in the bitmap
-// coordinate.
-// size_x - Horizontal size (in pixels) for displaying the page.
-// size_y - Vertical size (in pixels) for displaying the page.
-// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees
-// clockwise),
-// 2 (rotated 180 degrees), 3 (rotated 90 degrees
-// counter-clockwise).
-// flags - 0 for normal display, or combination of flags
-// defined above.
-// pause - The IFSDK_PAUSE interface.A callback mechanism
-// allowing the page rendering process
-// Return value:
-// Rendering Status. See flags for progressive process status for the
-// details.
-//
-DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap,
- FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int flags,
- IFSDK_PAUSE* pause);
-
-// Function: FPDF_RenderPage_Continue
-// Continue rendering a PDF page.
-// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage
-// function.
-// pause - The IFSDK_PAUSE interface.A callback mechanism
-// allowing the page rendering process
-// to be paused before it's finished. This can be NULL
-// if you don't want to pause.
-// Return value:
-// The rendering status. See flags for progressive process status for
-// the details.
-DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page,
- IFSDK_PAUSE* pause);
-
-// Function: FPDF_RenderPage_Close
-// Release the resource allocate during page rendering. Need to be
-// called after finishing rendering or
-// cancel the rendering.
-// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage
-// function.
-// Return value:
-// NULL
-DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_PROGRESSIVE_H_
diff --git a/src/main/jni/include/fpdf_searchex.h b/src/main/jni/include/fpdf_searchex.h
deleted file mode 100644
index a6b6e1bd..00000000
--- a/src/main/jni/include/fpdf_searchex.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_SEARCHEX_H_
-#define PUBLIC_FPDF_SEARCHEX_H_
-
-#include "fpdfview.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Function: FPDFText_GetCharIndexFromTextIndex
-// Get the actually char index in text_page's internal char list.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// nTextIndex - The index of the text in the string get from
-// FPDFText_GetText.
-// Return value:
-// The index of the character in internal charlist. -1 for error.
-DLLEXPORT int STDCALL
-FPDFText_GetCharIndexFromTextIndex(FPDF_TEXTPAGE text_page, int nTextIndex);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_SEARCHEX_H_
diff --git a/src/main/jni/include/fpdf_text.h b/src/main/jni/include/fpdf_text.h
deleted file mode 100644
index 32cc1318..00000000
--- a/src/main/jni/include/fpdf_text.h
+++ /dev/null
@@ -1,416 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_TEXT_H_
-#define PUBLIC_FPDF_TEXT_H_
-
-#include "fpdfview.h"
-
-// Exported Functions
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Function: FPDFText_LoadPage
-// Prepare information about all characters in a page.
-// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage function
-// (in FPDFVIEW module).
-// Return value:
-// A handle to the text page information structure.
-// NULL if something goes wrong.
-// Comments:
-// Application must call FPDFText_ClosePage to release the text page
-// information.
-//
-DLLEXPORT FPDF_TEXTPAGE STDCALL FPDFText_LoadPage(FPDF_PAGE page);
-
-// Function: FPDFText_ClosePage
-// Release all resources allocated for a text page information
-// structure.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// Return Value:
-// None.
-//
-DLLEXPORT void STDCALL FPDFText_ClosePage(FPDF_TEXTPAGE text_page);
-
-// Function: FPDFText_CountChars
-// Get number of characters in a page.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// Return value:
-// Number of characters in the page. Return -1 for error.
-// Generated characters, like additional space characters, new line
-// characters, are also counted.
-// Comments:
-// Characters in a page form a "stream", inside the stream, each
-// character has an index.
-// We will use the index parameters in many of FPDFTEXT functions. The
-// first character in the page
-// has an index value of zero.
-//
-DLLEXPORT int STDCALL FPDFText_CountChars(FPDF_TEXTPAGE text_page);
-
-// Function: FPDFText_GetUnicode
-// Get Unicode of a character in a page.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// index - Zero-based index of the character.
-// Return value:
-// The Unicode of the particular character.
-// If a character is not encoded in Unicode and Foxit engine can't
-// convert to Unicode,
-// the return value will be zero.
-//
-DLLEXPORT unsigned int STDCALL FPDFText_GetUnicode(FPDF_TEXTPAGE text_page,
- int index);
-
-// Function: FPDFText_GetFontSize
-// Get the font size of a particular character.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// index - Zero-based index of the character.
-// Return value:
-// The font size of the particular character, measured in points (about
-// 1/72 inch).
-// This is the typographic size of the font (so called "em size").
-//
-DLLEXPORT double STDCALL FPDFText_GetFontSize(FPDF_TEXTPAGE text_page,
- int index);
-
-// Function: FPDFText_GetCharBox
-// Get bounding box of a particular character.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// index - Zero-based index of the character.
-// left - Pointer to a double number receiving left position
-// of the character box.
-// right - Pointer to a double number receiving right position
-// of the character box.
-// bottom - Pointer to a double number receiving bottom position
-// of the character box.
-// top - Pointer to a double number receiving top position of
-// the character box.
-// Return Value:
-// None.
-// Comments:
-// All positions are measured in PDF "user space".
-//
-DLLEXPORT void STDCALL FPDFText_GetCharBox(FPDF_TEXTPAGE text_page,
- int index,
- double* left,
- double* right,
- double* bottom,
- double* top);
-
-// Function: FPDFText_GetCharIndexAtPos
-// Get the index of a character at or nearby a certain position on the
-// page.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// x - X position in PDF "user space".
-// y - Y position in PDF "user space".
-// xTolerance - An x-axis tolerance value for character hit
-// detection, in point unit.
-// yTolerance - A y-axis tolerance value for character hit
-// detection, in point unit.
-// Return Value:
-// The zero-based index of the character at, or nearby the point (x,y).
-// If there is no character at or nearby the point, return value will
-// be -1.
-// If an error occurs, -3 will be returned.
-//
-DLLEXPORT int STDCALL FPDFText_GetCharIndexAtPos(FPDF_TEXTPAGE text_page,
- double x,
- double y,
- double xTolerance,
- double yTolerance);
-
-// Function: FPDFText_GetText
-// Extract unicode text string from the page.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// start_index - Index for the start characters.
-// count - Number of characters to be extracted.
-// result - A buffer (allocated by application) receiving the
-// extracted unicodes.
-// The size of the buffer must be able to hold the
-// number of characters plus a terminator.
-// Return Value:
-// Number of characters written into the result buffer, including the
-// trailing terminator.
-// Comments:
-// This function ignores characters without unicode information.
-//
-DLLEXPORT int STDCALL FPDFText_GetText(FPDF_TEXTPAGE text_page,
- int start_index,
- int count,
- unsigned short* result);
-
-// Function: FPDFText_CountRects
-// Count number of rectangular areas occupied by a segment of texts.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// start_index - Index for the start characters.
-// count - Number of characters.
-// Return value:
-// Number of rectangles. Zero for error.
-// Comments:
-// This function, along with FPDFText_GetRect can be used by
-// applications to detect the position
-// on the page for a text segment, so proper areas can be highlighted
-// or something.
-// FPDFTEXT will automatically merge small character boxes into bigger
-// one if those characters
-// are on the same line and use same font settings.
-//
-DLLEXPORT int STDCALL FPDFText_CountRects(FPDF_TEXTPAGE text_page,
- int start_index,
- int count);
-
-// Function: FPDFText_GetRect
-// Get a rectangular area from the result generated by
-// FPDFText_CountRects.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// rect_index - Zero-based index for the rectangle.
-// left - Pointer to a double value receiving the rectangle
-// left boundary.
-// top - Pointer to a double value receiving the rectangle
-// top boundary.
-// right - Pointer to a double value receiving the rectangle
-// right boundary.
-// bottom - Pointer to a double value receiving the rectangle
-// bottom boundary.
-// Return Value:
-// None.
-//
-DLLEXPORT void STDCALL FPDFText_GetRect(FPDF_TEXTPAGE text_page,
- int rect_index,
- double* left,
- double* top,
- double* right,
- double* bottom);
-
-// Function: FPDFText_GetBoundedText
-// Extract unicode text within a rectangular boundary on the page.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// left - Left boundary.
-// top - Top boundary.
-// right - Right boundary.
-// bottom - Bottom boundary.
-// buffer - A unicode buffer.
-// buflen - Number of characters (not bytes) for the buffer,
-// excluding an additional terminator.
-// Return Value:
-// If buffer is NULL or buflen is zero, return number of characters
-// (not bytes) of text present within
-// the rectangle, excluding a terminating NUL. Generally you should
-// pass a buffer at least one larger
-// than this if you want a terminating NUL, which will be provided if
-// space is available.
-// Otherwise, return number of characters copied into the buffer,
-// including the terminating NUL
-// when space for it is available.
-// Comment:
-// If the buffer is too small, as much text as will fit is copied into
-// it.
-//
-DLLEXPORT int STDCALL FPDFText_GetBoundedText(FPDF_TEXTPAGE text_page,
- double left,
- double top,
- double right,
- double bottom,
- unsigned short* buffer,
- int buflen);
-
-// Flags used by FPDFText_FindStart function.
-#define FPDF_MATCHCASE \
- 0x00000001 // If not set, it will not match case by default.
-#define FPDF_MATCHWHOLEWORD \
- 0x00000002 // If not set, it will not match the whole word by default.
-
-// Function: FPDFText_FindStart
-// Start a search.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// findwhat - A unicode match pattern.
-// flags - Option flags.
-// start_index - Start from this character. -1 for end of the page.
-// Return Value:
-// A handle for the search context. FPDFText_FindClose must be called
-// to release this handle.
-//
-DLLEXPORT FPDF_SCHHANDLE STDCALL FPDFText_FindStart(FPDF_TEXTPAGE text_page,
- FPDF_WIDESTRING findwhat,
- unsigned long flags,
- int start_index);
-
-// Function: FPDFText_FindNext
-// Search in the direction from page start to end.
-// Parameters:
-// handle - A search context handle returned by
-// FPDFText_FindStart.
-// Return Value:
-// Whether a match is found.
-//
-DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindNext(FPDF_SCHHANDLE handle);
-
-// Function: FPDFText_FindPrev
-// Search in the direction from page end to start.
-// Parameters:
-// handle - A search context handle returned by
-// FPDFText_FindStart.
-// Return Value:
-// Whether a match is found.
-//
-DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindPrev(FPDF_SCHHANDLE handle);
-
-// Function: FPDFText_GetSchResultIndex
-// Get the starting character index of the search result.
-// Parameters:
-// handle - A search context handle returned by
-// FPDFText_FindStart.
-// Return Value:
-// Index for the starting character.
-//
-DLLEXPORT int STDCALL FPDFText_GetSchResultIndex(FPDF_SCHHANDLE handle);
-
-// Function: FPDFText_GetSchCount
-// Get the number of matched characters in the search result.
-// Parameters:
-// handle - A search context handle returned by
-// FPDFText_FindStart.
-// Return Value:
-// Number of matched characters.
-//
-DLLEXPORT int STDCALL FPDFText_GetSchCount(FPDF_SCHHANDLE handle);
-
-// Function: FPDFText_FindClose
-// Release a search context.
-// Parameters:
-// handle - A search context handle returned by
-// FPDFText_FindStart.
-// Return Value:
-// None.
-//
-DLLEXPORT void STDCALL FPDFText_FindClose(FPDF_SCHHANDLE handle);
-
-// Function: FPDFLink_LoadWebLinks
-// Prepare information about weblinks in a page.
-// Parameters:
-// text_page - Handle to a text page information structure.
-// Returned by FPDFText_LoadPage function.
-// Return Value:
-// A handle to the page's links information structure.
-// NULL if something goes wrong.
-// Comments:
-// Weblinks are those links implicitly embedded in PDF pages. PDF also
-// has a type of
-// annotation called "link", FPDFTEXT doesn't deal with that kind of
-// link.
-// FPDFTEXT weblink feature is useful for automatically detecting links
-// in the page
-// contents. For example, things like "http://www.foxitsoftware.com"
-// will be detected,
-// so applications can allow user to click on those characters to
-// activate the link,
-// even the PDF doesn't come with link annotations.
-//
-// FPDFLink_CloseWebLinks must be called to release resources.
-//
-DLLEXPORT FPDF_PAGELINK STDCALL FPDFLink_LoadWebLinks(FPDF_TEXTPAGE text_page);
-
-// Function: FPDFLink_CountWebLinks
-// Count number of detected web links.
-// Parameters:
-// link_page - Handle returned by FPDFLink_LoadWebLinks.
-// Return Value:
-// Number of detected web links.
-//
-DLLEXPORT int STDCALL FPDFLink_CountWebLinks(FPDF_PAGELINK link_page);
-
-// Function: FPDFLink_GetURL
-// Fetch the URL information for a detected web link.
-// Parameters:
-// link_page - Handle returned by FPDFLink_LoadWebLinks.
-// link_index - Zero-based index for the link.
-// buffer - A unicode buffer.
-// buflen - Number of characters (not bytes) for the buffer,
-// including an additional terminator.
-// Return Value:
-// If buffer is NULL or buflen is zero, return number of characters
-// (not bytes and an additional terminator is also counted) needed,
-// otherwise, return number of characters copied into the buffer.
-//
-DLLEXPORT int STDCALL FPDFLink_GetURL(FPDF_PAGELINK link_page,
- int link_index,
- unsigned short* buffer,
- int buflen);
-
-// Function: FPDFLink_CountRects
-// Count number of rectangular areas for the link.
-// Parameters:
-// link_page - Handle returned by FPDFLink_LoadWebLinks.
-// link_index - Zero-based index for the link.
-// Return Value:
-// Number of rectangular areas for the link.
-//
-DLLEXPORT int STDCALL FPDFLink_CountRects(FPDF_PAGELINK link_page,
- int link_index);
-
-// Function: FPDFLink_GetRect
-// Fetch the boundaries of a rectangle for a link.
-// Parameters:
-// link_page - Handle returned by FPDFLink_LoadWebLinks.
-// link_index - Zero-based index for the link.
-// rect_index - Zero-based index for a rectangle.
-// left - Pointer to a double value receiving the rectangle
-// left boundary.
-// top - Pointer to a double value receiving the rectangle
-// top boundary.
-// right - Pointer to a double value receiving the rectangle
-// right boundary.
-// bottom - Pointer to a double value receiving the rectangle
-// bottom boundary.
-// Return Value:
-// None.
-//
-DLLEXPORT void STDCALL FPDFLink_GetRect(FPDF_PAGELINK link_page,
- int link_index,
- int rect_index,
- double* left,
- double* top,
- double* right,
- double* bottom);
-
-// Function: FPDFLink_CloseWebLinks
-// Release resources used by weblink feature.
-// Parameters:
-// link_page - Handle returned by FPDFLink_LoadWebLinks.
-// Return Value:
-// None.
-//
-DLLEXPORT void STDCALL FPDFLink_CloseWebLinks(FPDF_PAGELINK link_page);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_TEXT_H_
diff --git a/src/main/jni/include/fpdf_transformpage.h b/src/main/jni/include/fpdf_transformpage.h
deleted file mode 100644
index 569df2a7..00000000
--- a/src/main/jni/include/fpdf_transformpage.h
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef PUBLIC_FPDF_TRANSFORMPAGE_H_
-#define PUBLIC_FPDF_TRANSFORMPAGE_H_
-
-#include "fpdfview.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void* FPDF_PAGEARCSAVER;
-typedef void* FPDF_PAGEARCLOADER;
-
-/**
-* Set "MediaBox" entry to the page dictionary.
-* @param[in] page - Handle to a page.
-* @param[in] left - The left of the rectangle.
-* @param[in] bottom - The bottom of the rectangle.
-* @param[in] right - The right of the rectangle.
-* @param[in] top - The top of the rectangle.
-* @retval None.
-*/
-DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page,
- float left,
- float bottom,
- float right,
- float top);
-
-/**
-* Set "CropBox" entry to the page dictionary.
-* @param[in] page - Handle to a page.
-* @param[in] left - The left of the rectangle.
-* @param[in] bottom - The bottom of the rectangle.
-* @param[in] right - The right of the rectangle.
-* @param[in] top - The top of the rectangle.
-* @retval None.
-*/
-DLLEXPORT void STDCALL FPDFPage_SetCropBox(FPDF_PAGE page,
- float left,
- float bottom,
- float right,
- float top);
-
-/** Get "MediaBox" entry from the page dictionary.
-* @param[in] page - Handle to a page.
-* @param[in] left - Pointer to a double value receiving the left of the
-* rectangle.
-* @param[in] bottom - Pointer to a double value receiving the bottom of the
-* rectangle.
-* @param[in] right - Pointer to a double value receiving the right of the
-* rectangle.
-* @param[in] top - Pointer to a double value receiving the top of the
-* rectangle.
-* @retval True if success,else fail.
-*/
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page,
- float* left,
- float* bottom,
- float* right,
- float* top);
-
-/** Get "CropBox" entry from the page dictionary.
-* @param[in] page - Handle to a page.
-* @param[in] left - Pointer to a double value receiving the left of the
-* rectangle.
-* @param[in] bottom - Pointer to a double value receiving the bottom of the
-* rectangle.
-* @param[in] right - Pointer to a double value receiving the right of the
-* rectangle.
-* @param[in] top - Pointer to a double value receiving the top of the
-* rectangle.
-* @retval True if success,else fail.
-*/
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page,
- float* left,
- float* bottom,
- float* right,
- float* top);
-
-/**
-* Transform the whole page with a specified matrix, then clip the page content
-* region.
-*
-* @param[in] page - A page handle.
-* @param[in] matrix - The transform matrix.
-* @param[in] clipRect - A rectangle page area to be clipped.
-* @Note. This function will transform the whole page, and would take effect to
-* all the objects in the page.
-*/
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page,
- FS_MATRIX* matrix,
- FS_RECTF* clipRect);
-
-/**
-* Transform (scale, rotate, shear, move) the clip path of page object.
-* @param[in] page_object - Handle to a page object. Returned by
-* FPDFPageObj_NewImageObj.
-* @param[in] a - The coefficient "a" of the matrix.
-* @param[in] b - The coefficient "b" of the matrix.
-* @param[in] c - The coefficient "c" of the matrix.
-* @param[in] d - The coefficient "d" of the matrix.
-* @param[in] e - The coefficient "e" of the matrix.
-* @param[in] f - The coefficient "f" of the matrix.
-* @retval None.
-*/
-DLLEXPORT void STDCALL
-FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object,
- double a,
- double b,
- double c,
- double d,
- double e,
- double f);
-
-/**
-* Create a new clip path, with a rectangle inserted.
-*
-* @param[in] left - The left of the clip box.
-* @param[in] bottom - The bottom of the clip box.
-* @param[in] right - The right of the clip box.
-* @param[in] top - The top of the clip box.
-* @retval a handle to the clip path.
-*/
-DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left,
- float bottom,
- float right,
- float top);
-
-/**
-* Destroy the clip path.
-*
-* @param[in] clipPath - A handle to the clip path.
-* Destroy the clip path.
-* @retval None.
-*/
-DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath);
-
-/**
-* Clip the page content, the page content that outside the clipping region
-* become invisible.
-*
-* @param[in] page - A page handle.
-* @param[in] clipPath - A handle to the clip path.
-* @Note. A clip path will be inserted before the page content stream or content
-* array. In this way, the page content will be clipped
-* by this clip path.
-*/
-DLLEXPORT void STDCALL FPDFPage_InsertClipPath(FPDF_PAGE page,
- FPDF_CLIPPATH clipPath);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDF_TRANSFORMPAGE_H_
diff --git a/src/main/jni/include/fpdfview.h b/src/main/jni/include/fpdfview.h
deleted file mode 100644
index 87312925..00000000
--- a/src/main/jni/include/fpdfview.h
+++ /dev/null
@@ -1,941 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-// NOTE: External docs refer to this file as "fpdfview.h", so do not rename
-// despite lack of consitency with other public files.
-
-#ifndef PUBLIC_FPDFVIEW_H_
-#define PUBLIC_FPDFVIEW_H_
-
-#if defined(_WIN32) && !defined(__WINDOWS__)
-#include
-#endif
-
-#ifdef PDF_ENABLE_XFA
-// TODO: remove the #define when XFA is officially in pdfium
-#define PDF_USE_XFA
-#endif // PDF_ENABLE_XFA
-
-// PDF types
-typedef void* FPDF_ACTION;
-typedef void* FPDF_BITMAP;
-typedef void* FPDF_BOOKMARK;
-typedef void* FPDF_CLIPPATH;
-typedef void* FPDF_DEST;
-typedef void* FPDF_DOCSCHHANDLE;
-typedef void* FPDF_DOCUMENT;
-typedef void* FPDF_FONT;
-typedef void* FPDF_HMODULE;
-typedef void* FPDF_LINK;
-typedef void* FPDF_MODULEMGR;
-typedef void* FPDF_PAGE;
-typedef void* FPDF_PAGELINK;
-typedef void* FPDF_PAGEOBJECT; // Page object(text, path, etc)
-typedef void* FPDF_PAGERANGE;
-typedef void* FPDF_PATH;
-typedef void* FPDF_SCHHANDLE;
-typedef void* FPDF_TEXTPAGE;
-
-#ifdef PDF_ENABLE_XFA
-typedef void* FPDF_STRINGHANDLE;
-typedef void* FPDF_WIDGET;
-#endif // PDF_ENABLE_XFA
-
-// Basic data types
-typedef int FPDF_BOOL;
-typedef int FPDF_ERROR;
-typedef unsigned long FPDF_DWORD;
-typedef float FS_FLOAT;
-
-#ifdef PDF_ENABLE_XFA
-typedef void* FPDF_LPVOID;
-typedef void const* FPDF_LPCVOID;
-typedef char const* FPDF_LPCSTR;
-typedef int FPDF_RESULT;
-#endif
-
-// Duplex types
-typedef enum _FPDF_DUPLEXTYPE_ {
- DuplexUndefined = 0,
- Simplex,
- DuplexFlipShortEdge,
- DuplexFlipLongEdge
-} FPDF_DUPLEXTYPE;
-
-// String types
-typedef unsigned short FPDF_WCHAR;
-typedef unsigned char const* FPDF_LPCBYTE;
-
-// FPDFSDK may use three types of strings: byte string, wide string (UTF-16LE
-// encoded), and platform dependent string
-typedef const char* FPDF_BYTESTRING;
-
-// FPDFSDK always uses UTF-16LE encoded wide strings, each character uses 2
-// bytes (except surrogation), with the low byte first.
-typedef const unsigned short* FPDF_WIDESTRING;
-
-#ifdef PDF_ENABLE_XFA
-// Structure for a byte string.
-// Note, a byte string commonly means a UTF-16LE formated string.
-typedef struct _FPDF_BSTR {
- // String buffer.
- char* str;
- // Length of the string, in bytes.
- int len;
-} FPDF_BSTR;
-#endif // PDF_ENABLE_XFA
-
-// For Windows programmers: In most cases it's OK to treat FPDF_WIDESTRING as a
-// Windows unicode string, however, special care needs to be taken if you
-// expect to process Unicode larger than 0xffff.
-//
-// For Linux/Unix programmers: most compiler/library environments use 4 bytes
-// for a Unicode character, and you have to convert between FPDF_WIDESTRING and
-// system wide string by yourself.
-#ifdef _WIN32_WCE
-typedef const unsigned short* FPDF_STRING;
-#else
-typedef const char* FPDF_STRING;
-#endif
-
-// Matrix for transformation.
-typedef struct _FS_MATRIX_ {
- float a;
- float b;
- float c;
- float d;
- float e;
- float f;
-} FS_MATRIX;
-
-// Rectangle area(float) in device or page coordinate system.
-typedef struct _FS_RECTF_ {
- // The x-coordinate of the left-top corner.
- float left;
- // The y-coordinate of the left-top corner.
- float top;
- // The x-coordinate of the right-bottom corner.
- float right;
- // The y-coordinate of the right-bottom corner.
- float bottom;
-} * FS_LPRECTF, FS_RECTF;
-
-// Const Pointer to FS_RECTF structure.
-typedef const FS_RECTF* FS_LPCRECTF;
-
-#if defined(_WIN32) && defined(FPDFSDK_EXPORTS)
-// On Windows system, functions are exported in a DLL
-#define DLLEXPORT __declspec(dllexport)
-#define STDCALL __stdcall
-#else
-#define DLLEXPORT
-#define STDCALL
-#endif
-
-// Exported Functions
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Function: FPDF_InitLibrary
-// Initialize the FPDFSDK library
-// Parameters:
-// None
-// Return value:
-// None.
-// Comments:
-// Convenience function to call FPDF_InitLibraryWithConfig() for
-// backwards comatibility purposes.
-DLLEXPORT void STDCALL FPDF_InitLibrary();
-
-// Process-wide options for initializing the library.
-typedef struct FPDF_LIBRARY_CONFIG_ {
- // Version number of the interface. Currently must be 2.
- int version;
-
- // Array of paths to scan in place of the defaults when using built-in
- // FXGE font loading code. The array is terminated by a NULL pointer.
- // The Array may be NULL itself to use the default paths. May be ignored
- // entirely depending upon the platform.
- const char** m_pUserFontPaths;
-
- // Version 2.
-
- // pointer to the v8::Isolate to use, or NULL to force PDFium to create one.
- void* m_pIsolate;
-
- // The embedder data slot to use in the v8::Isolate to store PDFium's
- // per-isolate data. The value needs to be between 0 and
- // v8::Internals::kNumIsolateDataLots (exclusive). Note that 0 is fine
- // for most embedders.
- unsigned int m_v8EmbedderSlot;
-} FPDF_LIBRARY_CONFIG;
-
-// Function: FPDF_InitLibraryWithConfig
-// Initialize the FPDFSDK library
-// Parameters:
-// config - configuration information as above.
-// Return value:
-// None.
-// Comments:
-// You have to call this function before you can call any PDF
-// processing functions.
-DLLEXPORT void STDCALL FPDF_InitLibraryWithConfig(
- const FPDF_LIBRARY_CONFIG* config);
-
-// Function: FPDF_DestroyLibary
-// Release all resources allocated by the FPDFSDK library.
-// Parameters:
-// None.
-// Return value:
-// None.
-// Comments:
-// You can call this function to release all memory blocks allocated by
-// the library.
-// After this function is called, you should not call any PDF
-// processing functions.
-DLLEXPORT void STDCALL FPDF_DestroyLibrary();
-
-// Policy for accessing the local machine time.
-#define FPDF_POLICY_MACHINETIME_ACCESS 0
-
-// Function: FPDF_SetSandBoxPolicy
-// Set the policy for the sandbox environment.
-// Parameters:
-// policy - The specified policy for setting, for example:
-// FPDF_POLICY_MACHINETIME_ACCESS.
-// enable - True to enable, false to disable the policy.
-// Return value:
-// None.
-DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy,
- FPDF_BOOL enable);
-
-// Function: FPDF_LoadDocument
-// Open and load a PDF document.
-// Parameters:
-// file_path - Path to the PDF file (including extension).
-// password - A string used as the password for the PDF file.
-// If no password is needed, empty or NULL can be used.
-// Return value:
-// A handle to the loaded document, or NULL on failure.
-// Comments:
-// Loaded document can be closed by FPDF_CloseDocument().
-// If this function fails, you can use FPDF_GetLastError() to retrieve
-// the reason why it failed.
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path,
- FPDF_BYTESTRING password);
-
-// Function: FPDF_LoadMemDocument
-// Open and load a PDF document from memory.
-// Parameters:
-// data_buf - Pointer to a buffer containing the PDF document.
-// size - Number of bytes in the PDF document.
-// password - A string used as the password for the PDF file.
-// If no password is needed, empty or NULL can be used.
-// Return value:
-// A handle to the loaded document, or NULL on failure.
-// Comments:
-// The memory buffer must remain valid when the document is open.
-// The loaded document can be closed by FPDF_CloseDocument.
-// If this function fails, you can use FPDF_GetLastError() to retrieve
-// the reason why it failed.
-// Notes:
-// If PDFium is built with the XFA module, the application should call
-// FPDF_LoadXFA() function after the PDF document loaded to support XFA
-// fields defined in the fpdfformfill.h file.
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf,
- int size,
- FPDF_BYTESTRING password);
-
-// Structure for custom file access.
-typedef struct {
- // File length, in bytes.
- unsigned long m_FileLen;
-
- // A function pointer for getting a block of data from a specific position.
- // Position is specified by byte offset from the beginning of the file.
- // The position and size will never go out of range of the file length.
- // It may be possible for FPDFSDK to call this function multiple times for
- // the same position.
- // Return value: should be non-zero if successful, zero for error.
- int (*m_GetBlock)(void* param,
- unsigned long position,
- unsigned char* pBuf,
- unsigned long size);
-
- // A custom pointer for all implementation specific data. This pointer will
- // be used as the first parameter to the m_GetBlock callback.
- void* m_Param;
-} FPDF_FILEACCESS;
-
-#ifdef PDF_ENABLE_XFA
-/**
- * @brief Structure for file reading or writing (I/O).
- *
- * @note This is a handler and should be implemented by callers.
- */
-typedef struct _FPDF_FILEHANDLER {
- /**
- * @brief User-defined data.
- * @note Callers can use this field to track controls.
- */
- FPDF_LPVOID clientData;
- /**
- * @brief Callback function to release the current file stream object.
- *
- * @param[in] clientData Pointer to user-defined data.
- *
- * @return None.
- */
- void (*Release)(FPDF_LPVOID clientData);
- /**
- * @brief Callback function to retrieve the current file stream size.
- *
- * @param[in] clientData Pointer to user-defined data.
- *
- * @return Size of file stream.
- */
- FPDF_DWORD (*GetSize)(FPDF_LPVOID clientData);
- /**
- * @brief Callback function to read data from the current file stream.
- *
- * @param[in] clientData Pointer to user-defined data.
- * @param[in] offset Offset position starts from the beginning of file
- * stream. This parameter indicates reading position.
- * @param[in] buffer Memory buffer to store data which are read from
- * file stream. This parameter should not be NULL.
- * @param[in] size Size of data which should be read from file
- * stream, in bytes. The buffer indicated by the parameter buffer
- * should be enough to store specified data.
- *
- * @return 0 for success, other value for failure.
- */
- FPDF_RESULT (*ReadBlock)(FPDF_LPVOID clientData, FPDF_DWORD offset, FPDF_LPVOID buffer, FPDF_DWORD size);
- /**
- * @brief Callback function to write data into the current file stream.
- *
- * @param[in] clientData Pointer to user-defined data.
- * @param[in] offset Offset position starts from the beginning of file
- * stream. This parameter indicates writing position.
- * @param[in] buffer Memory buffer contains data which is written into
- * file stream. This parameter should not be NULL.
- * @param[in] size Size of data which should be written into file
- * stream, in bytes.
- *
- * @return 0 for success, other value for failure.
- */
- FPDF_RESULT (*WriteBlock)(FPDF_LPVOID clientData, FPDF_DWORD offset, FPDF_LPCVOID buffer, FPDF_DWORD size);
- /**
- * @brief Callback function to flush all internal accessing buffers.
- *
- * @param[in] clientData Pointer to user-defined data.
- *
- * @return 0 for success, other value for failure.
- */
- FPDF_RESULT (*Flush)(FPDF_LPVOID clientData);
- /**
- * @brief Callback function to change file size.
- *
- * @details This function is called under writing mode usually. Implementer
- * can determine whether to realize it based on application requests.
- *
- * @param[in] clientData Pointer to user-defined data.
- * @param[in] size New size of file stream, in bytes.
- *
- * @return 0 for success, other value for failure.
- */
- FPDF_RESULT (*Truncate)(FPDF_LPVOID clientData, FPDF_DWORD size);
-
-} FPDF_FILEHANDLER, *FPDF_LPFILEHANDLER;
-
-#endif
-// Function: FPDF_LoadCustomDocument
-// Load PDF document from a custom access descriptor.
-// Parameters:
-// pFileAccess - A structure for accessing the file.
-// password - Optional password for decrypting the PDF file.
-// Return value:
-// A handle to the loaded document, or NULL on failure.
-// Comments:
-// The application must keep the file resources valid until the PDF
-// document is closed.
-//
-// The loaded document can be closed with FPDF_CloseDocument.
-// Notes:
-// If PDFium is built with the XFA module, the application should call
-// FPDF_LoadXFA() function after the PDF document loaded to support XFA
-// fields defined in the fpdfformfill.h file.
-DLLEXPORT FPDF_DOCUMENT STDCALL
-FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, FPDF_BYTESTRING password);
-
-// Function: FPDF_GetFileVersion
-// Get the file version of the given PDF document.
-// Parameters:
-// doc - Handle to a document.
-// fileVersion - The PDF file version. File version: 14 for 1.4, 15
-// for 1.5, ...
-// Return value:
-// True if succeeds, false otherwise.
-// Comments:
-// If the document was created by FPDF_CreateNewDocument,
-// then this function will always fail.
-DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc,
- int* fileVersion);
-
-#define FPDF_ERR_SUCCESS 0 // No error.
-#define FPDF_ERR_UNKNOWN 1 // Unknown error.
-#define FPDF_ERR_FILE 2 // File not found or could not be opened.
-#define FPDF_ERR_FORMAT 3 // File not in PDF format or corrupted.
-#define FPDF_ERR_PASSWORD 4 // Password required or incorrect password.
-#define FPDF_ERR_SECURITY 5 // Unsupported security scheme.
-#define FPDF_ERR_PAGE 6 // Page not found or content error.
-#ifdef PDF_ENABLE_XFA
-#define FPDF_ERR_XFALOAD 7 // Load XFA error.
-#define FPDF_ERR_XFALAYOUT 8 // Layout XFA error.
-#endif // PDF_ENABLE_XFA
-
-// Function: FPDF_GetLastError
-// Get last error code when a function fails.
-// Parameters:
-// None.
-// Return value:
-// A 32-bit integer indicating error code as defined above.
-// Comments:
-// If the previous SDK call succeeded, the return value of this
-// function is not defined.
-DLLEXPORT unsigned long STDCALL FPDF_GetLastError();
-
-// Function: FPDF_GetDocPermission
-// Get file permission flags of the document.
-// Parameters:
-// document - Handle to a document. Returned by FPDF_LoadDocument.
-// Return value:
-// A 32-bit integer indicating permission flags. Please refer to the
-// PDF Reference for detailed descriptions. If the document is not
-// protected, 0xffffffff will be returned.
-DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document);
-
-// Function: FPDF_GetSecurityHandlerRevision
-// Get the revision for the security handler.
-// Parameters:
-// document - Handle to a document. Returned by FPDF_LoadDocument.
-// Return value:
-// The security handler revision number. Please refer to the PDF
-// Reference for a detailed description. If the document is not
-// protected, -1 will be returned.
-DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document);
-
-// Function: FPDF_GetPageCount
-// Get total number of pages in the document.
-// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument.
-// Return value:
-// Total number of pages in the document.
-DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document);
-
-// Function: FPDF_LoadPage
-// Load a page inside the document.
-// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument
-// page_index - Index number of the page. 0 for the first page.
-// Return value:
-// A handle to the loaded page, or NULL if page load fails.
-// Comments:
-// The loaded page can be rendered to devices using FPDF_RenderPage.
-// The loaded page can be closed using FPDF_ClosePage.
-DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document,
- int page_index);
-
-// Function: FPDF_GetPageWidth
-// Get page width.
-// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage.
-// Return value:
-// Page width (excluding non-displayable area) measured in points.
-// One point is 1/72 inch (around 0.3528 mm).
-DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page);
-
-// Function: FPDF_GetPageHeight
-// Get page height.
-// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage.
-// Return value:
-// Page height (excluding non-displayable area) measured in points.
-// One point is 1/72 inch (around 0.3528 mm)
-DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page);
-
-// Function: FPDF_GetPageSizeByIndex
-// Get the size of the page at the given index.
-// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument.
-// page_index - Page index, zero for the first page.
-// width - Pointer to a double to receive the page width
-// (in points).
-// height - Pointer to a double to receive the page height
-// (in points).
-// Return value:
-// Non-zero for success. 0 for error (document or page not found).
-DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document,
- int page_index,
- double* width,
- double* height);
-
-// Page rendering flags. They can be combined with bit-wise OR.
-//
-// Set if annotations are to be rendered.
-#define FPDF_ANNOT 0x01
-// Set if using text rendering optimized for LCD display.
-#define FPDF_LCD_TEXT 0x02
-// Don't use the native text output available on some platforms
-#define FPDF_NO_NATIVETEXT 0x04
-// Grayscale output.
-#define FPDF_GRAYSCALE 0x08
-// Set if you want to get some debug info.
-#define FPDF_DEBUG_INFO 0x80
-// Set if you don't want to catch exceptions.
-#define FPDF_NO_CATCH 0x100
-// Limit image cache size.
-#define FPDF_RENDER_LIMITEDIMAGECACHE 0x200
-// Always use halftone for image stretching.
-#define FPDF_RENDER_FORCEHALFTONE 0x400
-// Render for printing.
-#define FPDF_PRINTING 0x800
-// Set to disable anti-aliasing on text.
-#define FPDF_RENDER_NO_SMOOTHTEXT 0x1000
-// Set to disable anti-aliasing on images.
-#define FPDF_RENDER_NO_SMOOTHIMAGE 0x2000
-// Set to disable anti-aliasing on paths.
-#define FPDF_RENDER_NO_SMOOTHPATH 0x4000
-// Set whether to render in a reverse Byte order, this flag is only used when
-// rendering to a bitmap.
-#define FPDF_REVERSE_BYTE_ORDER 0x10
-
-#ifdef _WIN32
-// Function: FPDF_RenderPage
-// Render contents of a page to a device (screen, bitmap, or printer).
-// This function is only supported on Windows.
-// Parameters:
-// dc - Handle to the device context.
-// page - Handle to the page. Returned by FPDF_LoadPage.
-// start_x - Left pixel position of the display area in
-// device coordinates.
-// start_y - Top pixel position of the display area in device
-// coordinates.
-// size_x - Horizontal size (in pixels) for displaying the page.
-// size_y - Vertical size (in pixels) for displaying the page.
-// rotate - Page orientation:
-// 0 (normal)
-// 1 (rotated 90 degrees clockwise)
-// 2 (rotated 180 degrees)
-// 3 (rotated 90 degrees counter-clockwise)
-// flags - 0 for normal display, or combination of flags
-// defined above.
-// Return value:
-// None.
-DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
- FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int flags);
-#endif
-
-// Function: FPDF_RenderPageBitmap
-// Render contents of a page to a device independent bitmap.
-// Parameters:
-// bitmap - Handle to the device independent bitmap (as the
-// output buffer). The bitmap handle can be created
-// by FPDFBitmap_Create.
-// page - Handle to the page. Returned by FPDF_LoadPage
-// start_x - Left pixel position of the display area in
-// bitmap coordinates.
-// start_y - Top pixel position of the display area in bitmap
-// coordinates.
-// size_x - Horizontal size (in pixels) for displaying the page.
-// size_y - Vertical size (in pixels) for displaying the page.
-// rotate - Page orientation:
-// 0 (normal)
-// 1 (rotated 90 degrees clockwise)
-// 2 (rotated 180 degrees)
-// 3 (rotated 90 degrees counter-clockwise)
-// flags - 0 for normal display, or combination of flags
-// defined above.
-// Return value:
-// None.
-DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap,
- FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int flags);
-
-// Function: FPDF_ClosePage
-// Close a loaded PDF page.
-// Parameters:
-// page - Handle to the loaded page.
-// Return value:
-// None.
-DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page);
-
-// Function: FPDF_CloseDocument
-// Close a loaded PDF document.
-// Parameters:
-// document - Handle to the loaded document.
-// Return value:
-// None.
-DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document);
-
-// Function: FPDF_DeviceToPage
-// Convert the screen coordinates of a point to page coordinates.
-// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage.
-// start_x - Left pixel position of the display area in
-// device coordinates.
-// start_y - Top pixel position of the display area in device
-// coordinates.
-// size_x - Horizontal size (in pixels) for displaying the page.
-// size_y - Vertical size (in pixels) for displaying the page.
-// rotate - Page orientation:
-// 0 (normal)
-// 1 (rotated 90 degrees clockwise)
-// 2 (rotated 180 degrees)
-// 3 (rotated 90 degrees counter-clockwise)
-// device_x - X value in device coordinates to be converted.
-// device_y - Y value in device coordinates to be converted.
-// page_x - A pointer to a double receiving the converted X
-// value in page coordinates.
-// page_y - A pointer to a double receiving the converted Y
-// value in page coordinates.
-// Return value:
-// None.
-// Comments:
-// The page coordinate system has its origin at the left-bottom corner
-// of the page, with the X-axis on the bottom going to the right, and
-// the Y-axis on the left side going up.
-//
-// NOTE: this coordinate system can be altered when you zoom, scroll,
-// or rotate a page, however, a point on the page should always have
-// the same coordinate values in the page coordinate system.
-//
-// The device coordinate system is device dependent. For screen device,
-// its origin is at the left-top corner of the window. However this
-// origin can be altered by the Windows coordinate transformation
-// utilities.
-//
-// You must make sure the start_x, start_y, size_x, size_y
-// and rotate parameters have exactly same values as you used in
-// the FPDF_RenderPage() function call.
-DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int device_x,
- int device_y,
- double* page_x,
- double* page_y);
-
-// Function: FPDF_PageToDevice
-// Convert the page coordinates of a point to screen coordinates.
-// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage.
-// start_x - Left pixel position of the display area in
-// device coordinates.
-// start_y - Top pixel position of the display area in device
-// coordinates.
-// size_x - Horizontal size (in pixels) for displaying the page.
-// size_y - Vertical size (in pixels) for displaying the page.
-// rotate - Page orientation:
-// 0 (normal)
-// 1 (rotated 90 degrees clockwise)
-// 2 (rotated 180 degrees)
-// 3 (rotated 90 degrees counter-clockwise)
-// page_x - X value in page coordinates.
-// page_y - Y value in page coordinate.
-// device_x - A pointer to an integer receiving the result X
-// value in device coordinates.
-// device_y - A pointer to an integer receiving the result Y
-// value in device coordinates.
-// Return value:
-// None.
-// Comments:
-// See comments for FPDF_DeviceToPage().
-DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- double page_x,
- double page_y,
- int* device_x,
- int* device_y);
-
-// Function: FPDFBitmap_Create
-// Create a device independent bitmap (FXDIB).
-// Parameters:
-// width - The number of pixels in width for the bitmap.
-// Must be greater than 0.
-// height - The number of pixels in height for the bitmap.
-// Must be greater than 0.
-// alpha - A flag indicating whether the alpha channel is used.
-// Non-zero for using alpha, zero for not using.
-// Return value:
-// The created bitmap handle, or NULL if a parameter error or out of
-// memory.
-// Comments:
-// The bitmap always uses 4 bytes per pixel. The first byte is always
-// double word aligned.
-//
-// The byte order is BGRx (the last byte unused if no alpha channel) or
-// BGRA.
-//
-// The pixels in a horizontal line are stored side by side, with the
-// left most pixel stored first (with lower memory address).
-// Each line uses width * 4 bytes.
-//
-// Lines are stored one after another, with the top most line stored
-// first. There is no gap between adjacent lines.
-//
-// This function allocates enough memory for holding all pixels in the
-// bitmap, but it doesn't initialize the buffer. Applications can use
-// FPDFBitmap_FillRect to fill the bitmap using any color.
-DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width,
- int height,
- int alpha);
-
-// More DIB formats
-// Gray scale bitmap, one byte per pixel.
-#define FPDFBitmap_Gray 1
-// 3 bytes per pixel, byte order: blue, green, red.
-#define FPDFBitmap_BGR 2
-// 4 bytes per pixel, byte order: blue, green, red, unused.
-#define FPDFBitmap_BGRx 3
-// 4 bytes per pixel, byte order: blue, green, red, alpha.
-#define FPDFBitmap_BGRA 4
-
-// Function: FPDFBitmap_CreateEx
-// Create a device independent bitmap (FXDIB)
-// Parameters:
-// width - The number of pixels in width for the bitmap.
-// Must be greater than 0.
-// height - The number of pixels in height for the bitmap.
-// Must be greater than 0.
-// format - A number indicating for bitmap format, as defined
-// above.
-// first_scan - A pointer to the first byte of the first line if
-// using an external buffer. If this parameter is NULL,
-// then the a new buffer will be created.
-// stride - Number of bytes for each scan line, for external
-// buffer only.
-// Return value:
-// The bitmap handle, or NULL if parameter error or out of memory.
-// Comments:
-// Similar to FPDFBitmap_Create function, but allows for more formats
-// and an external buffer is supported. The bitmap created by this
-// function can be used in any place that a FPDF_BITMAP handle is
-// required.
-//
-// If an external buffer is used, then the application should destroy
-// the buffer by itself. FPDFBitmap_Destroy function will not destroy
-// the buffer.
-DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_CreateEx(int width,
- int height,
- int format,
- void* first_scan,
- int stride);
-
-// Function: FPDFBitmap_FillRect
-// Fill a rectangle in a bitmap.
-// Parameters:
-// bitmap - The handle to the bitmap. Returned by
-// FPDFBitmap_Create.
-// left - The left position. Starting from 0 at the
-// left-most pixel.
-// top - The top position. Starting from 0 at the
-// top-most line.
-// width - Width in pixels to be filled.
-// height - Height in pixels to be filled.
-// color - A 32-bit value specifing the color, in 8888 ARGB
-// format.
-// Return value:
-// None.
-// Comments:
-// This function sets the color and (optionally) alpha value in the
-// specified region of the bitmap.
-//
-// NOTE: If the alpha channel is used, this function does NOT
-// composite the background with the source color, instead the
-// background will be replaced by the source color and the alpha.
-//
-// If the alpha channel is not used, the alpha parameter is ignored.
-DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap,
- int left,
- int top,
- int width,
- int height,
- FPDF_DWORD color);
-
-// Function: FPDFBitmap_GetBuffer
-// Get data buffer of a bitmap.
-// Parameters:
-// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create.
-// Return value:
-// The pointer to the first byte of the bitmap buffer.
-// Comments:
-// The stride may be more than width * number of bytes per pixel
-//
-// Applications can use this function to get the bitmap buffer pointer,
-// then manipulate any color and/or alpha values for any pixels in the
-// bitmap.
-//
-// The data is in BGRA format. Where the A maybe unused if alpha was
-// not specified.
-DLLEXPORT void* STDCALL FPDFBitmap_GetBuffer(FPDF_BITMAP bitmap);
-
-// Function: FPDFBitmap_GetWidth
-// Get width of a bitmap.
-// Parameters:
-// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create.
-// Return value:
-// The width of the bitmap in pixels.
-DLLEXPORT int STDCALL FPDFBitmap_GetWidth(FPDF_BITMAP bitmap);
-
-// Function: FPDFBitmap_GetHeight
-// Get height of a bitmap.
-// Parameters:
-// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create.
-// Return value:
-// The height of the bitmap in pixels.
-DLLEXPORT int STDCALL FPDFBitmap_GetHeight(FPDF_BITMAP bitmap);
-
-// Function: FPDFBitmap_GetStride
-// Get number of bytes for each line in the bitmap buffer.
-// Parameters:
-// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create.
-// Return value:
-// The number of bytes for each line in the bitmap buffer.
-// Comments:
-// The stride may be more than width * number of bytes per pixel.
-DLLEXPORT int STDCALL FPDFBitmap_GetStride(FPDF_BITMAP bitmap);
-
-// Function: FPDFBitmap_Destroy
-// Destroy a bitmap and release all related buffers.
-// Parameters:
-// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create.
-// Return value:
-// None.
-// Comments:
-// This function will not destroy any external buffers provided when
-// the bitmap was created.
-DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap);
-
-// Function: FPDF_VIEWERREF_GetPrintScaling
-// Whether the PDF document prefers to be scaled or not.
-// Parameters:
-// document - Handle to the loaded document.
-// Return value:
-// None.
-DLLEXPORT FPDF_BOOL STDCALL
-FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document);
-
-// Function: FPDF_VIEWERREF_GetNumCopies
-// Returns the number of copies to be printed.
-// Parameters:
-// document - Handle to the loaded document.
-// Return value:
-// The number of copies to be printed.
-DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document);
-
-// Function: FPDF_VIEWERREF_GetPrintPageRange
-// Page numbers to initialize print dialog box when file is printed.
-// Parameters:
-// document - Handle to the loaded document.
-// Return value:
-// The print page range to be used for printing.
-DLLEXPORT FPDF_PAGERANGE STDCALL
-FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document);
-
-// Function: FPDF_VIEWERREF_GetDuplex
-// Returns the paper handling option to be used when printing from
-// the print dialog.
-// Parameters:
-// document - Handle to the loaded document.
-// Return value:
-// The paper handling option to be used when printing.
-DLLEXPORT FPDF_DUPLEXTYPE STDCALL
-FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document);
-
-// Function: FPDF_CountNamedDests
-// Get the count of named destinations in the PDF document.
-// Parameters:
-// document - Handle to a document
-// Return value:
-// The count of named destinations.
-DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document);
-
-// Function: FPDF_GetNamedDestByName
-// Get a the destination handle for the given name.
-// Parameters:
-// document - Handle to the loaded document.
-// name - The name of a destination.
-// Return value:
-// The handle to the destination.
-DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,
- FPDF_BYTESTRING name);
-
-// Function: FPDF_GetNamedDest
-// Get the named destination by index.
-// Parameters:
-// document - Handle to a document
-// index - The index of a named destination.
-// buffer - The buffer to store the destination name,
-// used as wchar_t*.
-// buflen [in/out] - Size of the buffer in bytes on input,
-// length of the result in bytes on output
-// or -1 if the buffer is too small.
-// Return value:
-// The destination handle for a given index, or NULL if there is no
-// named destination corresponding to |index|.
-// Comments:
-// Call this function twice to get the name of the named destination:
-// 1) First time pass in |buffer| as NULL and get buflen.
-// 2) Second time pass in allocated |buffer| and buflen to retrieve
-// |buffer|, which should be used as wchar_t*.
-//
-// If buflen is not sufficiently large, it will be set to -1 upon
-// return.
-DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document,
- int index,
- void* buffer,
- long* buflen);
-
-#ifdef PDF_ENABLE_XFA
-// Function: FPDF_BStr_Init
-// Helper function to initialize a byte string.
-DLLEXPORT FPDF_RESULT STDCALL FPDF_BStr_Init(FPDF_BSTR* str);
-
-// Function: FPDF_BStr_Set
-// Helper function to set string data.
-DLLEXPORT FPDF_RESULT STDCALL FPDF_BStr_Set(FPDF_BSTR* str,
- FPDF_LPCSTR bstr,
- int length);
-
-// Function: FPDF_BStr_Clear
-// Helper function to clear a byte string.
-DLLEXPORT FPDF_RESULT STDCALL FPDF_BStr_Clear(FPDF_BSTR* str);
-#endif // PDF_ENABLE_XFA
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // PUBLIC_FPDFVIEW_H_
diff --git a/src/main/jni/lib/arm64-v8a/libc++_shared.so b/src/main/jni/lib/arm64-v8a/libc++_shared.so
deleted file mode 100755
index 562430e3..00000000
Binary files a/src/main/jni/lib/arm64-v8a/libc++_shared.so and /dev/null differ
diff --git a/src/main/jni/lib/arm64-v8a/libmodft2.so b/src/main/jni/lib/arm64-v8a/libmodft2.so
deleted file mode 100755
index b28c461a..00000000
Binary files a/src/main/jni/lib/arm64-v8a/libmodft2.so and /dev/null differ
diff --git a/src/main/jni/lib/arm64-v8a/libmodpdfium.so b/src/main/jni/lib/arm64-v8a/libmodpdfium.so
deleted file mode 100755
index 898326b5..00000000
Binary files a/src/main/jni/lib/arm64-v8a/libmodpdfium.so and /dev/null differ
diff --git a/src/main/jni/lib/arm64-v8a/libmodpng.so b/src/main/jni/lib/arm64-v8a/libmodpng.so
deleted file mode 100755
index 65410615..00000000
Binary files a/src/main/jni/lib/arm64-v8a/libmodpng.so and /dev/null differ
diff --git a/src/main/jni/lib/armeabi-v7a/libc++_shared.so b/src/main/jni/lib/armeabi-v7a/libc++_shared.so
deleted file mode 100755
index 65413400..00000000
Binary files a/src/main/jni/lib/armeabi-v7a/libc++_shared.so and /dev/null differ
diff --git a/src/main/jni/lib/armeabi-v7a/libmodft2.so b/src/main/jni/lib/armeabi-v7a/libmodft2.so
deleted file mode 100755
index 80ec5265..00000000
Binary files a/src/main/jni/lib/armeabi-v7a/libmodft2.so and /dev/null differ
diff --git a/src/main/jni/lib/armeabi-v7a/libmodpdfium.so b/src/main/jni/lib/armeabi-v7a/libmodpdfium.so
deleted file mode 100755
index bc89f3dd..00000000
Binary files a/src/main/jni/lib/armeabi-v7a/libmodpdfium.so and /dev/null differ
diff --git a/src/main/jni/lib/armeabi-v7a/libmodpng.so b/src/main/jni/lib/armeabi-v7a/libmodpng.so
deleted file mode 100755
index 42249c5b..00000000
Binary files a/src/main/jni/lib/armeabi-v7a/libmodpng.so and /dev/null differ
diff --git a/src/main/jni/lib/mips/libc++_shared.so b/src/main/jni/lib/mips/libc++_shared.so
deleted file mode 100755
index 533554ca..00000000
Binary files a/src/main/jni/lib/mips/libc++_shared.so and /dev/null differ
diff --git a/src/main/jni/lib/mips/libmodft2.so b/src/main/jni/lib/mips/libmodft2.so
deleted file mode 100755
index 2aeb607d..00000000
Binary files a/src/main/jni/lib/mips/libmodft2.so and /dev/null differ
diff --git a/src/main/jni/lib/mips/libmodpdfium.so b/src/main/jni/lib/mips/libmodpdfium.so
deleted file mode 100755
index 94a7100a..00000000
Binary files a/src/main/jni/lib/mips/libmodpdfium.so and /dev/null differ
diff --git a/src/main/jni/lib/mips/libmodpng.so b/src/main/jni/lib/mips/libmodpng.so
deleted file mode 100755
index bcb4bb73..00000000
Binary files a/src/main/jni/lib/mips/libmodpng.so and /dev/null differ
diff --git a/src/main/jni/lib/mips64/libc++_shared.so b/src/main/jni/lib/mips64/libc++_shared.so
deleted file mode 100755
index 3844c40a..00000000
Binary files a/src/main/jni/lib/mips64/libc++_shared.so and /dev/null differ
diff --git a/src/main/jni/lib/mips64/libmodft2.so b/src/main/jni/lib/mips64/libmodft2.so
deleted file mode 100755
index 1e179a4d..00000000
Binary files a/src/main/jni/lib/mips64/libmodft2.so and /dev/null differ
diff --git a/src/main/jni/lib/mips64/libmodpdfium.so b/src/main/jni/lib/mips64/libmodpdfium.so
deleted file mode 100755
index fd261ca6..00000000
Binary files a/src/main/jni/lib/mips64/libmodpdfium.so and /dev/null differ
diff --git a/src/main/jni/lib/mips64/libmodpng.so b/src/main/jni/lib/mips64/libmodpng.so
deleted file mode 100755
index aa45e700..00000000
Binary files a/src/main/jni/lib/mips64/libmodpng.so and /dev/null differ
diff --git a/src/main/jni/lib/x86/libc++_shared.so b/src/main/jni/lib/x86/libc++_shared.so
deleted file mode 100755
index 232d49d4..00000000
Binary files a/src/main/jni/lib/x86/libc++_shared.so and /dev/null differ
diff --git a/src/main/jni/lib/x86/libmodft2.so b/src/main/jni/lib/x86/libmodft2.so
deleted file mode 100755
index e6712e3d..00000000
Binary files a/src/main/jni/lib/x86/libmodft2.so and /dev/null differ
diff --git a/src/main/jni/lib/x86/libmodpdfium.so b/src/main/jni/lib/x86/libmodpdfium.so
deleted file mode 100755
index 5b937530..00000000
Binary files a/src/main/jni/lib/x86/libmodpdfium.so and /dev/null differ
diff --git a/src/main/jni/lib/x86/libmodpng.so b/src/main/jni/lib/x86/libmodpng.so
deleted file mode 100755
index 5cbaf78d..00000000
Binary files a/src/main/jni/lib/x86/libmodpng.so and /dev/null differ
diff --git a/src/main/jni/lib/x86_64/libc++_shared.so b/src/main/jni/lib/x86_64/libc++_shared.so
deleted file mode 100755
index 4fe5affd..00000000
Binary files a/src/main/jni/lib/x86_64/libc++_shared.so and /dev/null differ
diff --git a/src/main/jni/lib/x86_64/libmodft2.so b/src/main/jni/lib/x86_64/libmodft2.so
deleted file mode 100755
index 57bec3ca..00000000
Binary files a/src/main/jni/lib/x86_64/libmodft2.so and /dev/null differ
diff --git a/src/main/jni/lib/x86_64/libmodpdfium.so b/src/main/jni/lib/x86_64/libmodpdfium.so
deleted file mode 100755
index 4edc2c27..00000000
Binary files a/src/main/jni/lib/x86_64/libmodpdfium.so and /dev/null differ
diff --git a/src/main/jni/lib/x86_64/libmodpng.so b/src/main/jni/lib/x86_64/libmodpng.so
deleted file mode 100755
index 3833468f..00000000
Binary files a/src/main/jni/lib/x86_64/libmodpng.so and /dev/null differ
diff --git a/src/main/jniLibs/arm64-v8a/libpdfium.cr.so b/src/main/jniLibs/arm64-v8a/libpdfium.cr.so
new file mode 100755
index 00000000..3a5df1f9
Binary files /dev/null and b/src/main/jniLibs/arm64-v8a/libpdfium.cr.so differ
diff --git a/src/main/jniLibs/armeabi-v7a/libpdfium.cr.so b/src/main/jniLibs/armeabi-v7a/libpdfium.cr.so
new file mode 100755
index 00000000..7c8706a2
Binary files /dev/null and b/src/main/jniLibs/armeabi-v7a/libpdfium.cr.so differ
diff --git a/src/main/jniLibs/x86/libpdfium.cr.so b/src/main/jniLibs/x86/libpdfium.cr.so
new file mode 100755
index 00000000..661b444d
Binary files /dev/null and b/src/main/jniLibs/x86/libpdfium.cr.so differ
diff --git a/src/main/jniLibs/x86_64/libpdfium.cr.so b/src/main/jniLibs/x86_64/libpdfium.cr.so
new file mode 100755
index 00000000..268f3087
Binary files /dev/null and b/src/main/jniLibs/x86_64/libpdfium.cr.so differ