David PHAM-VAN

Add Windows implementation

Too many changes to show.

To preserve performance only 20 of 20+ files are displayed.

@@ -50,3 +50,5 @@ ref @@ -50,3 +50,5 @@ ref
50 .flutter-plugins-dependencies 50 .flutter-plugins-dependencies
51 51
52 cache_* 52 cache_*
  53 +
  54 +.vscode
@@ -13,8 +13,8 @@ @@ -13,8 +13,8 @@
13 # limitations under the License. 13 # limitations under the License.
14 14
15 DART_SRC=$(shell find . -name '*.dart') 15 DART_SRC=$(shell find . -name '*.dart')
16 - CLNG_SRC=$(shell find printing/ios -name '*.java' -o -name '*.m' -o -name '*.h') $(shell find printing/android -name '*.java' -o -name '*.m' -o -name '*.h')  
17 - SWFT_SRC=$(shell find . -name '*.swift') 16 + CLNG_SRC=$(shell find printing/ios printing/macos printing/windows printing/android -name '*.cpp' -o -name '*.m' -o -name '*.h' -o -name '*.java')
  17 + SWFT_SRC=$(shell find printing/ios printing/macos -name '*.swift')
18 FONTS=pdf/open-sans.ttf pdf/open-sans-bold.ttf pdf/roboto.ttf pdf/noto-sans.ttf pdf/genyomintw.ttf demo/assets/roboto1.ttf demo/assets/roboto2.ttf demo/assets/roboto3.ttf demo/assets/open-sans.ttf demo/assets/open-sans-bold.ttf pdf/hacen-tunisia.ttf 18 FONTS=pdf/open-sans.ttf pdf/open-sans-bold.ttf pdf/roboto.ttf pdf/noto-sans.ttf pdf/genyomintw.ttf demo/assets/roboto1.ttf demo/assets/roboto2.ttf demo/assets/roboto3.ttf demo/assets/open-sans.ttf demo/assets/open-sans-bold.ttf pdf/hacen-tunisia.ttf
19 COV_PORT=9292 19 COV_PORT=9292
20 20
@@ -63,13 +63,13 @@ pdf/hacen-tunisia.ttf: @@ -63,13 +63,13 @@ pdf/hacen-tunisia.ttf:
63 format: format-dart format-clang format-swift 63 format: format-dart format-clang format-swift
64 64
65 format-dart: $(DART_SRC) 65 format-dart: $(DART_SRC)
66 - dartfmt -w --fix $^ 66 + dart format --fix $^
67 67
68 format-clang: $(CLNG_SRC) 68 format-clang: $(CLNG_SRC)
69 clang-format -style=Chromium -i $^ 69 clang-format -style=Chromium -i $^
70 70
71 format-swift: $(SWFT_SRC) 71 format-swift: $(SWFT_SRC)
72 - swiftformat --swiftversion 4.2 $^ 72 + which swiftformat && swiftformat --swiftversion 4.2 $^ || true
73 73
74 .coverage: 74 .coverage:
75 which coverage || pub global activate coverage 75 which coverage || pub global activate coverage
@@ -83,7 +83,7 @@ printing/example/.metadata: @@ -83,7 +83,7 @@ printing/example/.metadata:
83 rm -rf printing/example/test 83 rm -rf printing/example/test
84 84
85 pdf/pubspec.lock: pdf/pubspec.yaml 85 pdf/pubspec.lock: pdf/pubspec.yaml
86 - cd pdf; pub get 86 + cd pdf; dart pub get
87 87
88 printing/pubspec.lock: printing/pubspec.yaml 88 printing/pubspec.lock: printing/pubspec.yaml
89 cd printing; flutter packages get 89 cd printing; flutter packages get
@@ -122,50 +122,50 @@ clean: @@ -122,50 +122,50 @@ clean:
122 publish-pdf: format clean 122 publish-pdf: format clean
123 test -z "$(shell git status --porcelain)" 123 test -z "$(shell git status --porcelain)"
124 find pdf -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';' 124 find pdf -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';'
125 - cd pdf; pub publish -f 125 + cd pdf; dart pub publish -f
126 find pdf -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';' 126 find pdf -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';'
127 git tag $(shell grep version pdf/pubspec.yaml | sed 's/version\s*:\s*/pdf-/g') 127 git tag $(shell grep version pdf/pubspec.yaml | sed 's/version\s*:\s*/pdf-/g')
128 128
129 publish-printing: format clean 129 publish-printing: format clean
130 test -z "$(shell git status --porcelain)" 130 test -z "$(shell git status --porcelain)"
131 find printing -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';' 131 find printing -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';'
132 - cd printing; pub publish -f 132 + cd printing; dart pub publish -f
133 find printing -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';' 133 find printing -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';'
134 git tag $(shell grep version printing/pubspec.yaml | sed 's/version\s*:\s*/printing-/g') 134 git tag $(shell grep version printing/pubspec.yaml | sed 's/version\s*:\s*/printing-/g')
135 135
136 .pana: 136 .pana:
137 - which pana || pub global activate pana 137 + which pana || dart pub global activate pana
138 touch $@ 138 touch $@
139 139
140 analyze-pdf: .pana 140 analyze-pdf: .pana
141 @find pdf -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';' 141 @find pdf -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';'
142 - @pub global run pana --no-warning --source path pdf 2> /dev/null | python test/pana_report.py 142 + @dart pub global run pana --no-warning --source path pdf 2> /dev/null | python test/pana_report.py
143 @find pdf -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';' 143 @find pdf -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';'
144 144
145 analyze-printing: .pana 145 analyze-printing: .pana
146 @find printing -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';' 146 @find printing -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';'
147 - @pub global run pana --no-warning --source path printing 2> /dev/null | python test/pana_report.py 147 + @dart pub global run pana --no-warning --source path printing 2> /dev/null | python test/pana_report.py
148 @find printing -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';' 148 @find printing -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';'
149 149
150 analyze: analyze-pdf analyze-printing 150 analyze: analyze-pdf analyze-printing
151 151
152 analyze-ci-pdf: .pana 152 analyze-ci-pdf: .pana
153 @find pdf -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';' 153 @find pdf -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';'
154 - @pub global run pana --no-warning --source path pdf 154 + @dart pub global run pana --no-warning --source path pdf
155 @find pdf -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';' 155 @find pdf -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';'
156 156
157 analyze-ci-printing: .pana 157 analyze-ci-printing: .pana
158 @find printing -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';' 158 @find printing -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';'
159 - @pub global run pana --no-warning --source path printing 159 + @dart pub global run pana --no-warning --source path printing
160 @find printing -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';' 160 @find printing -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';'
161 161
162 .dartfix: 162 .dartfix:
163 - which dartfix || pub global activate dartfix 163 + which dartfix || dart pub global activate dartfix
164 touch $@ 164 touch $@
165 165
166 fix: get .dartfix 166 fix: get .dartfix
167 - cd pdf; pub global run dartfix:fix --overwrite .  
168 - cd printing; pub global run dartfix:fix --overwrite . 167 + cd pdf; dart pub global run dartfix:fix --overwrite .
  168 + cd printing; dart pub global run dartfix:fix --overwrite .
169 169
170 ref: 170 ref:
171 mkdir -p ref 171 mkdir -p ref
1 # Changelog 1 # Changelog
2 2
  3 +## 3.7.0
  4 +
  5 +- Add beta support for Windows Desktop
  6 +
3 ## 3.6.4 7 ## 3.6.4
4 8
5 - Remove useless android dependencies, reduces the final apk file size. 9 - Remove useless android dependencies, reduces the final apk file size.
@@ -50,3 +50,4 @@ web @@ -50,3 +50,4 @@ web
50 .metadata 50 .metadata
51 README.md 51 README.md
52 test 52 test
  53 +windows
@@ -4,7 +4,7 @@ description: Plugin that allows Flutter apps to generate and print documents to @@ -4,7 +4,7 @@ description: Plugin that allows Flutter apps to generate and print documents to
4 homepage: https://github.com/DavBfr/dart_pdf/tree/master/printing 4 homepage: https://github.com/DavBfr/dart_pdf/tree/master/printing
5 repository: https://github.com/DavBfr/dart_pdf 5 repository: https://github.com/DavBfr/dart_pdf
6 issue_tracker: https://github.com/DavBfr/dart_pdf/issues 6 issue_tracker: https://github.com/DavBfr/dart_pdf/issues
7 -version: 3.6.4 7 +version: 3.7.0
8 8
9 environment: 9 environment:
10 sdk: ">=2.3.0 <3.0.0" 10 sdk: ">=2.3.0 <3.0.0"
@@ -43,3 +43,5 @@ flutter: @@ -43,3 +43,5 @@ flutter:
43 web: 43 web:
44 fileName: src/printing_web.dart 44 fileName: src/printing_web.dart
45 pluginClass: PrintingPlugin 45 pluginClass: PrintingPlugin
  46 + windows:
  47 + pluginClass: PrintingPlugin
  1 +flutter/
  2 +
  3 +# Visual Studio user-specific files.
  4 +*.suo
  5 +*.user
  6 +*.userosscache
  7 +*.sln.docstates
  8 +
  9 +# Visual Studio build-related files.
  10 +x64/
  11 +x86/
  12 +
  13 +# Visual Studio cache files
  14 +# files ending in .cache can be ignored
  15 +*.[Cc]ache
  16 +# but keep track of directories ending in .cache
  17 +!*.[Cc]ache/
  18 +
  19 +!pdfium/x64
  20 +!pdfium/x86
  1 +# Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com>
  2 +#
  3 +# Licensed under the Apache License, Version 2.0 (the "License"); you may not
  4 +# use this file except in compliance with the License. You may obtain a copy of
  5 +# the License at
  6 +#
  7 +# http://www.apache.org/licenses/LICENSE-2.0
  8 +#
  9 +# Unless required by applicable law or agreed to in writing, software
  10 +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  11 +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  12 +# License for the specific language governing permissions and limitations under
  13 +# the License.
  14 +
  15 +cmake_minimum_required(VERSION 3.15)
  16 +set(PROJECT_NAME "printing")
  17 +project(${PROJECT_NAME} LANGUAGES CXX)
  18 +
  19 +# This value is used when generating builds using this plugin, so it must not be
  20 +# changed
  21 +set(PLUGIN_NAME "printing_plugin")
  22 +
  23 +include(pdfium/PDFiumConfig.cmake)
  24 +
  25 +add_library(${PLUGIN_NAME} SHARED
  26 + "printing.cpp"
  27 + "printing.h"
  28 + "printing_plugin.cpp"
  29 + "include/printing/printing_plugin.h"
  30 + "print_job.cpp"
  31 + "print_job.h")
  32 +
  33 +apply_standard_settings(${PLUGIN_NAME})
  34 +set_target_properties(${PLUGIN_NAME} PROPERTIES CXX_VISIBILITY_PRESET hidden)
  35 +target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL)
  36 +target_include_directories(${PLUGIN_NAME}
  37 + INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")
  38 +target_link_libraries(${PLUGIN_NAME} PRIVATE pdfium flutter flutter_wrapper_plugin)
  39 +
  40 +# List of absolute paths to libraries that should be bundled with the plugin
  41 +set(printing_bundled_libraries "${CMAKE_CURRENT_SOURCE_DIR}/pdfium/x64/bin/pdfium.dll" PARENT_SCOPE)
  1 +/*
  2 + * Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com>
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +
  17 +#ifndef FLUTTER_PLUGIN_PRINTING_PLUGIN_H_
  18 +#define FLUTTER_PLUGIN_PRINTING_PLUGIN_H_
  19 +
  20 +#include <flutter_plugin_registrar.h>
  21 +
  22 +#ifdef FLUTTER_PLUGIN_IMPL
  23 +#define FLUTTER_PLUGIN_EXPORT __declspec(dllexport)
  24 +#else
  25 +#define FLUTTER_PLUGIN_EXPORT __declspec(dllimport)
  26 +#endif
  27 +
  28 +#if defined(__cplusplus)
  29 +extern "C" {
  30 +#endif
  31 +
  32 +FLUTTER_PLUGIN_EXPORT void PrintingPluginRegisterWithRegistrar(
  33 + FlutterDesktopPluginRegistrarRef registrar);
  34 +
  35 +#if defined(__cplusplus)
  36 +} // extern "C"
  37 +#endif
  38 +
  39 +#endif // FLUTTER_PLUGIN_PRINTING_PLUGIN_H_
  1 +// Copyright 2014 PDFium Authors. All rights reserved.
  2 +//
  3 +// Redistribution and use in source and binary forms, with or without
  4 +// modification, are permitted provided that the following conditions are
  5 +// met:
  6 +//
  7 +// * Redistributions of source code must retain the above copyright
  8 +// notice, this list of conditions and the following disclaimer.
  9 +// * Redistributions in binary form must reproduce the above
  10 +// copyright notice, this list of conditions and the following disclaimer
  11 +// in the documentation and/or other materials provided with the
  12 +// distribution.
  13 +// * Neither the name of Google Inc. nor the names of its
  14 +// contributors may be used to endorse or promote products derived from
  15 +// this software without specific prior written permission.
  16 +//
  17 +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  18 +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  19 +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  20 +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  21 +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  22 +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  23 +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  24 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  25 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  26 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  27 +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28 +
  29 +
  30 + Apache License
  31 + Version 2.0, January 2004
  32 + https://www.apache.org/licenses/
  33 +
  34 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  35 +
  36 + 1. Definitions.
  37 +
  38 + "License" shall mean the terms and conditions for use, reproduction,
  39 + and distribution as defined by Sections 1 through 9 of this document.
  40 +
  41 + "Licensor" shall mean the copyright owner or entity authorized by
  42 + the copyright owner that is granting the License.
  43 +
  44 + "Legal Entity" shall mean the union of the acting entity and all
  45 + other entities that control, are controlled by, or are under common
  46 + control with that entity. For the purposes of this definition,
  47 + "control" means (i) the power, direct or indirect, to cause the
  48 + direction or management of such entity, whether by contract or
  49 + otherwise, or (ii) ownership of fifty percent (50%) or more of the
  50 + outstanding shares, or (iii) beneficial ownership of such entity.
  51 +
  52 + "You" (or "Your") shall mean an individual or Legal Entity
  53 + exercising permissions granted by this License.
  54 +
  55 + "Source" form shall mean the preferred form for making modifications,
  56 + including but not limited to software source code, documentation
  57 + source, and configuration files.
  58 +
  59 + "Object" form shall mean any form resulting from mechanical
  60 + transformation or translation of a Source form, including but
  61 + not limited to compiled object code, generated documentation,
  62 + and conversions to other media types.
  63 +
  64 + "Work" shall mean the work of authorship, whether in Source or
  65 + Object form, made available under the License, as indicated by a
  66 + copyright notice that is included in or attached to the work
  67 + (an example is provided in the Appendix below).
  68 +
  69 + "Derivative Works" shall mean any work, whether in Source or Object
  70 + form, that is based on (or derived from) the Work and for which the
  71 + editorial revisions, annotations, elaborations, or other modifications
  72 + represent, as a whole, an original work of authorship. For the purposes
  73 + of this License, Derivative Works shall not include works that remain
  74 + separable from, or merely link (or bind by name) to the interfaces of,
  75 + the Work and Derivative Works thereof.
  76 +
  77 + "Contribution" shall mean any work of authorship, including
  78 + the original version of the Work and any modifications or additions
  79 + to that Work or Derivative Works thereof, that is intentionally
  80 + submitted to Licensor for inclusion in the Work by the copyright owner
  81 + or by an individual or Legal Entity authorized to submit on behalf of
  82 + the copyright owner. For the purposes of this definition, "submitted"
  83 + means any form of electronic, verbal, or written communication sent
  84 + to the Licensor or its representatives, including but not limited to
  85 + communication on electronic mailing lists, source code control systems,
  86 + and issue tracking systems that are managed by, or on behalf of, the
  87 + Licensor for the purpose of discussing and improving the Work, but
  88 + excluding communication that is conspicuously marked or otherwise
  89 + designated in writing by the copyright owner as "Not a Contribution."
  90 +
  91 + "Contributor" shall mean Licensor and any individual or Legal Entity
  92 + on behalf of whom a Contribution has been received by Licensor and
  93 + subsequently incorporated within the Work.
  94 +
  95 + 2. Grant of Copyright License. Subject to the terms and conditions of
  96 + this License, each Contributor hereby grants to You a perpetual,
  97 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  98 + copyright license to reproduce, prepare Derivative Works of,
  99 + publicly display, publicly perform, sublicense, and distribute the
  100 + Work and such Derivative Works in Source or Object form.
  101 +
  102 + 3. Grant of Patent License. Subject to the terms and conditions of
  103 + this License, each Contributor hereby grants to You a perpetual,
  104 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  105 + (except as stated in this section) patent license to make, have made,
  106 + use, offer to sell, sell, import, and otherwise transfer the Work,
  107 + where such license applies only to those patent claims licensable
  108 + by such Contributor that are necessarily infringed by their
  109 + Contribution(s) alone or by combination of their Contribution(s)
  110 + with the Work to which such Contribution(s) was submitted. If You
  111 + institute patent litigation against any entity (including a
  112 + cross-claim or counterclaim in a lawsuit) alleging that the Work
  113 + or a Contribution incorporated within the Work constitutes direct
  114 + or contributory patent infringement, then any patent licenses
  115 + granted to You under this License for that Work shall terminate
  116 + as of the date such litigation is filed.
  117 +
  118 + 4. Redistribution. You may reproduce and distribute copies of the
  119 + Work or Derivative Works thereof in any medium, with or without
  120 + modifications, and in Source or Object form, provided that You
  121 + meet the following conditions:
  122 +
  123 + (a) You must give any other recipients of the Work or
  124 + Derivative Works a copy of this License; and
  125 +
  126 + (b) You must cause any modified files to carry prominent notices
  127 + stating that You changed the files; and
  128 +
  129 + (c) You must retain, in the Source form of any Derivative Works
  130 + that You distribute, all copyright, patent, trademark, and
  131 + attribution notices from the Source form of the Work,
  132 + excluding those notices that do not pertain to any part of
  133 + the Derivative Works; and
  134 +
  135 + (d) If the Work includes a "NOTICE" text file as part of its
  136 + distribution, then any Derivative Works that You distribute must
  137 + include a readable copy of the attribution notices contained
  138 + within such NOTICE file, excluding those notices that do not
  139 + pertain to any part of the Derivative Works, in at least one
  140 + of the following places: within a NOTICE text file distributed
  141 + as part of the Derivative Works; within the Source form or
  142 + documentation, if provided along with the Derivative Works; or,
  143 + within a display generated by the Derivative Works, if and
  144 + wherever such third-party notices normally appear. The contents
  145 + of the NOTICE file are for informational purposes only and
  146 + do not modify the License. You may add Your own attribution
  147 + notices within Derivative Works that You distribute, alongside
  148 + or as an addendum to the NOTICE text from the Work, provided
  149 + that such additional attribution notices cannot be construed
  150 + as modifying the License.
  151 +
  152 + You may add Your own copyright statement to Your modifications and
  153 + may provide additional or different license terms and conditions
  154 + for use, reproduction, or distribution of Your modifications, or
  155 + for any such Derivative Works as a whole, provided Your use,
  156 + reproduction, and distribution of the Work otherwise complies with
  157 + the conditions stated in this License.
  158 +
  159 + 5. Submission of Contributions. Unless You explicitly state otherwise,
  160 + any Contribution intentionally submitted for inclusion in the Work
  161 + by You to the Licensor shall be under the terms and conditions of
  162 + this License, without any additional terms or conditions.
  163 + Notwithstanding the above, nothing herein shall supersede or modify
  164 + the terms of any separate license agreement you may have executed
  165 + with Licensor regarding such Contributions.
  166 +
  167 + 6. Trademarks. This License does not grant permission to use the trade
  168 + names, trademarks, service marks, or product names of the Licensor,
  169 + except as required for reasonable and customary use in describing the
  170 + origin of the Work and reproducing the content of the NOTICE file.
  171 +
  172 + 7. Disclaimer of Warranty. Unless required by applicable law or
  173 + agreed to in writing, Licensor provides the Work (and each
  174 + Contributor provides its Contributions) on an "AS IS" BASIS,
  175 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  176 + implied, including, without limitation, any warranties or conditions
  177 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  178 + PARTICULAR PURPOSE. You are solely responsible for determining the
  179 + appropriateness of using or redistributing the Work and assume any
  180 + risks associated with Your exercise of permissions under this License.
  181 +
  182 + 8. Limitation of Liability. In no event and under no legal theory,
  183 + whether in tort (including negligence), contract, or otherwise,
  184 + unless required by applicable law (such as deliberate and grossly
  185 + negligent acts) or agreed to in writing, shall any Contributor be
  186 + liable to You for damages, including any direct, indirect, special,
  187 + incidental, or consequential damages of any character arising as a
  188 + result of this License or out of the use or inability to use the
  189 + Work (including but not limited to damages for loss of goodwill,
  190 + work stoppage, computer failure or malfunction, or any and all
  191 + other commercial damages or losses), even if such Contributor
  192 + has been advised of the possibility of such damages.
  193 +
  194 + 9. Accepting Warranty or Additional Liability. While redistributing
  195 + the Work or Derivative Works thereof, You may choose to offer,
  196 + and charge a fee for, acceptance of support, warranty, indemnity,
  197 + or other liability obligations and/or rights consistent with this
  198 + License. However, in accepting such obligations, You may act only
  199 + on Your own behalf and on Your sole responsibility, not on behalf
  200 + of any other Contributor, and only if You agree to indemnify,
  201 + defend, and hold each Contributor harmless for any liability
  202 + incurred by, or claims asserted against, such Contributor by reason
  203 + of your accepting any such warranty or additional liability.
  204 +
  205 + END OF TERMS AND CONDITIONS
  206 +
  207 + APPENDIX: How to apply the Apache License to your work.
  208 +
  209 + To apply the Apache License to your work, attach the following
  210 + boilerplate notice, with the fields enclosed by brackets "[]"
  211 + replaced with your own identifying information. (Don't include
  212 + the brackets!) The text should be enclosed in the appropriate
  213 + comment syntax for the file format. We also recommend that a
  214 + file or class name and description of purpose be included on the
  215 + same "printed page" as the copyright notice for easier
  216 + identification within third-party archives.
  217 +
  218 + Copyright [yyyy] [name of copyright owner]
  219 +
  220 + Licensed under the Apache License, Version 2.0 (the "License");
  221 + you may not use this file except in compliance with the License.
  222 + You may obtain a copy of the License at
  223 +
  224 + https://www.apache.org/licenses/LICENSE-2.0
  225 +
  226 + Unless required by applicable law or agreed to in writing, software
  227 + distributed under the License is distributed on an "AS IS" BASIS,
  228 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  229 + See the License for the specific language governing permissions and
  230 + limitations under the License.
  1 +# PDFium Package Configuration for CMake
  2 +#
  3 +# To use PDFium in you CMake project:
  4 +#
  5 +# 1. set the environment variable PDFium_DIR to the folder containing this file.
  6 +# 2. in your CMakeLists.txt, add
  7 +# find_package(PDFium)
  8 +# 3. then link you excecutable with PDFium
  9 +# target_link_libraries(my_exe pdfium)
  10 +
  11 +include(FindPackageHandleStandardArgs)
  12 +
  13 +find_path(PDFium_INCLUDE_DIR
  14 + NAMES "fpdfview.h"
  15 + PATHS "${CMAKE_CURRENT_LIST_DIR}"
  16 + PATH_SUFFIXES "include"
  17 +)
  18 +
  19 +if(MSVC)
  20 + if(CMAKE_CL_64)
  21 + set(PDFium_ARCH x64)
  22 + else()
  23 + set(PDFium_ARCH x86)
  24 + endif()
  25 +
  26 + find_file(PDFium_LIBRARY
  27 + NAMES "pdfium.dll"
  28 + PATHS "${CMAKE_CURRENT_LIST_DIR}"
  29 + PATH_SUFFIXES "${PDFium_ARCH}/bin")
  30 +
  31 + find_file(PDFium_IMPLIB
  32 + NAMES "pdfium.dll.lib"
  33 + PATHS "${CMAKE_CURRENT_LIST_DIR}"
  34 + PATH_SUFFIXES "${PDFium_ARCH}/lib")
  35 +
  36 + add_library(pdfium SHARED IMPORTED)
  37 + set_target_properties(pdfium
  38 + PROPERTIES
  39 + IMPORTED_LOCATION "${PDFium_LIBRARY}"
  40 + IMPORTED_IMPLIB "${PDFium_IMPLIB}"
  41 + INTERFACE_INCLUDE_DIRECTORIES "${PDFium_INCLUDE_DIR};${PDFium_INCLUDE_DIR}/cpp"
  42 + )
  43 +
  44 + find_package_handle_standard_args(PDFium
  45 + REQUIRED_VARS PDFium_LIBRARY PDFium_IMPLIB PDFium_INCLUDE_DIR
  46 + )
  47 +else()
  48 + find_library(PDFium_LIBRARY
  49 + NAMES "pdfium"
  50 + PATHS "${CMAKE_CURRENT_LIST_DIR}"
  51 + PATH_SUFFIXES "lib")
  52 +
  53 + add_library(pdfium SHARED IMPORTED)
  54 + set_target_properties(pdfium
  55 + PROPERTIES
  56 + IMPORTED_LOCATION "${PDFium_LIBRARY}"
  57 + INTERFACE_INCLUDE_DIRECTORIES "${PDFium_INCLUDE_DIR};${PDFium_INCLUDE_DIR}/cpp"
  58 + )
  59 +
  60 + find_package_handle_standard_args(PDFium
  61 + REQUIRED_VARS PDFium_LIBRARY PDFium_INCLUDE_DIR
  62 + )
  63 +endif()
  1 +// Copyright 2017 PDFium Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +#ifndef PUBLIC_CPP_FPDF_DELETERS_H_
  6 +#define PUBLIC_CPP_FPDF_DELETERS_H_
  7 +
  8 +#include "../fpdf_annot.h"
  9 +#include "../fpdf_dataavail.h"
  10 +#include "../fpdf_edit.h"
  11 +#include "../fpdf_formfill.h"
  12 +#include "../fpdf_javascript.h"
  13 +#include "../fpdf_structtree.h"
  14 +#include "../fpdf_text.h"
  15 +#include "../fpdf_transformpage.h"
  16 +#include "../fpdfview.h"
  17 +
  18 +// Custom deleters for using FPDF_* types with std::unique_ptr<>.
  19 +
  20 +struct FPDFAnnotationDeleter {
  21 + inline void operator()(FPDF_ANNOTATION annot) { FPDFPage_CloseAnnot(annot); }
  22 +};
  23 +
  24 +struct FPDFAvailDeleter {
  25 + inline void operator()(FPDF_AVAIL avail) { FPDFAvail_Destroy(avail); }
  26 +};
  27 +
  28 +struct FPDFBitmapDeleter {
  29 + inline void operator()(FPDF_BITMAP bitmap) { FPDFBitmap_Destroy(bitmap); }
  30 +};
  31 +
  32 +struct FPDFClipPathDeleter {
  33 + inline void operator()(FPDF_CLIPPATH clip_path) {
  34 + FPDF_DestroyClipPath(clip_path);
  35 + }
  36 +};
  37 +
  38 +struct FPDFDocumentDeleter {
  39 + inline void operator()(FPDF_DOCUMENT doc) { FPDF_CloseDocument(doc); }
  40 +};
  41 +
  42 +struct FPDFFontDeleter {
  43 + inline void operator()(FPDF_FONT font) { FPDFFont_Close(font); }
  44 +};
  45 +
  46 +struct FPDFFormHandleDeleter {
  47 + inline void operator()(FPDF_FORMHANDLE form) {
  48 + FPDFDOC_ExitFormFillEnvironment(form);
  49 + }
  50 +};
  51 +
  52 +struct FPDFJavaScriptActionDeleter {
  53 + inline void operator()(FPDF_JAVASCRIPT_ACTION javascript) {
  54 + FPDFDoc_CloseJavaScriptAction(javascript);
  55 + }
  56 +};
  57 +
  58 +struct FPDFPageDeleter {
  59 + inline void operator()(FPDF_PAGE page) { FPDF_ClosePage(page); }
  60 +};
  61 +
  62 +struct FPDFPageLinkDeleter {
  63 + inline void operator()(FPDF_PAGELINK pagelink) {
  64 + FPDFLink_CloseWebLinks(pagelink);
  65 + }
  66 +};
  67 +
  68 +struct FPDFPageObjectDeleter {
  69 + inline void operator()(FPDF_PAGEOBJECT object) {
  70 + FPDFPageObj_Destroy(object);
  71 + }
  72 +};
  73 +
  74 +struct FPDFStructTreeDeleter {
  75 + inline void operator()(FPDF_STRUCTTREE tree) { FPDF_StructTree_Close(tree); }
  76 +};
  77 +
  78 +struct FPDFTextFindDeleter {
  79 + inline void operator()(FPDF_SCHHANDLE handle) { FPDFText_FindClose(handle); }
  80 +};
  81 +
  82 +struct FPDFTextPageDeleter {
  83 + inline void operator()(FPDF_TEXTPAGE text) { FPDFText_ClosePage(text); }
  84 +};
  85 +
  86 +#endif // PUBLIC_CPP_FPDF_DELETERS_H_
  1 +// Copyright 2018 PDFium Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +#ifndef PUBLIC_CPP_FPDF_SCOPERS_H_
  6 +#define PUBLIC_CPP_FPDF_SCOPERS_H_
  7 +
  8 +#include <memory>
  9 +#include <type_traits>
  10 +
  11 +#include "fpdf_deleters.h"
  12 +
  13 +// Versions of FPDF types that clean up the object at scope exit.
  14 +
  15 +using ScopedFPDFAnnotation =
  16 + std::unique_ptr<std::remove_pointer<FPDF_ANNOTATION>::type,
  17 + FPDFAnnotationDeleter>;
  18 +
  19 +using ScopedFPDFAvail =
  20 + std::unique_ptr<std::remove_pointer<FPDF_AVAIL>::type, FPDFAvailDeleter>;
  21 +
  22 +using ScopedFPDFBitmap =
  23 + std::unique_ptr<std::remove_pointer<FPDF_BITMAP>::type, FPDFBitmapDeleter>;
  24 +
  25 +using ScopedFPDFClipPath =
  26 + std::unique_ptr<std::remove_pointer<FPDF_CLIPPATH>::type,
  27 + FPDFClipPathDeleter>;
  28 +
  29 +using ScopedFPDFDocument =
  30 + std::unique_ptr<std::remove_pointer<FPDF_DOCUMENT>::type,
  31 + FPDFDocumentDeleter>;
  32 +
  33 +using ScopedFPDFFont =
  34 + std::unique_ptr<std::remove_pointer<FPDF_FONT>::type, FPDFFontDeleter>;
  35 +
  36 +using ScopedFPDFFormHandle =
  37 + std::unique_ptr<std::remove_pointer<FPDF_FORMHANDLE>::type,
  38 + FPDFFormHandleDeleter>;
  39 +
  40 +using ScopedFPDFJavaScriptAction =
  41 + std::unique_ptr<std::remove_pointer<FPDF_JAVASCRIPT_ACTION>::type,
  42 + FPDFJavaScriptActionDeleter>;
  43 +
  44 +using ScopedFPDFPage =
  45 + std::unique_ptr<std::remove_pointer<FPDF_PAGE>::type, FPDFPageDeleter>;
  46 +
  47 +using ScopedFPDFPageLink =
  48 + std::unique_ptr<std::remove_pointer<FPDF_PAGELINK>::type,
  49 + FPDFPageLinkDeleter>;
  50 +
  51 +using ScopedFPDFPageObject =
  52 + std::unique_ptr<std::remove_pointer<FPDF_PAGEOBJECT>::type,
  53 + FPDFPageObjectDeleter>;
  54 +
  55 +using ScopedFPDFStructTree =
  56 + std::unique_ptr<std::remove_pointer<FPDF_STRUCTTREE>::type,
  57 + FPDFStructTreeDeleter>;
  58 +
  59 +using ScopedFPDFTextFind =
  60 + std::unique_ptr<std::remove_pointer<FPDF_SCHHANDLE>::type,
  61 + FPDFTextFindDeleter>;
  62 +
  63 +using ScopedFPDFTextPage =
  64 + std::unique_ptr<std::remove_pointer<FPDF_TEXTPAGE>::type,
  65 + FPDFTextPageDeleter>;
  66 +
  67 +#endif // PUBLIC_CPP_FPDF_SCOPERS_H_
  1 +// Copyright 2017 PDFium Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +#ifndef PUBLIC_FPDF_ANNOT_H_
  6 +#define PUBLIC_FPDF_ANNOT_H_
  7 +
  8 +#include <stddef.h>
  9 +
  10 +// NOLINTNEXTLINE(build/include)
  11 +#include "fpdfview.h"
  12 +
  13 +// NOLINTNEXTLINE(build/include)
  14 +#include "fpdf_doc.h"
  15 +// NOLINTNEXTLINE(build/include)
  16 +#include "fpdf_formfill.h"
  17 +
  18 +#ifdef __cplusplus
  19 +extern "C" {
  20 +#endif // __cplusplus
  21 +
  22 +#define FPDF_ANNOT_UNKNOWN 0
  23 +#define FPDF_ANNOT_TEXT 1
  24 +#define FPDF_ANNOT_LINK 2
  25 +#define FPDF_ANNOT_FREETEXT 3
  26 +#define FPDF_ANNOT_LINE 4
  27 +#define FPDF_ANNOT_SQUARE 5
  28 +#define FPDF_ANNOT_CIRCLE 6
  29 +#define FPDF_ANNOT_POLYGON 7
  30 +#define FPDF_ANNOT_POLYLINE 8
  31 +#define FPDF_ANNOT_HIGHLIGHT 9
  32 +#define FPDF_ANNOT_UNDERLINE 10
  33 +#define FPDF_ANNOT_SQUIGGLY 11
  34 +#define FPDF_ANNOT_STRIKEOUT 12
  35 +#define FPDF_ANNOT_STAMP 13
  36 +#define FPDF_ANNOT_CARET 14
  37 +#define FPDF_ANNOT_INK 15
  38 +#define FPDF_ANNOT_POPUP 16
  39 +#define FPDF_ANNOT_FILEATTACHMENT 17
  40 +#define FPDF_ANNOT_SOUND 18
  41 +#define FPDF_ANNOT_MOVIE 19
  42 +#define FPDF_ANNOT_WIDGET 20
  43 +#define FPDF_ANNOT_SCREEN 21
  44 +#define FPDF_ANNOT_PRINTERMARK 22
  45 +#define FPDF_ANNOT_TRAPNET 23
  46 +#define FPDF_ANNOT_WATERMARK 24
  47 +#define FPDF_ANNOT_THREED 25
  48 +#define FPDF_ANNOT_RICHMEDIA 26
  49 +#define FPDF_ANNOT_XFAWIDGET 27
  50 +
  51 +// Refer to PDF Reference (6th edition) table 8.16 for all annotation flags.
  52 +#define FPDF_ANNOT_FLAG_NONE 0
  53 +#define FPDF_ANNOT_FLAG_INVISIBLE (1 << 0)
  54 +#define FPDF_ANNOT_FLAG_HIDDEN (1 << 1)
  55 +#define FPDF_ANNOT_FLAG_PRINT (1 << 2)
  56 +#define FPDF_ANNOT_FLAG_NOZOOM (1 << 3)
  57 +#define FPDF_ANNOT_FLAG_NOROTATE (1 << 4)
  58 +#define FPDF_ANNOT_FLAG_NOVIEW (1 << 5)
  59 +#define FPDF_ANNOT_FLAG_READONLY (1 << 6)
  60 +#define FPDF_ANNOT_FLAG_LOCKED (1 << 7)
  61 +#define FPDF_ANNOT_FLAG_TOGGLENOVIEW (1 << 8)
  62 +
  63 +#define FPDF_ANNOT_APPEARANCEMODE_NORMAL 0
  64 +#define FPDF_ANNOT_APPEARANCEMODE_ROLLOVER 1
  65 +#define FPDF_ANNOT_APPEARANCEMODE_DOWN 2
  66 +#define FPDF_ANNOT_APPEARANCEMODE_COUNT 3
  67 +
  68 +// Refer to PDF Reference version 1.7 table 8.70 for field flags common to all
  69 +// interactive form field types.
  70 +#define FPDF_FORMFLAG_NONE 0
  71 +#define FPDF_FORMFLAG_READONLY (1 << 0)
  72 +#define FPDF_FORMFLAG_REQUIRED (1 << 1)
  73 +#define FPDF_FORMFLAG_NOEXPORT (1 << 2)
  74 +
  75 +// Refer to PDF Reference version 1.7 table 8.77 for field flags specific to
  76 +// interactive form text fields.
  77 +#define FPDF_FORMFLAG_TEXT_MULTILINE (1 << 12)
  78 +#define FPDF_FORMFLAG_TEXT_PASSWORD (1 << 13)
  79 +
  80 +// Refer to PDF Reference version 1.7 table 8.79 for field flags specific to
  81 +// interactive form choice fields.
  82 +#define FPDF_FORMFLAG_CHOICE_COMBO (1 << 17)
  83 +#define FPDF_FORMFLAG_CHOICE_EDIT (1 << 18)
  84 +#define FPDF_FORMFLAG_CHOICE_MULTI_SELECT (1 << 21)
  85 +
  86 +typedef enum FPDFANNOT_COLORTYPE {
  87 + FPDFANNOT_COLORTYPE_Color = 0,
  88 + FPDFANNOT_COLORTYPE_InteriorColor
  89 +} FPDFANNOT_COLORTYPE;
  90 +
  91 +// Experimental API.
  92 +// Check if an annotation subtype is currently supported for creation.
  93 +// Currently supported subtypes: circle, highlight, ink, popup, square,
  94 +// squiggly, stamp, strikeout, text, and underline.
  95 +//
  96 +// subtype - the subtype to be checked.
  97 +//
  98 +// Returns true if this subtype supported.
  99 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  100 +FPDFAnnot_IsSupportedSubtype(FPDF_ANNOTATION_SUBTYPE subtype);
  101 +
  102 +// Experimental API.
  103 +// Create an annotation in |page| of the subtype |subtype|. If the specified
  104 +// subtype is illegal or unsupported, then a new annotation will not be created.
  105 +// Must call FPDFPage_CloseAnnot() when the annotation returned by this
  106 +// function is no longer needed.
  107 +//
  108 +// page - handle to a page.
  109 +// subtype - the subtype of the new annotation.
  110 +//
  111 +// Returns a handle to the new annotation object, or NULL on failure.
  112 +FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
  113 +FPDFPage_CreateAnnot(FPDF_PAGE page, FPDF_ANNOTATION_SUBTYPE subtype);
  114 +
  115 +// Experimental API.
  116 +// Get the number of annotations in |page|.
  117 +//
  118 +// page - handle to a page.
  119 +//
  120 +// Returns the number of annotations in |page|.
  121 +FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetAnnotCount(FPDF_PAGE page);
  122 +
  123 +// Experimental API.
  124 +// Get annotation in |page| at |index|. Must call FPDFPage_CloseAnnot() when the
  125 +// annotation returned by this function is no longer needed.
  126 +//
  127 +// page - handle to a page.
  128 +// index - the index of the annotation.
  129 +//
  130 +// Returns a handle to the annotation object, or NULL on failure.
  131 +FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV FPDFPage_GetAnnot(FPDF_PAGE page,
  132 + int index);
  133 +
  134 +// Experimental API.
  135 +// Get the index of |annot| in |page|. This is the opposite of
  136 +// FPDFPage_GetAnnot().
  137 +//
  138 +// page - handle to the page that the annotation is on.
  139 +// annot - handle to an annotation.
  140 +//
  141 +// Returns the index of |annot|, or -1 on failure.
  142 +FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetAnnotIndex(FPDF_PAGE page,
  143 + FPDF_ANNOTATION annot);
  144 +
  145 +// Experimental API.
  146 +// Close an annotation. Must be called when the annotation returned by
  147 +// FPDFPage_CreateAnnot() or FPDFPage_GetAnnot() is no longer needed. This
  148 +// function does not remove the annotation from the document.
  149 +//
  150 +// annot - handle to an annotation.
  151 +FPDF_EXPORT void FPDF_CALLCONV FPDFPage_CloseAnnot(FPDF_ANNOTATION annot);
  152 +
  153 +// Experimental API.
  154 +// Remove the annotation in |page| at |index|.
  155 +//
  156 +// page - handle to a page.
  157 +// index - the index of the annotation.
  158 +//
  159 +// Returns true if successful.
  160 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_RemoveAnnot(FPDF_PAGE page,
  161 + int index);
  162 +
  163 +// Experimental API.
  164 +// Get the subtype of an annotation.
  165 +//
  166 +// annot - handle to an annotation.
  167 +//
  168 +// Returns the annotation subtype.
  169 +FPDF_EXPORT FPDF_ANNOTATION_SUBTYPE FPDF_CALLCONV
  170 +FPDFAnnot_GetSubtype(FPDF_ANNOTATION annot);
  171 +
  172 +// Experimental API.
  173 +// Check if an annotation subtype is currently supported for object extraction,
  174 +// update, and removal.
  175 +// Currently supported subtypes: ink and stamp.
  176 +//
  177 +// subtype - the subtype to be checked.
  178 +//
  179 +// Returns true if this subtype supported.
  180 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  181 +FPDFAnnot_IsObjectSupportedSubtype(FPDF_ANNOTATION_SUBTYPE subtype);
  182 +
  183 +// Experimental API.
  184 +// Update |obj| in |annot|. |obj| must be in |annot| already and must have
  185 +// been retrieved by FPDFAnnot_GetObject(). Currently, only ink and stamp
  186 +// annotations are supported by this API. Also note that only path, image, and
  187 +// text objects have APIs for modification; see FPDFPath_*(), FPDFText_*(), and
  188 +// FPDFImageObj_*().
  189 +//
  190 +// annot - handle to an annotation.
  191 +// obj - handle to the object that |annot| needs to update.
  192 +//
  193 +// Return true if successful.
  194 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  195 +FPDFAnnot_UpdateObject(FPDF_ANNOTATION annot, FPDF_PAGEOBJECT obj);
  196 +
  197 +// Experimental API.
  198 +// Add a new InkStroke, represented by an array of points, to the InkList of
  199 +// |annot|. The API creates an InkList if one doesn't already exist in |annot|.
  200 +// This API works only for ink annotations. Please refer section 12.5.6.13 in
  201 +// PDF 32000-1:2008 Specification.
  202 +//
  203 +// annot - handle to an annotation.
  204 +// points - pointer to a FS_POINTF array representing input points.
  205 +// point_count - number of elements in |points| array. This should not exceed
  206 +// the maximum value that can be represented by an int32_t).
  207 +//
  208 +// Returns the 0-based index at which the new InkStroke is added in the InkList
  209 +// of the |annot|. Returns -1 on failure.
  210 +FPDF_EXPORT int FPDF_CALLCONV FPDFAnnot_AddInkStroke(FPDF_ANNOTATION annot,
  211 + const FS_POINTF* points,
  212 + size_t point_count);
  213 +
  214 +// Experimental API.
  215 +// Removes an InkList in |annot|.
  216 +// This API works only for ink annotations.
  217 +//
  218 +// annot - handle to an annotation.
  219 +//
  220 +// Return true on successful removal of /InkList entry from context of the
  221 +// non-null ink |annot|. Returns false on failure.
  222 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  223 +FPDFAnnot_RemoveInkList(FPDF_ANNOTATION annot);
  224 +
  225 +// Experimental API.
  226 +// Add |obj| to |annot|. |obj| must have been created by
  227 +// FPDFPageObj_CreateNew{Path|Rect}() or FPDFPageObj_New{Text|Image}Obj(), and
  228 +// will be owned by |annot|. Note that an |obj| cannot belong to more than one
  229 +// |annot|. Currently, only ink and stamp annotations are supported by this API.
  230 +// Also note that only path, image, and text objects have APIs for creation.
  231 +//
  232 +// annot - handle to an annotation.
  233 +// obj - handle to the object that is to be added to |annot|.
  234 +//
  235 +// Return true if successful.
  236 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  237 +FPDFAnnot_AppendObject(FPDF_ANNOTATION annot, FPDF_PAGEOBJECT obj);
  238 +
  239 +// Experimental API.
  240 +// Get the total number of objects in |annot|, including path objects, text
  241 +// objects, external objects, image objects, and shading objects.
  242 +//
  243 +// annot - handle to an annotation.
  244 +//
  245 +// Returns the number of objects in |annot|.
  246 +FPDF_EXPORT int FPDF_CALLCONV FPDFAnnot_GetObjectCount(FPDF_ANNOTATION annot);
  247 +
  248 +// Experimental API.
  249 +// Get the object in |annot| at |index|.
  250 +//
  251 +// annot - handle to an annotation.
  252 +// index - the index of the object.
  253 +//
  254 +// Return a handle to the object, or NULL on failure.
  255 +FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
  256 +FPDFAnnot_GetObject(FPDF_ANNOTATION annot, int index);
  257 +
  258 +// Experimental API.
  259 +// Remove the object in |annot| at |index|.
  260 +//
  261 +// annot - handle to an annotation.
  262 +// index - the index of the object to be removed.
  263 +//
  264 +// Return true if successful.
  265 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  266 +FPDFAnnot_RemoveObject(FPDF_ANNOTATION annot, int index);
  267 +
  268 +// Experimental API.
  269 +// Set the color of an annotation. Fails when called on annotations with
  270 +// appearance streams already defined; instead use
  271 +// FPDFPath_Set{Stroke|Fill}Color().
  272 +//
  273 +// annot - handle to an annotation.
  274 +// type - type of the color to be set.
  275 +// R, G, B - buffer to hold the RGB value of the color. Ranges from 0 to 255.
  276 +// A - buffer to hold the opacity. Ranges from 0 to 255.
  277 +//
  278 +// Returns true if successful.
  279 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetColor(FPDF_ANNOTATION annot,
  280 + FPDFANNOT_COLORTYPE type,
  281 + unsigned int R,
  282 + unsigned int G,
  283 + unsigned int B,
  284 + unsigned int A);
  285 +
  286 +// Experimental API.
  287 +// Get the color of an annotation. If no color is specified, default to yellow
  288 +// for highlight annotation, black for all else. Fails when called on
  289 +// annotations with appearance streams already defined; instead use
  290 +// FPDFPath_Get{Stroke|Fill}Color().
  291 +//
  292 +// annot - handle to an annotation.
  293 +// type - type of the color requested.
  294 +// R, G, B - buffer to hold the RGB value of the color. Ranges from 0 to 255.
  295 +// A - buffer to hold the opacity. Ranges from 0 to 255.
  296 +//
  297 +// Returns true if successful.
  298 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetColor(FPDF_ANNOTATION annot,
  299 + FPDFANNOT_COLORTYPE type,
  300 + unsigned int* R,
  301 + unsigned int* G,
  302 + unsigned int* B,
  303 + unsigned int* A);
  304 +
  305 +// Experimental API.
  306 +// Check if the annotation is of a type that has attachment points
  307 +// (i.e. quadpoints). Quadpoints are the vertices of the rectangle that
  308 +// encompasses the texts affected by the annotation. They provide the
  309 +// coordinates in the page where the annotation is attached. Only text markup
  310 +// annotations (i.e. highlight, strikeout, squiggly, and underline) and link
  311 +// annotations have quadpoints.
  312 +//
  313 +// annot - handle to an annotation.
  314 +//
  315 +// Returns true if the annotation is of a type that has quadpoints, false
  316 +// otherwise.
  317 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  318 +FPDFAnnot_HasAttachmentPoints(FPDF_ANNOTATION annot);
  319 +
  320 +// Experimental API.
  321 +// Replace the attachment points (i.e. quadpoints) set of an annotation at
  322 +// |quad_index|. This index needs to be within the result of
  323 +// FPDFAnnot_CountAttachmentPoints().
  324 +// If the annotation's appearance stream is defined and this annotation is of a
  325 +// type with quadpoints, then update the bounding box too if the new quadpoints
  326 +// define a bigger one.
  327 +//
  328 +// annot - handle to an annotation.
  329 +// quad_index - index of the set of quadpoints.
  330 +// quad_points - the quadpoints to be set.
  331 +//
  332 +// Returns true if successful.
  333 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  334 +FPDFAnnot_SetAttachmentPoints(FPDF_ANNOTATION annot,
  335 + size_t quad_index,
  336 + const FS_QUADPOINTSF* quad_points);
  337 +
  338 +// Experimental API.
  339 +// Append to the list of attachment points (i.e. quadpoints) of an annotation.
  340 +// If the annotation's appearance stream is defined and this annotation is of a
  341 +// type with quadpoints, then update the bounding box too if the new quadpoints
  342 +// define a bigger one.
  343 +//
  344 +// annot - handle to an annotation.
  345 +// quad_points - the quadpoints to be set.
  346 +//
  347 +// Returns true if successful.
  348 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  349 +FPDFAnnot_AppendAttachmentPoints(FPDF_ANNOTATION annot,
  350 + const FS_QUADPOINTSF* quad_points);
  351 +
  352 +// Experimental API.
  353 +// Get the number of sets of quadpoints of an annotation.
  354 +//
  355 +// annot - handle to an annotation.
  356 +//
  357 +// Returns the number of sets of quadpoints, or 0 on failure.
  358 +FPDF_EXPORT size_t FPDF_CALLCONV
  359 +FPDFAnnot_CountAttachmentPoints(FPDF_ANNOTATION annot);
  360 +
  361 +// Experimental API.
  362 +// Get the attachment points (i.e. quadpoints) of an annotation.
  363 +//
  364 +// annot - handle to an annotation.
  365 +// quad_index - index of the set of quadpoints.
  366 +// quad_points - receives the quadpoints; must not be NULL.
  367 +//
  368 +// Returns true if successful.
  369 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  370 +FPDFAnnot_GetAttachmentPoints(FPDF_ANNOTATION annot,
  371 + size_t quad_index,
  372 + FS_QUADPOINTSF* quad_points);
  373 +
  374 +// Experimental API.
  375 +// Set the annotation rectangle defining the location of the annotation. If the
  376 +// annotation's appearance stream is defined and this annotation is of a type
  377 +// without quadpoints, then update the bounding box too if the new rectangle
  378 +// defines a bigger one.
  379 +//
  380 +// annot - handle to an annotation.
  381 +// rect - the annotation rectangle to be set.
  382 +//
  383 +// Returns true if successful.
  384 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetRect(FPDF_ANNOTATION annot,
  385 + const FS_RECTF* rect);
  386 +
  387 +// Experimental API.
  388 +// Get the annotation rectangle defining the location of the annotation.
  389 +//
  390 +// annot - handle to an annotation.
  391 +// rect - receives the rectangle; must not be NULL.
  392 +//
  393 +// Returns true if successful.
  394 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetRect(FPDF_ANNOTATION annot,
  395 + FS_RECTF* rect);
  396 +
  397 +// Experimental API.
  398 +// Check if |annot|'s dictionary has |key| as a key.
  399 +//
  400 +// annot - handle to an annotation.
  401 +// key - the key to look for, encoded in UTF-8.
  402 +//
  403 +// Returns true if |key| exists.
  404 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_HasKey(FPDF_ANNOTATION annot,
  405 + FPDF_BYTESTRING key);
  406 +
  407 +// Experimental API.
  408 +// Get the type of the value corresponding to |key| in |annot|'s dictionary.
  409 +//
  410 +// annot - handle to an annotation.
  411 +// key - the key to look for, encoded in UTF-8.
  412 +//
  413 +// Returns the type of the dictionary value.
  414 +FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
  415 +FPDFAnnot_GetValueType(FPDF_ANNOTATION annot, FPDF_BYTESTRING key);
  416 +
  417 +// Experimental API.
  418 +// Set the string value corresponding to |key| in |annot|'s dictionary,
  419 +// overwriting the existing value if any. The value type would be
  420 +// FPDF_OBJECT_STRING after this function call succeeds.
  421 +//
  422 +// annot - handle to an annotation.
  423 +// key - the key to the dictionary entry to be set, encoded in UTF-8.
  424 +// value - the string value to be set, encoded in UTF-16LE.
  425 +//
  426 +// Returns true if successful.
  427 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  428 +FPDFAnnot_SetStringValue(FPDF_ANNOTATION annot,
  429 + FPDF_BYTESTRING key,
  430 + FPDF_WIDESTRING value);
  431 +
  432 +// Experimental API.
  433 +// Get the string value corresponding to |key| in |annot|'s dictionary. |buffer|
  434 +// is only modified if |buflen| is longer than the length of contents. Note that
  435 +// if |key| does not exist in the dictionary or if |key|'s corresponding value
  436 +// in the dictionary is not a string (i.e. the value is not of type
  437 +// FPDF_OBJECT_STRING or FPDF_OBJECT_NAME), then an empty string would be copied
  438 +// to |buffer| and the return value would be 2. On other errors, nothing would
  439 +// be added to |buffer| and the return value would be 0.
  440 +//
  441 +// annot - handle to an annotation.
  442 +// key - the key to the requested dictionary entry, encoded in UTF-8.
  443 +// buffer - buffer for holding the value string, encoded in UTF-16LE.
  444 +// buflen - length of the buffer in bytes.
  445 +//
  446 +// Returns the length of the string value in bytes.
  447 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  448 +FPDFAnnot_GetStringValue(FPDF_ANNOTATION annot,
  449 + FPDF_BYTESTRING key,
  450 + FPDF_WCHAR* buffer,
  451 + unsigned long buflen);
  452 +
  453 +// Experimental API.
  454 +// Get the float value corresponding to |key| in |annot|'s dictionary. Writes
  455 +// value to |value| and returns True if |key| exists in the dictionary and
  456 +// |key|'s corresponding value is a number (FPDF_OBJECT_NUMBER), False
  457 +// otherwise.
  458 +//
  459 +// annot - handle to an annotation.
  460 +// key - the key to the requested dictionary entry, encoded in UTF-8.
  461 +// value - receives the value, must not be NULL.
  462 +//
  463 +// Returns True if value found, False otherwise.
  464 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  465 +FPDFAnnot_GetNumberValue(FPDF_ANNOTATION annot,
  466 + FPDF_BYTESTRING key,
  467 + float* value);
  468 +
  469 +// Experimental API.
  470 +// Set the AP (appearance string) in |annot|'s dictionary for a given
  471 +// |appearanceMode|.
  472 +//
  473 +// annot - handle to an annotation.
  474 +// appearanceMode - the appearance mode (normal, rollover or down) for which
  475 +// to get the AP.
  476 +// value - the string value to be set, encoded in UTF-16LE. If
  477 +// nullptr is passed, the AP is cleared for that mode. If the
  478 +// mode is Normal, APs for all modes are cleared.
  479 +//
  480 +// Returns true if successful.
  481 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  482 +FPDFAnnot_SetAP(FPDF_ANNOTATION annot,
  483 + FPDF_ANNOT_APPEARANCEMODE appearanceMode,
  484 + FPDF_WIDESTRING value);
  485 +
  486 +// Experimental API.
  487 +// Get the AP (appearance string) from |annot|'s dictionary for a given
  488 +// |appearanceMode|.
  489 +// |buffer| is only modified if |buflen| is large enough to hold the whole AP
  490 +// string. If |buflen| is smaller, the total size of the AP is still returned,
  491 +// but nothing is copied.
  492 +// If there is no appearance stream for |annot| in |appearanceMode|, an empty
  493 +// string is written to |buf| and 2 is returned.
  494 +// On other errors, nothing is written to |buffer| and 0 is returned.
  495 +//
  496 +// annot - handle to an annotation.
  497 +// appearanceMode - the appearance mode (normal, rollover or down) for which
  498 +// to get the AP.
  499 +// buffer - buffer for holding the value string, encoded in UTF-16LE.
  500 +// buflen - length of the buffer in bytes.
  501 +//
  502 +// Returns the length of the string value in bytes.
  503 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  504 +FPDFAnnot_GetAP(FPDF_ANNOTATION annot,
  505 + FPDF_ANNOT_APPEARANCEMODE appearanceMode,
  506 + FPDF_WCHAR* buffer,
  507 + unsigned long buflen);
  508 +
  509 +// Experimental API.
  510 +// Get the annotation corresponding to |key| in |annot|'s dictionary. Common
  511 +// keys for linking annotations include "IRT" and "Popup". Must call
  512 +// FPDFPage_CloseAnnot() when the annotation returned by this function is no
  513 +// longer needed.
  514 +//
  515 +// annot - handle to an annotation.
  516 +// key - the key to the requested dictionary entry, encoded in UTF-8.
  517 +//
  518 +// Returns a handle to the linked annotation object, or NULL on failure.
  519 +FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
  520 +FPDFAnnot_GetLinkedAnnot(FPDF_ANNOTATION annot, FPDF_BYTESTRING key);
  521 +
  522 +// Experimental API.
  523 +// Get the annotation flags of |annot|.
  524 +//
  525 +// annot - handle to an annotation.
  526 +//
  527 +// Returns the annotation flags.
  528 +FPDF_EXPORT int FPDF_CALLCONV FPDFAnnot_GetFlags(FPDF_ANNOTATION annot);
  529 +
  530 +// Experimental API.
  531 +// Set the |annot|'s flags to be of the value |flags|.
  532 +//
  533 +// annot - handle to an annotation.
  534 +// flags - the flag values to be set.
  535 +//
  536 +// Returns true if successful.
  537 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetFlags(FPDF_ANNOTATION annot,
  538 + int flags);
  539 +
  540 +// Experimental API.
  541 +// Get the annotation flags of |annot|.
  542 +//
  543 +// hHandle - handle to the form fill module, returned by
  544 +// FPDFDOC_InitFormFillEnvironment().
  545 +// annot - handle to an interactive form annotation.
  546 +//
  547 +// Returns the annotation flags specific to interactive forms.
  548 +FPDF_EXPORT int FPDF_CALLCONV
  549 +FPDFAnnot_GetFormFieldFlags(FPDF_FORMHANDLE handle, FPDF_ANNOTATION annot);
  550 +
  551 +// Experimental API.
  552 +// Retrieves an interactive form annotation whose rectangle contains a given
  553 +// point on a page. Must call FPDFPage_CloseAnnot() when the annotation returned
  554 +// is no longer needed.
  555 +//
  556 +//
  557 +// hHandle - handle to the form fill module, returned by
  558 +// FPDFDOC_InitFormFillEnvironment().
  559 +// page - handle to the page, returned by FPDF_LoadPage function.
  560 +// point - position in PDF "user space".
  561 +//
  562 +// Returns the interactive form annotation whose rectangle contains the given
  563 +// coordinates on the page. If there is no such annotation, return NULL.
  564 +FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
  565 +FPDFAnnot_GetFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
  566 + FPDF_PAGE page,
  567 + const FS_POINTF* point);
  568 +
  569 +// Experimental API.
  570 +// Gets the name of |annot|, which is an interactive form annotation.
  571 +// |buffer| is only modified if |buflen| is longer than the length of contents.
  572 +// In case of error, nothing will be added to |buffer| and the return value will
  573 +// be 0. Note that return value of empty string is 2 for "\0\0".
  574 +//
  575 +// hHandle - handle to the form fill module, returned by
  576 +// FPDFDOC_InitFormFillEnvironment().
  577 +// annot - handle to an interactive form annotation.
  578 +// buffer - buffer for holding the name string, encoded in UTF-16LE.
  579 +// buflen - length of the buffer in bytes.
  580 +//
  581 +// Returns the length of the string value in bytes.
  582 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  583 +FPDFAnnot_GetFormFieldName(FPDF_FORMHANDLE hHandle,
  584 + FPDF_ANNOTATION annot,
  585 + FPDF_WCHAR* buffer,
  586 + unsigned long buflen);
  587 +
  588 +// Experimental API.
  589 +// Gets the form field type of |annot|, which is an interactive form annotation.
  590 +//
  591 +// hHandle - handle to the form fill module, returned by
  592 +// FPDFDOC_InitFormFillEnvironment().
  593 +// annot - handle to an interactive form annotation.
  594 +//
  595 +// Returns the type of the form field (one of the FPDF_FORMFIELD_* values) on
  596 +// success. Returns -1 on error.
  597 +// See field types in fpdf_formfill.h.
  598 +FPDF_EXPORT int FPDF_CALLCONV
  599 +FPDFAnnot_GetFormFieldType(FPDF_FORMHANDLE hHandle, FPDF_ANNOTATION annot);
  600 +
  601 +// Experimental API.
  602 +// Gets the value of |annot|, which is an interactive form annotation.
  603 +// |buffer| is only modified if |buflen| is longer than the length of contents.
  604 +// In case of error, nothing will be added to |buffer| and the return value will
  605 +// be 0. Note that return value of empty string is 2 for "\0\0".
  606 +//
  607 +// hHandle - handle to the form fill module, returned by
  608 +// FPDFDOC_InitFormFillEnvironment().
  609 +// annot - handle to an interactive form annotation.
  610 +// buffer - buffer for holding the value string, encoded in UTF-16LE.
  611 +// buflen - length of the buffer in bytes.
  612 +//
  613 +// Returns the length of the string value in bytes.
  614 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  615 +FPDFAnnot_GetFormFieldValue(FPDF_FORMHANDLE hHandle,
  616 + FPDF_ANNOTATION annot,
  617 + FPDF_WCHAR* buffer,
  618 + unsigned long buflen);
  619 +
  620 +// Experimental API.
  621 +// Get the number of options in the |annot|'s "Opt" dictionary. Intended for
  622 +// use with listbox and combobox widget annotations.
  623 +//
  624 +// hHandle - handle to the form fill module, returned by
  625 +// FPDFDOC_InitFormFillEnvironment.
  626 +// annot - handle to an annotation.
  627 +//
  628 +// Returns the number of options in "Opt" dictionary on success. Return value
  629 +// will be -1 if annotation does not have an "Opt" dictionary or other error.
  630 +FPDF_EXPORT int FPDF_CALLCONV FPDFAnnot_GetOptionCount(FPDF_FORMHANDLE hHandle,
  631 + FPDF_ANNOTATION annot);
  632 +
  633 +// Experimental API.
  634 +// Get the string value for the label of the option at |index| in |annot|'s
  635 +// "Opt" dictionary. Intended for use with listbox and combobox widget
  636 +// annotations. |buffer| is only modified if |buflen| is longer than the length
  637 +// of contents. If index is out of range or in case of other error, nothing
  638 +// will be added to |buffer| and the return value will be 0. Note that
  639 +// return value of empty string is 2 for "\0\0".
  640 +//
  641 +// hHandle - handle to the form fill module, returned by
  642 +// FPDFDOC_InitFormFillEnvironment.
  643 +// annot - handle to an annotation.
  644 +// index - numeric index of the option in the "Opt" array
  645 +// buffer - buffer for holding the value string, encoded in UTF-16LE.
  646 +// buflen - length of the buffer in bytes.
  647 +//
  648 +// Returns the length of the string value in bytes.
  649 +// If |annot| does not have an "Opt" array, |index| is out of range or if any
  650 +// other error occurs, returns 0.
  651 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  652 +FPDFAnnot_GetOptionLabel(FPDF_FORMHANDLE hHandle,
  653 + FPDF_ANNOTATION annot,
  654 + int index,
  655 + FPDF_WCHAR* buffer,
  656 + unsigned long buflen);
  657 +
  658 +// Experimental API.
  659 +// Determine whether or not the option at |index| in |annot|'s "Opt" dictionary
  660 +// is selected. Intended for use with listbox and combobox widget annotations.
  661 +//
  662 +// handle - handle to the form fill module, returned by
  663 +// FPDFDOC_InitFormFillEnvironment.
  664 +// annot - handle to an annotation.
  665 +// index - numeric index of the option in the "Opt" array.
  666 +//
  667 +// Returns true if the option at |index| in |annot|'s "Opt" dictionary is
  668 +// selected, false otherwise.
  669 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  670 +FPDFAnnot_IsOptionSelected(FPDF_FORMHANDLE handle,
  671 + FPDF_ANNOTATION annot,
  672 + int index);
  673 +
  674 +// Experimental API.
  675 +// Get the float value of the font size for an |annot| with variable text.
  676 +// If 0, the font is to be auto-sized: its size is computed as a function of
  677 +// the height of the annotation rectangle.
  678 +//
  679 +// hHandle - handle to the form fill module, returned by
  680 +// FPDFDOC_InitFormFillEnvironment.
  681 +// annot - handle to an annotation.
  682 +// value - Required. Float which will be set to font size on success.
  683 +//
  684 +// Returns true if the font size was set in |value|, false on error or if
  685 +// |value| not provided.
  686 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  687 +FPDFAnnot_GetFontSize(FPDF_FORMHANDLE hHandle,
  688 + FPDF_ANNOTATION annot,
  689 + float* value);
  690 +
  691 +// Experimental API.
  692 +// Determine if |annot| is a form widget that is checked. Intended for use with
  693 +// checkbox and radio button widgets.
  694 +//
  695 +// hHandle - handle to the form fill module, returned by
  696 +// FPDFDOC_InitFormFillEnvironment.
  697 +// annot - handle to an annotation.
  698 +//
  699 +// Returns true if |annot| is a form widget and is checked, false otherwise.
  700 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_IsChecked(FPDF_FORMHANDLE hHandle,
  701 + FPDF_ANNOTATION annot);
  702 +
  703 +// Experimental API.
  704 +// Set the list of focusable annotation subtypes. Annotations of subtype
  705 +// FPDF_ANNOT_WIDGET are by default focusable. New subtypes set using this API
  706 +// will override the existing subtypes.
  707 +//
  708 +// hHandle - handle to the form fill module, returned by
  709 +// FPDFDOC_InitFormFillEnvironment.
  710 +// subtypes - list of annotation subtype which can be tabbed over.
  711 +// count - total number of annotation subtype in list.
  712 +// Returns true if list of annotation subtype is set successfully, false
  713 +// otherwise.
  714 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  715 +FPDFAnnot_SetFocusableSubtypes(FPDF_FORMHANDLE hHandle,
  716 + const FPDF_ANNOTATION_SUBTYPE* subtypes,
  717 + size_t count);
  718 +
  719 +// Experimental API.
  720 +// Get the count of focusable annotation subtypes as set by host
  721 +// for a |hHandle|.
  722 +//
  723 +// hHandle - handle to the form fill module, returned by
  724 +// FPDFDOC_InitFormFillEnvironment.
  725 +// Returns the count of focusable annotation subtypes or -1 on error.
  726 +// Note : Annotations of type FPDF_ANNOT_WIDGET are by default focusable.
  727 +FPDF_EXPORT int FPDF_CALLCONV
  728 +FPDFAnnot_GetFocusableSubtypesCount(FPDF_FORMHANDLE hHandle);
  729 +
  730 +// Experimental API.
  731 +// Get the list of focusable annotation subtype as set by host.
  732 +//
  733 +// hHandle - handle to the form fill module, returned by
  734 +// FPDFDOC_InitFormFillEnvironment.
  735 +// subtypes - receives the list of annotation subtype which can be tabbed
  736 +// over. Caller must have allocated |subtypes| more than or
  737 +// equal to the count obtained from
  738 +// FPDFAnnot_GetFocusableSubtypesCount() API.
  739 +// count - size of |subtypes|.
  740 +// Returns true on success and set list of annotation subtype to |subtypes|,
  741 +// false otherwise.
  742 +// Note : Annotations of type FPDF_ANNOT_WIDGET are by default focusable.
  743 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  744 +FPDFAnnot_GetFocusableSubtypes(FPDF_FORMHANDLE hHandle,
  745 + FPDF_ANNOTATION_SUBTYPE* subtypes,
  746 + size_t count);
  747 +
  748 +// Experimental API.
  749 +// Gets FPDF_LINK object for |annot|. Intended to use for link annotations.
  750 +//
  751 +// annot - handle to an annotation.
  752 +//
  753 +// Returns FPDF_LINK from the FPDF_ANNOTATION and NULL on failure,
  754 +// if the input annot is NULL or input annot's subtype is not link.
  755 +FPDF_EXPORT FPDF_LINK FPDF_CALLCONV FPDFAnnot_GetLink(FPDF_ANNOTATION annot);
  756 +
  757 +// Experimental API.
  758 +// Gets the count of annotations in the |annot|'s control group.
  759 +// A group of interactive form annotations is collectively called a form
  760 +// control group. Here, |annot|, an interactive form annotation, should be
  761 +// either a radio button or a checkbox.
  762 +//
  763 +// hHandle - handle to the form fill module, returned by
  764 +// FPDFDOC_InitFormFillEnvironment.
  765 +// annot - handle to an annotation.
  766 +//
  767 +// Returns number of controls in its control group or -1 on error.
  768 +FPDF_EXPORT int FPDF_CALLCONV
  769 +FPDFAnnot_GetFormControlCount(FPDF_FORMHANDLE hHandle, FPDF_ANNOTATION annot);
  770 +
  771 +// Experimental API.
  772 +// Gets the index of |annot| in |annot|'s control group.
  773 +// A group of interactive form annotations is collectively called a form
  774 +// control group. Here, |annot|, an interactive form annotation, should be
  775 +// either a radio button or a checkbox.
  776 +//
  777 +// hHandle - handle to the form fill module, returned by
  778 +// FPDFDOC_InitFormFillEnvironment.
  779 +// annot - handle to an annotation.
  780 +//
  781 +// Returns index of a given |annot| in its control group or -1 on error.
  782 +FPDF_EXPORT int FPDF_CALLCONV
  783 +FPDFAnnot_GetFormControlIndex(FPDF_FORMHANDLE hHandle, FPDF_ANNOTATION annot);
  784 +
  785 +// Experimental API.
  786 +// Gets the export value of |annot| which is an interactive form annotation.
  787 +// Intended for use with radio button and checkbox widget annotations.
  788 +// |buffer| is only modified if |buflen| is longer than the length of contents.
  789 +// In case of error, nothing will be added to |buffer| and the return value
  790 +// will be 0. Note that return value of empty string is 2 for "\0\0".
  791 +//
  792 +// hHandle - handle to the form fill module, returned by
  793 +// FPDFDOC_InitFormFillEnvironment().
  794 +// annot - handle to an interactive form annotation.
  795 +// buffer - buffer for holding the value string, encoded in UTF-16LE.
  796 +// buflen - length of the buffer in bytes.
  797 +//
  798 +// Returns the length of the string value in bytes.
  799 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  800 +FPDFAnnot_GetFormFieldExportValue(FPDF_FORMHANDLE hHandle,
  801 + FPDF_ANNOTATION annot,
  802 + FPDF_WCHAR* buffer,
  803 + unsigned long buflen);
  804 +
  805 +#ifdef __cplusplus
  806 +} // extern "C"
  807 +#endif // __cplusplus
  808 +
  809 +#endif // PUBLIC_FPDF_ANNOT_H_
  1 +// Copyright 2017 PDFium Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +#ifndef PUBLIC_FPDF_ATTACHMENT_H_
  6 +#define PUBLIC_FPDF_ATTACHMENT_H_
  7 +
  8 +// NOLINTNEXTLINE(build/include)
  9 +#include "fpdfview.h"
  10 +
  11 +#ifdef __cplusplus
  12 +extern "C" {
  13 +#endif // __cplusplus
  14 +
  15 +// Experimental API.
  16 +// Get the number of embedded files in |document|.
  17 +//
  18 +// document - handle to a document.
  19 +//
  20 +// Returns the number of embedded files in |document|.
  21 +FPDF_EXPORT int FPDF_CALLCONV
  22 +FPDFDoc_GetAttachmentCount(FPDF_DOCUMENT document);
  23 +
  24 +// Experimental API.
  25 +// Add an embedded file with |name| in |document|. If |name| is empty, or if
  26 +// |name| is the name of a existing embedded file in |document|, or if
  27 +// |document|'s embedded file name tree is too deep (i.e. |document| has too
  28 +// many embedded files already), then a new attachment will not be added.
  29 +//
  30 +// document - handle to a document.
  31 +// name - name of the new attachment.
  32 +//
  33 +// Returns a handle to the new attachment object, or NULL on failure.
  34 +FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV
  35 +FPDFDoc_AddAttachment(FPDF_DOCUMENT document, FPDF_WIDESTRING name);
  36 +
  37 +// Experimental API.
  38 +// Get the embedded attachment at |index| in |document|. Note that the returned
  39 +// attachment handle is only valid while |document| is open.
  40 +//
  41 +// document - handle to a document.
  42 +// index - the index of the requested embedded file.
  43 +//
  44 +// Returns the handle to the attachment object, or NULL on failure.
  45 +FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV
  46 +FPDFDoc_GetAttachment(FPDF_DOCUMENT document, int index);
  47 +
  48 +// Experimental API.
  49 +// Delete the embedded attachment at |index| in |document|. Note that this does
  50 +// not remove the attachment data from the PDF file; it simply removes the
  51 +// file's entry in the embedded files name tree so that it does not appear in
  52 +// the attachment list. This behavior may change in the future.
  53 +//
  54 +// document - handle to a document.
  55 +// index - the index of the embedded file to be deleted.
  56 +//
  57 +// Returns true if successful.
  58 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  59 +FPDFDoc_DeleteAttachment(FPDF_DOCUMENT document, int index);
  60 +
  61 +// Experimental API.
  62 +// Get the name of the |attachment| file. |buffer| is only modified if |buflen|
  63 +// is longer than the length of the file name. On errors, |buffer| is unmodified
  64 +// and the returned length is 0.
  65 +//
  66 +// attachment - handle to an attachment.
  67 +// buffer - buffer for holding the file name, encoded in UTF-16LE.
  68 +// buflen - length of the buffer in bytes.
  69 +//
  70 +// Returns the length of the file name in bytes.
  71 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  72 +FPDFAttachment_GetName(FPDF_ATTACHMENT attachment,
  73 + FPDF_WCHAR* buffer,
  74 + unsigned long buflen);
  75 +
  76 +// Experimental API.
  77 +// Check if the params dictionary of |attachment| has |key| as a key.
  78 +//
  79 +// attachment - handle to an attachment.
  80 +// key - the key to look for, encoded in UTF-8.
  81 +//
  82 +// Returns true if |key| exists.
  83 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  84 +FPDFAttachment_HasKey(FPDF_ATTACHMENT attachment, FPDF_BYTESTRING key);
  85 +
  86 +// Experimental API.
  87 +// Get the type of the value corresponding to |key| in the params dictionary of
  88 +// the embedded |attachment|.
  89 +//
  90 +// attachment - handle to an attachment.
  91 +// key - the key to look for, encoded in UTF-8.
  92 +//
  93 +// Returns the type of the dictionary value.
  94 +FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
  95 +FPDFAttachment_GetValueType(FPDF_ATTACHMENT attachment, FPDF_BYTESTRING key);
  96 +
  97 +// Experimental API.
  98 +// Set the string value corresponding to |key| in the params dictionary of the
  99 +// embedded file |attachment|, overwriting the existing value if any. The value
  100 +// type should be FPDF_OBJECT_STRING after this function call succeeds.
  101 +//
  102 +// attachment - handle to an attachment.
  103 +// key - the key to the dictionary entry, encoded in UTF-8.
  104 +// value - the string value to be set, encoded in UTF-16LE.
  105 +//
  106 +// Returns true if successful.
  107 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  108 +FPDFAttachment_SetStringValue(FPDF_ATTACHMENT attachment,
  109 + FPDF_BYTESTRING key,
  110 + FPDF_WIDESTRING value);
  111 +
  112 +// Experimental API.
  113 +// Get the string value corresponding to |key| in the params dictionary of the
  114 +// embedded file |attachment|. |buffer| is only modified if |buflen| is longer
  115 +// than the length of the string value. Note that if |key| does not exist in the
  116 +// dictionary or if |key|'s corresponding value in the dictionary is not a
  117 +// string (i.e. the value is not of type FPDF_OBJECT_STRING or
  118 +// FPDF_OBJECT_NAME), then an empty string would be copied to |buffer| and the
  119 +// return value would be 2. On other errors, nothing would be added to |buffer|
  120 +// and the return value would be 0.
  121 +//
  122 +// attachment - handle to an attachment.
  123 +// key - the key to the requested string value, encoded in UTF-8.
  124 +// buffer - buffer for holding the string value encoded in UTF-16LE.
  125 +// buflen - length of the buffer in bytes.
  126 +//
  127 +// Returns the length of the dictionary value string in bytes.
  128 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  129 +FPDFAttachment_GetStringValue(FPDF_ATTACHMENT attachment,
  130 + FPDF_BYTESTRING key,
  131 + FPDF_WCHAR* buffer,
  132 + unsigned long buflen);
  133 +
  134 +// Experimental API.
  135 +// Set the file data of |attachment|, overwriting the existing file data if any.
  136 +// The creation date and checksum will be updated, while all other dictionary
  137 +// entries will be deleted. Note that only contents with |len| smaller than
  138 +// INT_MAX is supported.
  139 +//
  140 +// attachment - handle to an attachment.
  141 +// contents - buffer holding the file data to write to |attachment|.
  142 +// len - length of file data in bytes.
  143 +//
  144 +// Returns true if successful.
  145 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  146 +FPDFAttachment_SetFile(FPDF_ATTACHMENT attachment,
  147 + FPDF_DOCUMENT document,
  148 + const void* contents,
  149 + unsigned long len);
  150 +
  151 +// Experimental API.
  152 +// Get the file data of |attachment|.
  153 +// When the attachment file data is readable, true is returned, and |out_buflen|
  154 +// is updated to indicate the file data size. |buffer| is only modified if
  155 +// |buflen| is non-null and long enough to contain the entire file data. Callers
  156 +// must check both the return value and the input |buflen| is no less than the
  157 +// returned |out_buflen| before using the data.
  158 +//
  159 +// Otherwise, when the attachment file data is unreadable or when |out_buflen|
  160 +// is null, false is returned and |buffer| and |out_buflen| remain unmodified.
  161 +//
  162 +// attachment - handle to an attachment.
  163 +// buffer - buffer for holding the file data from |attachment|.
  164 +// buflen - length of the buffer in bytes.
  165 +// out_buflen - pointer to the variable that will receive the minimum buffer
  166 +// size to contain the file data of |attachment|.
  167 +//
  168 +// Returns true on success, false otherwise.
  169 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  170 +FPDFAttachment_GetFile(FPDF_ATTACHMENT attachment,
  171 + void* buffer,
  172 + unsigned long buflen,
  173 + unsigned long* out_buflen);
  174 +
  175 +#ifdef __cplusplus
  176 +} // extern "C"
  177 +#endif // __cplusplus
  178 +
  179 +#endif // PUBLIC_FPDF_ATTACHMENT_H_
  1 +// Copyright 2017 PDFium Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +#ifndef PUBLIC_FPDF_CATALOG_H_
  6 +#define PUBLIC_FPDF_CATALOG_H_
  7 +
  8 +// NOLINTNEXTLINE(build/include)
  9 +#include "fpdfview.h"
  10 +
  11 +#ifdef __cplusplus
  12 +extern "C" {
  13 +#endif // __cplusplus
  14 +
  15 +/**
  16 + * Experimental API.
  17 + *
  18 + * Determine if |document| represents a tagged PDF.
  19 + *
  20 + * For the definition of tagged PDF, See (see 10.7 "Tagged PDF" in PDF
  21 + * Reference 1.7).
  22 + *
  23 + * document - handle to a document.
  24 + *
  25 + * Returns |true| iff |document| is a tagged PDF.
  26 + */
  27 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  28 +FPDFCatalog_IsTagged(FPDF_DOCUMENT document);
  29 +
  30 +#ifdef __cplusplus
  31 +} // extern "C"
  32 +#endif // __cplusplus
  33 +
  34 +#endif // PUBLIC_FPDF_CATALOG_H_
  1 +// Copyright 2014 PDFium Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
  6 +
  7 +#ifndef PUBLIC_FPDF_DATAAVAIL_H_
  8 +#define PUBLIC_FPDF_DATAAVAIL_H_
  9 +
  10 +#include <stddef.h>
  11 +
  12 +// NOLINTNEXTLINE(build/include)
  13 +#include "fpdfview.h"
  14 +
  15 +#define PDF_LINEARIZATION_UNKNOWN -1
  16 +#define PDF_NOT_LINEARIZED 0
  17 +#define PDF_LINEARIZED 1
  18 +
  19 +#define PDF_DATA_ERROR -1
  20 +#define PDF_DATA_NOTAVAIL 0
  21 +#define PDF_DATA_AVAIL 1
  22 +
  23 +#define PDF_FORM_ERROR -1
  24 +#define PDF_FORM_NOTAVAIL 0
  25 +#define PDF_FORM_AVAIL 1
  26 +#define PDF_FORM_NOTEXIST 2
  27 +
  28 +#ifdef __cplusplus
  29 +extern "C" {
  30 +#endif // __cplusplus
  31 +
  32 +// Interface for checking whether sections of the file are available.
  33 +typedef struct _FX_FILEAVAIL {
  34 + // Version number of the interface. Must be 1.
  35 + int version;
  36 +
  37 + // Reports if the specified data section is currently available. A section is
  38 + // available if all bytes in the section are available.
  39 + //
  40 + // Interface Version: 1
  41 + // Implementation Required: Yes
  42 + //
  43 + // pThis - pointer to the interface structure.
  44 + // offset - the offset of the data section in the file.
  45 + // size - the size of the data section.
  46 + //
  47 + // Returns true if the specified data section at |offset| of |size|
  48 + // is available.
  49 + FPDF_BOOL(*IsDataAvail)
  50 + (struct _FX_FILEAVAIL* pThis, size_t offset, size_t size);
  51 +} FX_FILEAVAIL;
  52 +typedef void* FPDF_AVAIL;
  53 +
  54 +// Create a document availability provider.
  55 +//
  56 +// file_avail - pointer to file availability interface.
  57 +// file - pointer to a file access interface.
  58 +//
  59 +// Returns a handle to the document availability provider, or NULL on error.
  60 +//
  61 +// FPDFAvail_Destroy() must be called when done with the availability provider.
  62 +FPDF_EXPORT FPDF_AVAIL FPDF_CALLCONV FPDFAvail_Create(FX_FILEAVAIL* file_avail,
  63 + FPDF_FILEACCESS* file);
  64 +
  65 +// Destroy the |avail| document availability provider.
  66 +//
  67 +// avail - handle to document availability provider to be destroyed.
  68 +FPDF_EXPORT void FPDF_CALLCONV FPDFAvail_Destroy(FPDF_AVAIL avail);
  69 +
  70 +// Download hints interface. Used to receive hints for further downloading.
  71 +typedef struct _FX_DOWNLOADHINTS {
  72 + // Version number of the interface. Must be 1.
  73 + int version;
  74 +
  75 + // Add a section to be downloaded.
  76 + //
  77 + // Interface Version: 1
  78 + // Implementation Required: Yes
  79 + //
  80 + // pThis - pointer to the interface structure.
  81 + // offset - the offset of the hint reported to be downloaded.
  82 + // size - the size of the hint reported to be downloaded.
  83 + //
  84 + // The |offset| and |size| of the section may not be unique. Part of the
  85 + // section might be already available. The download manager must deal with
  86 + // overlapping sections.
  87 + void (*AddSegment)(struct _FX_DOWNLOADHINTS* pThis,
  88 + size_t offset,
  89 + size_t size);
  90 +} FX_DOWNLOADHINTS;
  91 +
  92 +// Checks if the document is ready for loading, if not, gets download hints.
  93 +//
  94 +// avail - handle to document availability provider.
  95 +// hints - pointer to a download hints interface.
  96 +//
  97 +// Returns one of:
  98 +// PDF_DATA_ERROR: A common error is returned. Data availability unknown.
  99 +// PDF_DATA_NOTAVAIL: Data not yet available.
  100 +// PDF_DATA_AVAIL: Data available.
  101 +//
  102 +// Applications should call this function whenever new data arrives, and process
  103 +// all the generated download hints, if any, until the function returns
  104 +// |PDF_DATA_ERROR| or |PDF_DATA_AVAIL|.
  105 +// if hints is nullptr, the function just check current document availability.
  106 +//
  107 +// Once all data is available, call FPDFAvail_GetDocument() to get a document
  108 +// handle.
  109 +FPDF_EXPORT int FPDF_CALLCONV FPDFAvail_IsDocAvail(FPDF_AVAIL avail,
  110 + FX_DOWNLOADHINTS* hints);
  111 +
  112 +// Get document from the availability provider.
  113 +//
  114 +// avail - handle to document availability provider.
  115 +// password - password for decrypting the PDF file. Optional.
  116 +//
  117 +// Returns a handle to the document.
  118 +//
  119 +// When FPDFAvail_IsDocAvail() returns TRUE, call FPDFAvail_GetDocument() to
  120 +// retrieve the document handle.
  121 +// See the comments for FPDF_LoadDocument() regarding the encoding for
  122 +// |password|.
  123 +FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV
  124 +FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password);
  125 +
  126 +// Get the page number for the first available page in a linearized PDF.
  127 +//
  128 +// doc - document handle.
  129 +//
  130 +// Returns the zero-based index for the first available page.
  131 +//
  132 +// For most linearized PDFs, the first available page will be the first page,
  133 +// however, some PDFs might make another page the first available page.
  134 +// For non-linearized PDFs, this function will always return zero.
  135 +FPDF_EXPORT int FPDF_CALLCONV FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc);
  136 +
  137 +// Check if |page_index| is ready for loading, if not, get the
  138 +// |FX_DOWNLOADHINTS|.
  139 +//
  140 +// avail - handle to document availability provider.
  141 +// page_index - index number of the page. Zero for the first page.
  142 +// hints - pointer to a download hints interface. Populated if
  143 +// |page_index| is not available.
  144 +//
  145 +// Returns one of:
  146 +// PDF_DATA_ERROR: A common error is returned. Data availability unknown.
  147 +// PDF_DATA_NOTAVAIL: Data not yet available.
  148 +// PDF_DATA_AVAIL: Data available.
  149 +//
  150 +// This function can be called only after FPDFAvail_GetDocument() is called.
  151 +// Applications should call this function whenever new data arrives and process
  152 +// all the generated download |hints|, if any, until this function returns
  153 +// |PDF_DATA_ERROR| or |PDF_DATA_AVAIL|. Applications can then perform page
  154 +// loading.
  155 +// if hints is nullptr, the function just check current availability of
  156 +// specified page.
  157 +FPDF_EXPORT int FPDF_CALLCONV FPDFAvail_IsPageAvail(FPDF_AVAIL avail,
  158 + int page_index,
  159 + FX_DOWNLOADHINTS* hints);
  160 +
  161 +// Check if form data is ready for initialization, if not, get the
  162 +// |FX_DOWNLOADHINTS|.
  163 +//
  164 +// avail - handle to document availability provider.
  165 +// hints - pointer to a download hints interface. Populated if form is not
  166 +// ready for initialization.
  167 +//
  168 +// Returns one of:
  169 +// PDF_FORM_ERROR: A common eror, in general incorrect parameters.
  170 +// PDF_FORM_NOTAVAIL: Data not available.
  171 +// PDF_FORM_AVAIL: Data available.
  172 +// PDF_FORM_NOTEXIST: No form data.
  173 +//
  174 +// This function can be called only after FPDFAvail_GetDocument() is called.
  175 +// The application should call this function whenever new data arrives and
  176 +// process all the generated download |hints|, if any, until the function
  177 +// |PDF_FORM_ERROR|, |PDF_FORM_AVAIL| or |PDF_FORM_NOTEXIST|.
  178 +// if hints is nullptr, the function just check current form availability.
  179 +//
  180 +// Applications can then perform page loading. It is recommend to call
  181 +// FPDFDOC_InitFormFillEnvironment() when |PDF_FORM_AVAIL| is returned.
  182 +FPDF_EXPORT int FPDF_CALLCONV FPDFAvail_IsFormAvail(FPDF_AVAIL avail,
  183 + FX_DOWNLOADHINTS* hints);
  184 +
  185 +// Check whether a document is a linearized PDF.
  186 +//
  187 +// avail - handle to document availability provider.
  188 +//
  189 +// Returns one of:
  190 +// PDF_LINEARIZED
  191 +// PDF_NOT_LINEARIZED
  192 +// PDF_LINEARIZATION_UNKNOWN
  193 +//
  194 +// FPDFAvail_IsLinearized() will return |PDF_LINEARIZED| or |PDF_NOT_LINEARIZED|
  195 +// when we have 1k of data. If the files size less than 1k, it returns
  196 +// |PDF_LINEARIZATION_UNKNOWN| as there is insufficient information to determine
  197 +// if the PDF is linearlized.
  198 +FPDF_EXPORT int FPDF_CALLCONV FPDFAvail_IsLinearized(FPDF_AVAIL avail);
  199 +
  200 +#ifdef __cplusplus
  201 +} // extern "C"
  202 +#endif // __cplusplus
  203 +
  204 +#endif // PUBLIC_FPDF_DATAAVAIL_H_
  1 +// Copyright 2014 PDFium Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
  6 +
  7 +#ifndef PUBLIC_FPDF_DOC_H_
  8 +#define PUBLIC_FPDF_DOC_H_
  9 +
  10 +// NOLINTNEXTLINE(build/include)
  11 +#include "fpdfview.h"
  12 +
  13 +#ifdef __cplusplus
  14 +extern "C" {
  15 +#endif // __cplusplus
  16 +
  17 +// Unsupported action type.
  18 +#define PDFACTION_UNSUPPORTED 0
  19 +// Go to a destination within current document.
  20 +#define PDFACTION_GOTO 1
  21 +// Go to a destination within another document.
  22 +#define PDFACTION_REMOTEGOTO 2
  23 +// URI, including web pages and other Internet resources.
  24 +#define PDFACTION_URI 3
  25 +// Launch an application or open a file.
  26 +#define PDFACTION_LAUNCH 4
  27 +// Go to a destination in an embedded file.
  28 +#define PDFACTION_EMBEDDEDGOTO 5
  29 +
  30 +// View destination fit types. See pdfmark reference v9, page 48.
  31 +#define PDFDEST_VIEW_UNKNOWN_MODE 0
  32 +#define PDFDEST_VIEW_XYZ 1
  33 +#define PDFDEST_VIEW_FIT 2
  34 +#define PDFDEST_VIEW_FITH 3
  35 +#define PDFDEST_VIEW_FITV 4
  36 +#define PDFDEST_VIEW_FITR 5
  37 +#define PDFDEST_VIEW_FITB 6
  38 +#define PDFDEST_VIEW_FITBH 7
  39 +#define PDFDEST_VIEW_FITBV 8
  40 +
  41 +// The file identifier entry type. See section 14.4 "File Identifiers" of the
  42 +// ISO 32000-1 standard.
  43 +typedef enum {
  44 + FILEIDTYPE_PERMANENT = 0,
  45 + FILEIDTYPE_CHANGING = 1
  46 +} FPDF_FILEIDTYPE;
  47 +
  48 +typedef struct _FS_QUADPOINTSF {
  49 + FS_FLOAT x1;
  50 + FS_FLOAT y1;
  51 + FS_FLOAT x2;
  52 + FS_FLOAT y2;
  53 + FS_FLOAT x3;
  54 + FS_FLOAT y3;
  55 + FS_FLOAT x4;
  56 + FS_FLOAT y4;
  57 +} FS_QUADPOINTSF;
  58 +
  59 +// Get the first child of |bookmark|, or the first top-level bookmark item.
  60 +//
  61 +// document - handle to the document.
  62 +// bookmark - handle to the current bookmark. Pass NULL for the first top
  63 +// level item.
  64 +//
  65 +// Returns a handle to the first child of |bookmark| or the first top-level
  66 +// bookmark item. NULL if no child or top-level bookmark found.
  67 +FPDF_EXPORT FPDF_BOOKMARK FPDF_CALLCONV
  68 +FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
  69 +
  70 +// Get the next sibling of |bookmark|.
  71 +//
  72 +// document - handle to the document.
  73 +// bookmark - handle to the current bookmark.
  74 +//
  75 +// Returns a handle to the next sibling of |bookmark|, or NULL if this is the
  76 +// last bookmark at this level.
  77 +FPDF_EXPORT FPDF_BOOKMARK FPDF_CALLCONV
  78 +FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
  79 +
  80 +// Get the title of |bookmark|.
  81 +//
  82 +// bookmark - handle to the bookmark.
  83 +// buffer - buffer for the title. May be NULL.
  84 +// buflen - the length of the buffer in bytes. May be 0.
  85 +//
  86 +// Returns the number of bytes in the title, including the terminating NUL
  87 +// character. The number of bytes is returned regardless of the |buffer| and
  88 +// |buflen| parameters.
  89 +//
  90 +// Regardless of the platform, the |buffer| is always in UTF-16LE encoding. The
  91 +// string is terminated by a UTF16 NUL character. If |buflen| is less than the
  92 +// required length, or |buffer| is NULL, |buffer| will not be modified.
  93 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  94 +FPDFBookmark_GetTitle(FPDF_BOOKMARK bookmark,
  95 + void* buffer,
  96 + unsigned long buflen);
  97 +
  98 +// Find the bookmark with |title| in |document|.
  99 +//
  100 +// document - handle to the document.
  101 +// title - the UTF-16LE encoded Unicode title for which to search.
  102 +//
  103 +// Returns the handle to the bookmark, or NULL if |title| can't be found.
  104 +//
  105 +// FPDFBookmark_Find() will always return the first bookmark found even if
  106 +// multiple bookmarks have the same |title|.
  107 +FPDF_EXPORT FPDF_BOOKMARK FPDF_CALLCONV
  108 +FPDFBookmark_Find(FPDF_DOCUMENT document, FPDF_WIDESTRING title);
  109 +
  110 +// Get the destination associated with |bookmark|.
  111 +//
  112 +// document - handle to the document.
  113 +// bookmark - handle to the bookmark.
  114 +//
  115 +// Returns the handle to the destination data, NULL if no destination is
  116 +// associated with |bookmark|.
  117 +FPDF_EXPORT FPDF_DEST FPDF_CALLCONV
  118 +FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
  119 +
  120 +// Get the action associated with |bookmark|.
  121 +//
  122 +// bookmark - handle to the bookmark.
  123 +//
  124 +// Returns the handle to the action data, or NULL if no action is associated
  125 +// with |bookmark|. When NULL is returned, FPDFBookmark_GetDest() should be
  126 +// called to get the |bookmark| destination data.
  127 +FPDF_EXPORT FPDF_ACTION FPDF_CALLCONV
  128 +FPDFBookmark_GetAction(FPDF_BOOKMARK bookmark);
  129 +
  130 +// Get the type of |action|.
  131 +//
  132 +// action - handle to the action.
  133 +//
  134 +// Returns one of:
  135 +// PDFACTION_UNSUPPORTED
  136 +// PDFACTION_GOTO
  137 +// PDFACTION_REMOTEGOTO
  138 +// PDFACTION_URI
  139 +// PDFACTION_LAUNCH
  140 +FPDF_EXPORT unsigned long FPDF_CALLCONV FPDFAction_GetType(FPDF_ACTION action);
  141 +
  142 +// Get the destination of |action|.
  143 +//
  144 +// document - handle to the document.
  145 +// action - handle to the action. |action| must be a |PDFACTION_GOTO| or
  146 +// |PDFACTION_REMOTEGOTO|.
  147 +//
  148 +// Returns a handle to the destination data, or NULL on error, typically
  149 +// because the arguments were bad or the action was of the wrong type.
  150 +//
  151 +// In the case of |PDFACTION_REMOTEGOTO|, you must first call
  152 +// FPDFAction_GetFilePath(), then load the document at that path, then pass
  153 +// the document handle from that document as |document| to FPDFAction_GetDest().
  154 +FPDF_EXPORT FPDF_DEST FPDF_CALLCONV FPDFAction_GetDest(FPDF_DOCUMENT document,
  155 + FPDF_ACTION action);
  156 +
  157 +// Get the file path of |action|.
  158 +//
  159 +// action - handle to the action. |action| must be a |PDFACTION_LAUNCH| or
  160 +// |PDFACTION_REMOTEGOTO|.
  161 +// buffer - a buffer for output the path string. May be NULL.
  162 +// buflen - the length of the buffer, in bytes. May be 0.
  163 +//
  164 +// Returns the number of bytes in the file path, including the trailing NUL
  165 +// character, or 0 on error, typically because the arguments were bad or the
  166 +// action was of the wrong type.
  167 +//
  168 +// Regardless of the platform, the |buffer| is always in UTF-8 encoding.
  169 +// If |buflen| is less than the returned length, or |buffer| is NULL, |buffer|
  170 +// will not be modified.
  171 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  172 +FPDFAction_GetFilePath(FPDF_ACTION action, void* buffer, unsigned long buflen);
  173 +
  174 +// Get the URI path of |action|.
  175 +//
  176 +// document - handle to the document.
  177 +// action - handle to the action. Must be a |PDFACTION_URI|.
  178 +// buffer - a buffer for the path string. May be NULL.
  179 +// buflen - the length of the buffer, in bytes. May be 0.
  180 +//
  181 +// Returns the number of bytes in the URI path, including the trailing NUL
  182 +// character, or 0 on error, typically because the arguments were bad or the
  183 +// action was of the wrong type.
  184 +//
  185 +// The |buffer| is always encoded in 7-bit ASCII. If |buflen| is less than the
  186 +// returned length, or |buffer| is NULL, |buffer| will not be modified.
  187 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  188 +FPDFAction_GetURIPath(FPDF_DOCUMENT document,
  189 + FPDF_ACTION action,
  190 + void* buffer,
  191 + unsigned long buflen);
  192 +
  193 +// Get the page index of |dest|.
  194 +//
  195 +// document - handle to the document.
  196 +// dest - handle to the destination.
  197 +//
  198 +// Returns the 0-based page index containing |dest|. Returns -1 on error.
  199 +FPDF_EXPORT int FPDF_CALLCONV FPDFDest_GetDestPageIndex(FPDF_DOCUMENT document,
  200 + FPDF_DEST dest);
  201 +
  202 +// Experimental API.
  203 +// Get the view (fit type) specified by |dest|.
  204 +//
  205 +// dest - handle to the destination.
  206 +// pNumParams - receives the number of view parameters, which is at most 4.
  207 +// pParams - buffer to write the view parameters. Must be at least 4
  208 +// FS_FLOATs long.
  209 +// Returns one of the PDFDEST_VIEW_* constants, PDFDEST_VIEW_UNKNOWN_MODE if
  210 +// |dest| does not specify a view.
  211 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  212 +FPDFDest_GetView(FPDF_DEST dest, unsigned long* pNumParams, FS_FLOAT* pParams);
  213 +
  214 +// Get the (x, y, zoom) location of |dest| in the destination page, if the
  215 +// destination is in [page /XYZ x y zoom] syntax.
  216 +//
  217 +// dest - handle to the destination.
  218 +// hasXVal - out parameter; true if the x value is not null
  219 +// hasYVal - out parameter; true if the y value is not null
  220 +// hasZoomVal - out parameter; true if the zoom value is not null
  221 +// x - out parameter; the x coordinate, in page coordinates.
  222 +// y - out parameter; the y coordinate, in page coordinates.
  223 +// zoom - out parameter; the zoom value.
  224 +// Returns TRUE on successfully reading the /XYZ value.
  225 +//
  226 +// Note the [x, y, zoom] values are only set if the corresponding hasXVal,
  227 +// hasYVal or hasZoomVal flags are true.
  228 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  229 +FPDFDest_GetLocationInPage(FPDF_DEST dest,
  230 + FPDF_BOOL* hasXVal,
  231 + FPDF_BOOL* hasYVal,
  232 + FPDF_BOOL* hasZoomVal,
  233 + FS_FLOAT* x,
  234 + FS_FLOAT* y,
  235 + FS_FLOAT* zoom);
  236 +
  237 +// Find a link at point (|x|,|y|) on |page|.
  238 +//
  239 +// page - handle to the document page.
  240 +// x - the x coordinate, in the page coordinate system.
  241 +// y - the y coordinate, in the page coordinate system.
  242 +//
  243 +// Returns a handle to the link, or NULL if no link found at the given point.
  244 +//
  245 +// You can convert coordinates from screen coordinates to page coordinates using
  246 +// FPDF_DeviceToPage().
  247 +FPDF_EXPORT FPDF_LINK FPDF_CALLCONV FPDFLink_GetLinkAtPoint(FPDF_PAGE page,
  248 + double x,
  249 + double y);
  250 +
  251 +// Find the Z-order of link at point (|x|,|y|) on |page|.
  252 +//
  253 +// page - handle to the document page.
  254 +// x - the x coordinate, in the page coordinate system.
  255 +// y - the y coordinate, in the page coordinate system.
  256 +//
  257 +// Returns the Z-order of the link, or -1 if no link found at the given point.
  258 +// Larger Z-order numbers are closer to the front.
  259 +//
  260 +// You can convert coordinates from screen coordinates to page coordinates using
  261 +// FPDF_DeviceToPage().
  262 +FPDF_EXPORT int FPDF_CALLCONV FPDFLink_GetLinkZOrderAtPoint(FPDF_PAGE page,
  263 + double x,
  264 + double y);
  265 +
  266 +// Get destination info for |link|.
  267 +//
  268 +// document - handle to the document.
  269 +// link - handle to the link.
  270 +//
  271 +// Returns a handle to the destination, or NULL if there is no destination
  272 +// associated with the link. In this case, you should call FPDFLink_GetAction()
  273 +// to retrieve the action associated with |link|.
  274 +FPDF_EXPORT FPDF_DEST FPDF_CALLCONV FPDFLink_GetDest(FPDF_DOCUMENT document,
  275 + FPDF_LINK link);
  276 +
  277 +// Get action info for |link|.
  278 +//
  279 +// link - handle to the link.
  280 +//
  281 +// Returns a handle to the action associated to |link|, or NULL if no action.
  282 +FPDF_EXPORT FPDF_ACTION FPDF_CALLCONV FPDFLink_GetAction(FPDF_LINK link);
  283 +
  284 +// Enumerates all the link annotations in |page|.
  285 +//
  286 +// page - handle to the page.
  287 +// start_pos - the start position, should initially be 0 and is updated with
  288 +// the next start position on return.
  289 +// link_annot - the link handle for |startPos|.
  290 +//
  291 +// Returns TRUE on success.
  292 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_Enumerate(FPDF_PAGE page,
  293 + int* start_pos,
  294 + FPDF_LINK* link_annot);
  295 +
  296 +// Experimental API.
  297 +// Gets FPDF_ANNOTATION object for |link_annot|.
  298 +//
  299 +// page - handle to the page in which FPDF_LINK object is present.
  300 +// link_annot - handle to link annotation.
  301 +//
  302 +// Returns FPDF_ANNOTATION from the FPDF_LINK and NULL on failure,
  303 +// if the input link annot or page is NULL.
  304 +FPDF_EXPORT FPDF_ANNOTATION FPDF_CALLCONV
  305 +FPDFLink_GetAnnot(FPDF_PAGE page, FPDF_LINK link_annot);
  306 +
  307 +// Get the rectangle for |link_annot|.
  308 +//
  309 +// link_annot - handle to the link annotation.
  310 +// rect - the annotation rectangle.
  311 +//
  312 +// Returns true on success.
  313 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_GetAnnotRect(FPDF_LINK link_annot,
  314 + FS_RECTF* rect);
  315 +
  316 +// Get the count of quadrilateral points to the |link_annot|.
  317 +//
  318 +// link_annot - handle to the link annotation.
  319 +//
  320 +// Returns the count of quadrilateral points.
  321 +FPDF_EXPORT int FPDF_CALLCONV FPDFLink_CountQuadPoints(FPDF_LINK link_annot);
  322 +
  323 +// Get the quadrilateral points for the specified |quad_index| in |link_annot|.
  324 +//
  325 +// link_annot - handle to the link annotation.
  326 +// quad_index - the specified quad point index.
  327 +// quad_points - receives the quadrilateral points.
  328 +//
  329 +// Returns true on success.
  330 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  331 +FPDFLink_GetQuadPoints(FPDF_LINK link_annot,
  332 + int quad_index,
  333 + FS_QUADPOINTSF* quad_points);
  334 +
  335 +// Experimental API
  336 +// Gets an additional-action from |page|.
  337 +//
  338 +// page - handle to the page, as returned by FPDF_LoadPage().
  339 +// aa_type - the type of the page object's addtional-action, defined
  340 +// in public/fpdf_formfill.h
  341 +//
  342 +// Returns the handle to the action data, or NULL if there is no
  343 +// additional-action of type |aa_type|.
  344 +FPDF_EXPORT FPDF_ACTION FPDF_CALLCONV FPDF_GetPageAAction(FPDF_PAGE page,
  345 + int aa_type);
  346 +
  347 +// Experimental API.
  348 +// Get the file identifer defined in the trailer of |document|.
  349 +//
  350 +// document - handle to the document.
  351 +// id_type - the file identifier type to retrieve.
  352 +// buffer - a buffer for the file identifier. May be NULL.
  353 +// buflen - the length of the buffer, in bytes. May be 0.
  354 +//
  355 +// Returns the number of bytes in the file identifier, including the NUL
  356 +// terminator.
  357 +//
  358 +// The |buffer| is always a byte string. The |buffer| is followed by a NUL
  359 +// terminator. If |buflen| is less than the returned length, or |buffer| is
  360 +// NULL, |buffer| will not be modified.
  361 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  362 +FPDF_GetFileIdentifier(FPDF_DOCUMENT document,
  363 + FPDF_FILEIDTYPE id_type,
  364 + void* buffer,
  365 + unsigned long buflen);
  366 +
  367 +// Get meta-data |tag| content from |document|.
  368 +//
  369 +// document - handle to the document.
  370 +// tag - the tag to retrieve. The tag can be one of:
  371 +// Title, Author, Subject, Keywords, Creator, Producer,
  372 +// CreationDate, or ModDate.
  373 +// For detailed explanations of these tags and their respective
  374 +// values, please refer to PDF Reference 1.6, section 10.2.1,
  375 +// 'Document Information Dictionary'.
  376 +// buffer - a buffer for the tag. May be NULL.
  377 +// buflen - the length of the buffer, in bytes. May be 0.
  378 +//
  379 +// Returns the number of bytes in the tag, including trailing zeros.
  380 +//
  381 +// The |buffer| is always encoded in UTF-16LE. The |buffer| is followed by two
  382 +// bytes of zeros indicating the end of the string. If |buflen| is less than
  383 +// the returned length, or |buffer| is NULL, |buffer| will not be modified.
  384 +//
  385 +// For linearized files, FPDFAvail_IsFormAvail must be called before this, and
  386 +// it must have returned PDF_FORM_AVAIL or PDF_FORM_NOTEXIST. Before that, there
  387 +// is no guarantee the metadata has been loaded.
  388 +FPDF_EXPORT unsigned long FPDF_CALLCONV FPDF_GetMetaText(FPDF_DOCUMENT document,
  389 + FPDF_BYTESTRING tag,
  390 + void* buffer,
  391 + unsigned long buflen);
  392 +
  393 +// Get the page label for |page_index| from |document|.
  394 +//
  395 +// document - handle to the document.
  396 +// page_index - the 0-based index of the page.
  397 +// buffer - a buffer for the page label. May be NULL.
  398 +// buflen - the length of the buffer, in bytes. May be 0.
  399 +//
  400 +// Returns the number of bytes in the page label, including trailing zeros.
  401 +//
  402 +// The |buffer| is always encoded in UTF-16LE. The |buffer| is followed by two
  403 +// bytes of zeros indicating the end of the string. If |buflen| is less than
  404 +// the returned length, or |buffer| is NULL, |buffer| will not be modified.
  405 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  406 +FPDF_GetPageLabel(FPDF_DOCUMENT document,
  407 + int page_index,
  408 + void* buffer,
  409 + unsigned long buflen);
  410 +
  411 +#ifdef __cplusplus
  412 +} // extern "C"
  413 +#endif // __cplusplus
  414 +
  415 +#endif // PUBLIC_FPDF_DOC_H_
  1 +// Copyright 2014 PDFium Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
  6 +
  7 +#ifndef PUBLIC_FPDF_EDIT_H_
  8 +#define PUBLIC_FPDF_EDIT_H_
  9 +
  10 +#include <stdint.h>
  11 +
  12 +// NOLINTNEXTLINE(build/include)
  13 +#include "fpdfview.h"
  14 +
  15 +#define FPDF_ARGB(a, r, g, b) \
  16 + ((uint32_t)(((uint32_t)(b)&0xff) | (((uint32_t)(g)&0xff) << 8) | \
  17 + (((uint32_t)(r)&0xff) << 16) | (((uint32_t)(a)&0xff) << 24)))
  18 +#define FPDF_GetBValue(argb) ((uint8_t)(argb))
  19 +#define FPDF_GetGValue(argb) ((uint8_t)(((uint16_t)(argb)) >> 8))
  20 +#define FPDF_GetRValue(argb) ((uint8_t)((argb) >> 16))
  21 +#define FPDF_GetAValue(argb) ((uint8_t)((argb) >> 24))
  22 +
  23 +// Refer to PDF Reference version 1.7 table 4.12 for all color space families.
  24 +#define FPDF_COLORSPACE_UNKNOWN 0
  25 +#define FPDF_COLORSPACE_DEVICEGRAY 1
  26 +#define FPDF_COLORSPACE_DEVICERGB 2
  27 +#define FPDF_COLORSPACE_DEVICECMYK 3
  28 +#define FPDF_COLORSPACE_CALGRAY 4
  29 +#define FPDF_COLORSPACE_CALRGB 5
  30 +#define FPDF_COLORSPACE_LAB 6
  31 +#define FPDF_COLORSPACE_ICCBASED 7
  32 +#define FPDF_COLORSPACE_SEPARATION 8
  33 +#define FPDF_COLORSPACE_DEVICEN 9
  34 +#define FPDF_COLORSPACE_INDEXED 10
  35 +#define FPDF_COLORSPACE_PATTERN 11
  36 +
  37 +// The page object constants.
  38 +#define FPDF_PAGEOBJ_UNKNOWN 0
  39 +#define FPDF_PAGEOBJ_TEXT 1
  40 +#define FPDF_PAGEOBJ_PATH 2
  41 +#define FPDF_PAGEOBJ_IMAGE 3
  42 +#define FPDF_PAGEOBJ_SHADING 4
  43 +#define FPDF_PAGEOBJ_FORM 5
  44 +
  45 +// The path segment constants.
  46 +#define FPDF_SEGMENT_UNKNOWN -1
  47 +#define FPDF_SEGMENT_LINETO 0
  48 +#define FPDF_SEGMENT_BEZIERTO 1
  49 +#define FPDF_SEGMENT_MOVETO 2
  50 +
  51 +#define FPDF_FILLMODE_NONE 0
  52 +#define FPDF_FILLMODE_ALTERNATE 1
  53 +#define FPDF_FILLMODE_WINDING 2
  54 +
  55 +#define FPDF_FONT_TYPE1 1
  56 +#define FPDF_FONT_TRUETYPE 2
  57 +
  58 +#define FPDF_LINECAP_BUTT 0
  59 +#define FPDF_LINECAP_ROUND 1
  60 +#define FPDF_LINECAP_PROJECTING_SQUARE 2
  61 +
  62 +#define FPDF_LINEJOIN_MITER 0
  63 +#define FPDF_LINEJOIN_ROUND 1
  64 +#define FPDF_LINEJOIN_BEVEL 2
  65 +
  66 +// See FPDF_SetPrintMode() for descriptions.
  67 +#define FPDF_PRINTMODE_EMF 0
  68 +#define FPDF_PRINTMODE_TEXTONLY 1
  69 +#define FPDF_PRINTMODE_POSTSCRIPT2 2
  70 +#define FPDF_PRINTMODE_POSTSCRIPT3 3
  71 +#define FPDF_PRINTMODE_POSTSCRIPT2_PASSTHROUGH 4
  72 +#define FPDF_PRINTMODE_POSTSCRIPT3_PASSTHROUGH 5
  73 +#define FPDF_PRINTMODE_EMF_IMAGE_MASKS 6
  74 +
  75 +typedef struct FPDF_IMAGEOBJ_METADATA {
  76 + // The image width in pixels.
  77 + unsigned int width;
  78 + // The image height in pixels.
  79 + unsigned int height;
  80 + // The image's horizontal pixel-per-inch.
  81 + float horizontal_dpi;
  82 + // The image's vertical pixel-per-inch.
  83 + float vertical_dpi;
  84 + // The number of bits used to represent each pixel.
  85 + unsigned int bits_per_pixel;
  86 + // The image's colorspace. See above for the list of FPDF_COLORSPACE_*.
  87 + int colorspace;
  88 + // The image's marked content ID. Useful for pairing with associated alt-text.
  89 + // A value of -1 indicates no ID.
  90 + int marked_content_id;
  91 +} FPDF_IMAGEOBJ_METADATA;
  92 +
  93 +#ifdef __cplusplus
  94 +extern "C" {
  95 +#endif // __cplusplus
  96 +
  97 +// Create a new PDF document.
  98 +//
  99 +// Returns a handle to a new document, or NULL on failure.
  100 +FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV FPDF_CreateNewDocument();
  101 +
  102 +// Create a new PDF page.
  103 +//
  104 +// document - handle to document.
  105 +// page_index - suggested 0-based index of the page to create. If it is larger
  106 +// than document's current last index(L), the created page index
  107 +// is the next available index -- L+1.
  108 +// width - the page width in points.
  109 +// height - the page height in points.
  110 +//
  111 +// Returns the handle to the new page or NULL on failure.
  112 +//
  113 +// The page should be closed with FPDF_ClosePage() when finished as
  114 +// with any other page in the document.
  115 +FPDF_EXPORT FPDF_PAGE FPDF_CALLCONV FPDFPage_New(FPDF_DOCUMENT document,
  116 + int page_index,
  117 + double width,
  118 + double height);
  119 +
  120 +// Delete the page at |page_index|.
  121 +//
  122 +// document - handle to document.
  123 +// page_index - the index of the page to delete.
  124 +FPDF_EXPORT void FPDF_CALLCONV FPDFPage_Delete(FPDF_DOCUMENT document,
  125 + int page_index);
  126 +
  127 +// Get the rotation of |page|.
  128 +//
  129 +// page - handle to a page
  130 +//
  131 +// Returns one of the following indicating the page rotation:
  132 +// 0 - No rotation.
  133 +// 1 - Rotated 90 degrees clockwise.
  134 +// 2 - Rotated 180 degrees clockwise.
  135 +// 3 - Rotated 270 degrees clockwise.
  136 +FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetRotation(FPDF_PAGE page);
  137 +
  138 +// Set rotation for |page|.
  139 +//
  140 +// page - handle to a page.
  141 +// rotate - the rotation value, one of:
  142 +// 0 - No rotation.
  143 +// 1 - Rotated 90 degrees clockwise.
  144 +// 2 - Rotated 180 degrees clockwise.
  145 +// 3 - Rotated 270 degrees clockwise.
  146 +FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetRotation(FPDF_PAGE page, int rotate);
  147 +
  148 +// Insert |page_obj| into |page|.
  149 +//
  150 +// page - handle to a page
  151 +// page_obj - handle to a page object. The |page_obj| will be automatically
  152 +// freed.
  153 +FPDF_EXPORT void FPDF_CALLCONV FPDFPage_InsertObject(FPDF_PAGE page,
  154 + FPDF_PAGEOBJECT page_obj);
  155 +
  156 +// Experimental API.
  157 +// Remove |page_obj| from |page|.
  158 +//
  159 +// page - handle to a page
  160 +// page_obj - handle to a page object to be removed.
  161 +//
  162 +// Returns TRUE on success.
  163 +//
  164 +// Ownership is transferred to the caller. Call FPDFPageObj_Destroy() to free
  165 +// it.
  166 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  167 +FPDFPage_RemoveObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_obj);
  168 +
  169 +// Get number of page objects inside |page|.
  170 +//
  171 +// page - handle to a page.
  172 +//
  173 +// Returns the number of objects in |page|.
  174 +FPDF_EXPORT int FPDF_CALLCONV FPDFPage_CountObjects(FPDF_PAGE page);
  175 +
  176 +// Get object in |page| at |index|.
  177 +//
  178 +// page - handle to a page.
  179 +// index - the index of a page object.
  180 +//
  181 +// Returns the handle to the page object, or NULL on failed.
  182 +FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPage_GetObject(FPDF_PAGE page,
  183 + int index);
  184 +
  185 +// Checks if |page| contains transparency.
  186 +//
  187 +// page - handle to a page.
  188 +//
  189 +// Returns TRUE if |page| contains transparency.
  190 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_HasTransparency(FPDF_PAGE page);
  191 +
  192 +// Generate the content of |page|.
  193 +//
  194 +// page - handle to a page.
  195 +//
  196 +// Returns TRUE on success.
  197 +//
  198 +// Before you save the page to a file, or reload the page, you must call
  199 +// |FPDFPage_GenerateContent| or any changes to |page| will be lost.
  200 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GenerateContent(FPDF_PAGE page);
  201 +
  202 +// Destroy |page_obj| by releasing its resources. |page_obj| must have been
  203 +// created by FPDFPageObj_CreateNew{Path|Rect}() or
  204 +// FPDFPageObj_New{Text|Image}Obj(). This function must be called on
  205 +// newly-created objects if they are not added to a page through
  206 +// FPDFPage_InsertObject() or to an annotation through FPDFAnnot_AppendObject().
  207 +//
  208 +// page_obj - handle to a page object.
  209 +FPDF_EXPORT void FPDF_CALLCONV FPDFPageObj_Destroy(FPDF_PAGEOBJECT page_obj);
  210 +
  211 +// Checks if |page_object| contains transparency.
  212 +//
  213 +// page_object - handle to a page object.
  214 +//
  215 +// Returns TRUE if |page_object| contains transparency.
  216 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  217 +FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT page_object);
  218 +
  219 +// Get type of |page_object|.
  220 +//
  221 +// page_object - handle to a page object.
  222 +//
  223 +// Returns one of the FPDF_PAGEOBJ_* values on success, FPDF_PAGEOBJ_UNKNOWN on
  224 +// error.
  225 +FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_GetType(FPDF_PAGEOBJECT page_object);
  226 +
  227 +// Transform |page_object| by the given matrix.
  228 +//
  229 +// page_object - handle to a page object.
  230 +// a - matrix value.
  231 +// b - matrix value.
  232 +// c - matrix value.
  233 +// d - matrix value.
  234 +// e - matrix value.
  235 +// f - matrix value.
  236 +//
  237 +// The matrix is composed as:
  238 +// |a c e|
  239 +// |b d f|
  240 +// and can be used to scale, rotate, shear and translate the |page_object|.
  241 +FPDF_EXPORT void FPDF_CALLCONV
  242 +FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
  243 + double a,
  244 + double b,
  245 + double c,
  246 + double d,
  247 + double e,
  248 + double f);
  249 +
  250 +// Transform all annotations in |page|.
  251 +//
  252 +// page - handle to a page.
  253 +// a - matrix value.
  254 +// b - matrix value.
  255 +// c - matrix value.
  256 +// d - matrix value.
  257 +// e - matrix value.
  258 +// f - matrix value.
  259 +//
  260 +// The matrix is composed as:
  261 +// |a c e|
  262 +// |b d f|
  263 +// and can be used to scale, rotate, shear and translate the |page| annotations.
  264 +FPDF_EXPORT void FPDF_CALLCONV FPDFPage_TransformAnnots(FPDF_PAGE page,
  265 + double a,
  266 + double b,
  267 + double c,
  268 + double d,
  269 + double e,
  270 + double f);
  271 +
  272 +// Create a new image object.
  273 +//
  274 +// document - handle to a document.
  275 +//
  276 +// Returns a handle to a new image object.
  277 +FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
  278 +FPDFPageObj_NewImageObj(FPDF_DOCUMENT document);
  279 +
  280 +// Experimental API.
  281 +// Get number of content marks in |page_object|.
  282 +//
  283 +// page_object - handle to a page object.
  284 +//
  285 +// Returns the number of content marks in |page_object|, or -1 in case of
  286 +// failure.
  287 +FPDF_EXPORT int FPDF_CALLCONV
  288 +FPDFPageObj_CountMarks(FPDF_PAGEOBJECT page_object);
  289 +
  290 +// Experimental API.
  291 +// Get content mark in |page_object| at |index|.
  292 +//
  293 +// page_object - handle to a page object.
  294 +// index - the index of a page object.
  295 +//
  296 +// Returns the handle to the content mark, or NULL on failure. The handle is
  297 +// still owned by the library, and it should not be freed directly. It becomes
  298 +// invalid if the page object is destroyed, either directly or indirectly by
  299 +// unloading the page.
  300 +FPDF_EXPORT FPDF_PAGEOBJECTMARK FPDF_CALLCONV
  301 +FPDFPageObj_GetMark(FPDF_PAGEOBJECT page_object, unsigned long index);
  302 +
  303 +// Experimental API.
  304 +// Add a new content mark to a |page_object|.
  305 +//
  306 +// page_object - handle to a page object.
  307 +// name - the name (tag) of the mark.
  308 +//
  309 +// Returns the handle to the content mark, or NULL on failure. The handle is
  310 +// still owned by the library, and it should not be freed directly. It becomes
  311 +// invalid if the page object is destroyed, either directly or indirectly by
  312 +// unloading the page.
  313 +FPDF_EXPORT FPDF_PAGEOBJECTMARK FPDF_CALLCONV
  314 +FPDFPageObj_AddMark(FPDF_PAGEOBJECT page_object, FPDF_BYTESTRING name);
  315 +
  316 +// Experimental API.
  317 +// Removes a content |mark| from a |page_object|.
  318 +// The mark handle will be invalid after the removal.
  319 +//
  320 +// page_object - handle to a page object.
  321 +// mark - handle to a content mark in that object to remove.
  322 +//
  323 +// Returns TRUE if the operation succeeded, FALSE if it failed.
  324 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  325 +FPDFPageObj_RemoveMark(FPDF_PAGEOBJECT page_object, FPDF_PAGEOBJECTMARK mark);
  326 +
  327 +// Experimental API.
  328 +// Get the name of a content mark.
  329 +//
  330 +// mark - handle to a content mark.
  331 +// buffer - buffer for holding the returned name in UTF-16LE. This is only
  332 +// modified if |buflen| is longer than the length of the name.
  333 +// Optional, pass null to just retrieve the size of the buffer
  334 +// needed.
  335 +// buflen - length of the buffer.
  336 +// out_buflen - pointer to variable that will receive the minimum buffer size
  337 +// to contain the name. Not filled if FALSE is returned.
  338 +//
  339 +// Returns TRUE if the operation succeeded, FALSE if it failed.
  340 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  341 +FPDFPageObjMark_GetName(FPDF_PAGEOBJECTMARK mark,
  342 + void* buffer,
  343 + unsigned long buflen,
  344 + unsigned long* out_buflen);
  345 +
  346 +// Experimental API.
  347 +// Get the number of key/value pair parameters in |mark|.
  348 +//
  349 +// mark - handle to a content mark.
  350 +//
  351 +// Returns the number of key/value pair parameters |mark|, or -1 in case of
  352 +// failure.
  353 +FPDF_EXPORT int FPDF_CALLCONV
  354 +FPDFPageObjMark_CountParams(FPDF_PAGEOBJECTMARK mark);
  355 +
  356 +// Experimental API.
  357 +// Get the key of a property in a content mark.
  358 +//
  359 +// mark - handle to a content mark.
  360 +// index - index of the property.
  361 +// buffer - buffer for holding the returned key in UTF-16LE. This is only
  362 +// modified if |buflen| is longer than the length of the key.
  363 +// Optional, pass null to just retrieve the size of the buffer
  364 +// needed.
  365 +// buflen - length of the buffer.
  366 +// out_buflen - pointer to variable that will receive the minimum buffer size
  367 +// to contain the key. Not filled if FALSE is returned.
  368 +//
  369 +// Returns TRUE if the operation was successful, FALSE otherwise.
  370 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  371 +FPDFPageObjMark_GetParamKey(FPDF_PAGEOBJECTMARK mark,
  372 + unsigned long index,
  373 + void* buffer,
  374 + unsigned long buflen,
  375 + unsigned long* out_buflen);
  376 +
  377 +// Experimental API.
  378 +// Get the type of the value of a property in a content mark by key.
  379 +//
  380 +// mark - handle to a content mark.
  381 +// key - string key of the property.
  382 +//
  383 +// Returns the type of the value, or FPDF_OBJECT_UNKNOWN in case of failure.
  384 +FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
  385 +FPDFPageObjMark_GetParamValueType(FPDF_PAGEOBJECTMARK mark,
  386 + FPDF_BYTESTRING key);
  387 +
  388 +// Experimental API.
  389 +// Get the value of a number property in a content mark by key as int.
  390 +// FPDFPageObjMark_GetParamValueType() should have returned FPDF_OBJECT_NUMBER
  391 +// for this property.
  392 +//
  393 +// mark - handle to a content mark.
  394 +// key - string key of the property.
  395 +// out_value - pointer to variable that will receive the value. Not filled if
  396 +// false is returned.
  397 +//
  398 +// Returns TRUE if the key maps to a number value, FALSE otherwise.
  399 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  400 +FPDFPageObjMark_GetParamIntValue(FPDF_PAGEOBJECTMARK mark,
  401 + FPDF_BYTESTRING key,
  402 + int* out_value);
  403 +
  404 +// Experimental API.
  405 +// Get the value of a string property in a content mark by key.
  406 +//
  407 +// mark - handle to a content mark.
  408 +// key - string key of the property.
  409 +// buffer - buffer for holding the returned value in UTF-16LE. This is
  410 +// only modified if |buflen| is longer than the length of the
  411 +// value.
  412 +// Optional, pass null to just retrieve the size of the buffer
  413 +// needed.
  414 +// buflen - length of the buffer.
  415 +// out_buflen - pointer to variable that will receive the minimum buffer size
  416 +// to contain the value. Not filled if FALSE is returned.
  417 +//
  418 +// Returns TRUE if the key maps to a string/blob value, FALSE otherwise.
  419 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  420 +FPDFPageObjMark_GetParamStringValue(FPDF_PAGEOBJECTMARK mark,
  421 + FPDF_BYTESTRING key,
  422 + void* buffer,
  423 + unsigned long buflen,
  424 + unsigned long* out_buflen);
  425 +
  426 +// Experimental API.
  427 +// Get the value of a blob property in a content mark by key.
  428 +//
  429 +// mark - handle to a content mark.
  430 +// key - string key of the property.
  431 +// buffer - buffer for holding the returned value. This is only modified
  432 +// if |buflen| is at least as long as the length of the value.
  433 +// Optional, pass null to just retrieve the size of the buffer
  434 +// needed.
  435 +// buflen - length of the buffer.
  436 +// out_buflen - pointer to variable that will receive the minimum buffer size
  437 +// to contain the value. Not filled if FALSE is returned.
  438 +//
  439 +// Returns TRUE if the key maps to a string/blob value, FALSE otherwise.
  440 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  441 +FPDFPageObjMark_GetParamBlobValue(FPDF_PAGEOBJECTMARK mark,
  442 + FPDF_BYTESTRING key,
  443 + void* buffer,
  444 + unsigned long buflen,
  445 + unsigned long* out_buflen);
  446 +
  447 +// Experimental API.
  448 +// Set the value of an int property in a content mark by key. If a parameter
  449 +// with key |key| exists, its value is set to |value|. Otherwise, it is added as
  450 +// a new parameter.
  451 +//
  452 +// document - handle to the document.
  453 +// page_object - handle to the page object with the mark.
  454 +// mark - handle to a content mark.
  455 +// key - string key of the property.
  456 +// value - int value to set.
  457 +//
  458 +// Returns TRUE if the operation succeeded, FALSE otherwise.
  459 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  460 +FPDFPageObjMark_SetIntParam(FPDF_DOCUMENT document,
  461 + FPDF_PAGEOBJECT page_object,
  462 + FPDF_PAGEOBJECTMARK mark,
  463 + FPDF_BYTESTRING key,
  464 + int value);
  465 +
  466 +// Experimental API.
  467 +// Set the value of a string property in a content mark by key. If a parameter
  468 +// with key |key| exists, its value is set to |value|. Otherwise, it is added as
  469 +// a new parameter.
  470 +//
  471 +// document - handle to the document.
  472 +// page_object - handle to the page object with the mark.
  473 +// mark - handle to a content mark.
  474 +// key - string key of the property.
  475 +// value - string value to set.
  476 +//
  477 +// Returns TRUE if the operation succeeded, FALSE otherwise.
  478 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  479 +FPDFPageObjMark_SetStringParam(FPDF_DOCUMENT document,
  480 + FPDF_PAGEOBJECT page_object,
  481 + FPDF_PAGEOBJECTMARK mark,
  482 + FPDF_BYTESTRING key,
  483 + FPDF_BYTESTRING value);
  484 +
  485 +// Experimental API.
  486 +// Set the value of a blob property in a content mark by key. If a parameter
  487 +// with key |key| exists, its value is set to |value|. Otherwise, it is added as
  488 +// a new parameter.
  489 +//
  490 +// document - handle to the document.
  491 +// page_object - handle to the page object with the mark.
  492 +// mark - handle to a content mark.
  493 +// key - string key of the property.
  494 +// value - pointer to blob value to set.
  495 +// value_len - size in bytes of |value|.
  496 +//
  497 +// Returns TRUE if the operation succeeded, FALSE otherwise.
  498 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  499 +FPDFPageObjMark_SetBlobParam(FPDF_DOCUMENT document,
  500 + FPDF_PAGEOBJECT page_object,
  501 + FPDF_PAGEOBJECTMARK mark,
  502 + FPDF_BYTESTRING key,
  503 + void* value,
  504 + unsigned long value_len);
  505 +
  506 +// Experimental API.
  507 +// Removes a property from a content mark by key.
  508 +//
  509 +// page_object - handle to the page object with the mark.
  510 +// mark - handle to a content mark.
  511 +// key - string key of the property.
  512 +//
  513 +// Returns TRUE if the operation succeeded, FALSE otherwise.
  514 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  515 +FPDFPageObjMark_RemoveParam(FPDF_PAGEOBJECT page_object,
  516 + FPDF_PAGEOBJECTMARK mark,
  517 + FPDF_BYTESTRING key);
  518 +
  519 +// Load an image from a JPEG image file and then set it into |image_object|.
  520 +//
  521 +// pages - pointer to the start of all loaded pages, may be NULL.
  522 +// count - number of |pages|, may be 0.
  523 +// image_object - handle to an image object.
  524 +// file_access - file access handler which specifies the JPEG image file.
  525 +//
  526 +// Returns TRUE on success.
  527 +//
  528 +// The image object might already have an associated image, which is shared and
  529 +// cached by the loaded pages. In that case, we need to clear the cached image
  530 +// for all the loaded pages. Pass |pages| and page count (|count|) to this API
  531 +// to clear the image cache. If the image is not previously shared, or NULL is a
  532 +// valid |pages| value.
  533 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  534 +FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages,
  535 + int count,
  536 + FPDF_PAGEOBJECT image_object,
  537 + FPDF_FILEACCESS* file_access);
  538 +
  539 +// Load an image from a JPEG image file and then set it into |image_object|.
  540 +//
  541 +// pages - pointer to the start of all loaded pages, may be NULL.
  542 +// count - number of |pages|, may be 0.
  543 +// image_object - handle to an image object.
  544 +// file_access - file access handler which specifies the JPEG image file.
  545 +//
  546 +// Returns TRUE on success.
  547 +//
  548 +// The image object might already have an associated image, which is shared and
  549 +// cached by the loaded pages. In that case, we need to clear the cached image
  550 +// for all the loaded pages. Pass |pages| and page count (|count|) to this API
  551 +// to clear the image cache. If the image is not previously shared, or NULL is a
  552 +// valid |pages| value. This function loads the JPEG image inline, so the image
  553 +// content is copied to the file. This allows |file_access| and its associated
  554 +// data to be deleted after this function returns.
  555 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  556 +FPDFImageObj_LoadJpegFileInline(FPDF_PAGE* pages,
  557 + int count,
  558 + FPDF_PAGEOBJECT image_object,
  559 + FPDF_FILEACCESS* file_access);
  560 +
  561 +// Experimental API.
  562 +// Get the transform matrix of an image object.
  563 +//
  564 +// image_object - handle to an image object.
  565 +// a - matrix value.
  566 +// b - matrix value.
  567 +// c - matrix value.
  568 +// d - matrix value.
  569 +// e - matrix value.
  570 +// f - matrix value.
  571 +//
  572 +// The matrix is composed as:
  573 +// |a c e|
  574 +// |b d f|
  575 +// and used to scale, rotate, shear and translate the image.
  576 +//
  577 +// Returns TRUE on success.
  578 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  579 +FPDFImageObj_GetMatrix(FPDF_PAGEOBJECT image_object,
  580 + double* a,
  581 + double* b,
  582 + double* c,
  583 + double* d,
  584 + double* e,
  585 + double* f);
  586 +
  587 +// Set the transform matrix of |image_object|.
  588 +//
  589 +// image_object - handle to an image object.
  590 +// a - matrix value.
  591 +// b - matrix value.
  592 +// c - matrix value.
  593 +// d - matrix value.
  594 +// e - matrix value.
  595 +// f - matrix value.
  596 +//
  597 +// The matrix is composed as:
  598 +// |a c e|
  599 +// |b d f|
  600 +// and can be used to scale, rotate, shear and translate the |image_object|.
  601 +//
  602 +// Returns TRUE on success.
  603 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  604 +FPDFImageObj_SetMatrix(FPDF_PAGEOBJECT image_object,
  605 + double a,
  606 + double b,
  607 + double c,
  608 + double d,
  609 + double e,
  610 + double f);
  611 +
  612 +// Set |bitmap| to |image_object|.
  613 +//
  614 +// pages - pointer to the start of all loaded pages, may be NULL.
  615 +// count - number of |pages|, may be 0.
  616 +// image_object - handle to an image object.
  617 +// bitmap - handle of the bitmap.
  618 +//
  619 +// Returns TRUE on success.
  620 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  621 +FPDFImageObj_SetBitmap(FPDF_PAGE* pages,
  622 + int count,
  623 + FPDF_PAGEOBJECT image_object,
  624 + FPDF_BITMAP bitmap);
  625 +
  626 +// Get a bitmap rasterization of |image_object|. FPDFImageObj_GetBitmap() only
  627 +// operates on |image_object| and does not take the associated image mask into
  628 +// account. It also ignores the matrix for |image_object|.
  629 +// The returned bitmap will be owned by the caller, and FPDFBitmap_Destroy()
  630 +// must be called on the returned bitmap when it is no longer needed.
  631 +//
  632 +// image_object - handle to an image object.
  633 +//
  634 +// Returns the bitmap.
  635 +FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV
  636 +FPDFImageObj_GetBitmap(FPDF_PAGEOBJECT image_object);
  637 +
  638 +// Experimental API.
  639 +// Get a bitmap rasterization of |image_object| that takes the image mask and
  640 +// image matrix into account. To render correctly, the caller must provide the
  641 +// |document| associated with |image_object|. If there is a |page| associated
  642 +// with |image_object| the caller should provide that as well.
  643 +// The returned bitmap will be owned by the caller, and FPDFBitmap_Destroy()
  644 +// must be called on the returned bitmap when it is no longer needed.
  645 +//
  646 +// document - handle to a document associated with |image_object|.
  647 +// page - handle to an optional page associated with |image_object|.
  648 +// image_object - handle to an image object.
  649 +//
  650 +// Returns the bitmap.
  651 +FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV
  652 +FPDFImageObj_GetRenderedBitmap(FPDF_DOCUMENT document,
  653 + FPDF_PAGE page,
  654 + FPDF_PAGEOBJECT image_object);
  655 +
  656 +// Get the decoded image data of |image_object|. The decoded data is the
  657 +// uncompressed image data, i.e. the raw image data after having all filters
  658 +// applied. |buffer| is only modified if |buflen| is longer than the length of
  659 +// the decoded image data.
  660 +//
  661 +// image_object - handle to an image object.
  662 +// buffer - buffer for holding the decoded image data.
  663 +// buflen - length of the buffer in bytes.
  664 +//
  665 +// Returns the length of the decoded image data.
  666 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  667 +FPDFImageObj_GetImageDataDecoded(FPDF_PAGEOBJECT image_object,
  668 + void* buffer,
  669 + unsigned long buflen);
  670 +
  671 +// Get the raw image data of |image_object|. The raw data is the image data as
  672 +// stored in the PDF without applying any filters. |buffer| is only modified if
  673 +// |buflen| is longer than the length of the raw image data.
  674 +//
  675 +// image_object - handle to an image object.
  676 +// buffer - buffer for holding the raw image data.
  677 +// buflen - length of the buffer in bytes.
  678 +//
  679 +// Returns the length of the raw image data.
  680 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  681 +FPDFImageObj_GetImageDataRaw(FPDF_PAGEOBJECT image_object,
  682 + void* buffer,
  683 + unsigned long buflen);
  684 +
  685 +// Get the number of filters (i.e. decoders) of the image in |image_object|.
  686 +//
  687 +// image_object - handle to an image object.
  688 +//
  689 +// Returns the number of |image_object|'s filters.
  690 +FPDF_EXPORT int FPDF_CALLCONV
  691 +FPDFImageObj_GetImageFilterCount(FPDF_PAGEOBJECT image_object);
  692 +
  693 +// Get the filter at |index| of |image_object|'s list of filters. Note that the
  694 +// filters need to be applied in order, i.e. the first filter should be applied
  695 +// first, then the second, etc. |buffer| is only modified if |buflen| is longer
  696 +// than the length of the filter string.
  697 +//
  698 +// image_object - handle to an image object.
  699 +// index - the index of the filter requested.
  700 +// buffer - buffer for holding filter string, encoded in UTF-8.
  701 +// buflen - length of the buffer.
  702 +//
  703 +// Returns the length of the filter string.
  704 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  705 +FPDFImageObj_GetImageFilter(FPDF_PAGEOBJECT image_object,
  706 + int index,
  707 + void* buffer,
  708 + unsigned long buflen);
  709 +
  710 +// Get the image metadata of |image_object|, including dimension, DPI, bits per
  711 +// pixel, and colorspace. If the |image_object| is not an image object or if it
  712 +// does not have an image, then the return value will be false. Otherwise,
  713 +// failure to retrieve any specific parameter would result in its value being 0.
  714 +//
  715 +// image_object - handle to an image object.
  716 +// page - handle to the page that |image_object| is on. Required for
  717 +// retrieving the image's bits per pixel and colorspace.
  718 +// metadata - receives the image metadata; must not be NULL.
  719 +//
  720 +// Returns true if successful.
  721 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  722 +FPDFImageObj_GetImageMetadata(FPDF_PAGEOBJECT image_object,
  723 + FPDF_PAGE page,
  724 + FPDF_IMAGEOBJ_METADATA* metadata);
  725 +
  726 +// Create a new path object at an initial position.
  727 +//
  728 +// x - initial horizontal position.
  729 +// y - initial vertical position.
  730 +//
  731 +// Returns a handle to a new path object.
  732 +FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPageObj_CreateNewPath(float x,
  733 + float y);
  734 +
  735 +// Create a closed path consisting of a rectangle.
  736 +//
  737 +// x - horizontal position for the left boundary of the rectangle.
  738 +// y - vertical position for the bottom boundary of the rectangle.
  739 +// w - width of the rectangle.
  740 +// h - height of the rectangle.
  741 +//
  742 +// Returns a handle to the new path object.
  743 +FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPageObj_CreateNewRect(float x,
  744 + float y,
  745 + float w,
  746 + float h);
  747 +
  748 +// Get the bounding box of |page_object|.
  749 +//
  750 +// page_object - handle to a page object.
  751 +// left - pointer where the left coordinate will be stored
  752 +// bottom - pointer where the bottom coordinate will be stored
  753 +// right - pointer where the right coordinate will be stored
  754 +// top - pointer where the top coordinate will be stored
  755 +//
  756 +// Returns TRUE on success.
  757 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  758 +FPDFPageObj_GetBounds(FPDF_PAGEOBJECT page_object,
  759 + float* left,
  760 + float* bottom,
  761 + float* right,
  762 + float* top);
  763 +
  764 +// Set the blend mode of |page_object|.
  765 +//
  766 +// page_object - handle to a page object.
  767 +// blend_mode - string containing the blend mode.
  768 +//
  769 +// Blend mode can be one of following: Color, ColorBurn, ColorDodge, Darken,
  770 +// Difference, Exclusion, HardLight, Hue, Lighten, Luminosity, Multiply, Normal,
  771 +// Overlay, Saturation, Screen, SoftLight
  772 +FPDF_EXPORT void FPDF_CALLCONV
  773 +FPDFPageObj_SetBlendMode(FPDF_PAGEOBJECT page_object,
  774 + FPDF_BYTESTRING blend_mode);
  775 +
  776 +// Set the stroke RGBA of a page object. Range of values: 0 - 255.
  777 +//
  778 +// page_object - the handle to the page object.
  779 +// R - the red component for the object's stroke color.
  780 +// G - the green component for the object's stroke color.
  781 +// B - the blue component for the object's stroke color.
  782 +// A - the stroke alpha for the object.
  783 +//
  784 +// Returns TRUE on success.
  785 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  786 +FPDFPageObj_SetStrokeColor(FPDF_PAGEOBJECT page_object,
  787 + unsigned int R,
  788 + unsigned int G,
  789 + unsigned int B,
  790 + unsigned int A);
  791 +
  792 +// Get the stroke RGBA of a page object. Range of values: 0 - 255.
  793 +//
  794 +// page_object - the handle to the page object.
  795 +// R - the red component of the path stroke color.
  796 +// G - the green component of the object's stroke color.
  797 +// B - the blue component of the object's stroke color.
  798 +// A - the stroke alpha of the object.
  799 +//
  800 +// Returns TRUE on success.
  801 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  802 +FPDFPageObj_GetStrokeColor(FPDF_PAGEOBJECT page_object,
  803 + unsigned int* R,
  804 + unsigned int* G,
  805 + unsigned int* B,
  806 + unsigned int* A);
  807 +
  808 +// Set the stroke width of a page object.
  809 +//
  810 +// path - the handle to the page object.
  811 +// width - the width of the stroke.
  812 +//
  813 +// Returns TRUE on success
  814 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  815 +FPDFPageObj_SetStrokeWidth(FPDF_PAGEOBJECT page_object, float width);
  816 +
  817 +// Experimental API.
  818 +// Get the stroke width of a page object.
  819 +//
  820 +// path - the handle to the page object.
  821 +// width - the width of the stroke.
  822 +//
  823 +// Returns TRUE on success
  824 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  825 +FPDFPageObj_GetStrokeWidth(FPDF_PAGEOBJECT page_object, float* width);
  826 +
  827 +// Get the line join of |page_object|.
  828 +//
  829 +// page_object - handle to a page object.
  830 +//
  831 +// Returns the line join, or -1 on failure.
  832 +// Line join can be one of following: FPDF_LINEJOIN_MITER, FPDF_LINEJOIN_ROUND,
  833 +// FPDF_LINEJOIN_BEVEL
  834 +FPDF_EXPORT int FPDF_CALLCONV
  835 +FPDFPageObj_GetLineJoin(FPDF_PAGEOBJECT page_object);
  836 +
  837 +// Set the line join of |page_object|.
  838 +//
  839 +// page_object - handle to a page object.
  840 +// line_join - line join
  841 +//
  842 +// Line join can be one of following: FPDF_LINEJOIN_MITER, FPDF_LINEJOIN_ROUND,
  843 +// FPDF_LINEJOIN_BEVEL
  844 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  845 +FPDFPageObj_SetLineJoin(FPDF_PAGEOBJECT page_object, int line_join);
  846 +
  847 +// Get the line cap of |page_object|.
  848 +//
  849 +// page_object - handle to a page object.
  850 +//
  851 +// Returns the line cap, or -1 on failure.
  852 +// Line cap can be one of following: FPDF_LINECAP_BUTT, FPDF_LINECAP_ROUND,
  853 +// FPDF_LINECAP_PROJECTING_SQUARE
  854 +FPDF_EXPORT int FPDF_CALLCONV
  855 +FPDFPageObj_GetLineCap(FPDF_PAGEOBJECT page_object);
  856 +
  857 +// Set the line cap of |page_object|.
  858 +//
  859 +// page_object - handle to a page object.
  860 +// line_cap - line cap
  861 +//
  862 +// Line cap can be one of following: FPDF_LINECAP_BUTT, FPDF_LINECAP_ROUND,
  863 +// FPDF_LINECAP_PROJECTING_SQUARE
  864 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  865 +FPDFPageObj_SetLineCap(FPDF_PAGEOBJECT page_object, int line_cap);
  866 +
  867 +// Set the fill RGBA of a page object. Range of values: 0 - 255.
  868 +//
  869 +// page_object - the handle to the page object.
  870 +// R - the red component for the object's fill color.
  871 +// G - the green component for the object's fill color.
  872 +// B - the blue component for the object's fill color.
  873 +// A - the fill alpha for the object.
  874 +//
  875 +// Returns TRUE on success.
  876 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  877 +FPDFPageObj_SetFillColor(FPDF_PAGEOBJECT page_object,
  878 + unsigned int R,
  879 + unsigned int G,
  880 + unsigned int B,
  881 + unsigned int A);
  882 +
  883 +// Get the fill RGBA of a page object. Range of values: 0 - 255.
  884 +//
  885 +// page_object - the handle to the page object.
  886 +// R - the red component of the object's fill color.
  887 +// G - the green component of the object's fill color.
  888 +// B - the blue component of the object's fill color.
  889 +// A - the fill alpha of the object.
  890 +//
  891 +// Returns TRUE on success.
  892 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  893 +FPDFPageObj_GetFillColor(FPDF_PAGEOBJECT page_object,
  894 + unsigned int* R,
  895 + unsigned int* G,
  896 + unsigned int* B,
  897 + unsigned int* A);
  898 +
  899 +// Experimental API.
  900 +// Get number of segments inside |path|.
  901 +//
  902 +// path - handle to a path.
  903 +//
  904 +// A segment is a command, created by e.g. FPDFPath_MoveTo(),
  905 +// FPDFPath_LineTo() or FPDFPath_BezierTo().
  906 +//
  907 +// Returns the number of objects in |path| or -1 on failure.
  908 +FPDF_EXPORT int FPDF_CALLCONV FPDFPath_CountSegments(FPDF_PAGEOBJECT path);
  909 +
  910 +// Experimental API.
  911 +// Get segment in |path| at |index|.
  912 +//
  913 +// path - handle to a path.
  914 +// index - the index of a segment.
  915 +//
  916 +// Returns the handle to the segment, or NULL on faiure.
  917 +FPDF_EXPORT FPDF_PATHSEGMENT FPDF_CALLCONV
  918 +FPDFPath_GetPathSegment(FPDF_PAGEOBJECT path, int index);
  919 +
  920 +// Experimental API.
  921 +// Get coordinates of |segment|.
  922 +//
  923 +// segment - handle to a segment.
  924 +// x - the horizontal position of the segment.
  925 +// y - the vertical position of the segment.
  926 +//
  927 +// Returns TRUE on success, otherwise |x| and |y| is not set.
  928 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  929 +FPDFPathSegment_GetPoint(FPDF_PATHSEGMENT segment, float* x, float* y);
  930 +
  931 +// Experimental API.
  932 +// Get type of |segment|.
  933 +//
  934 +// segment - handle to a segment.
  935 +//
  936 +// Returns one of the FPDF_SEGMENT_* values on success,
  937 +// FPDF_SEGMENT_UNKNOWN on error.
  938 +FPDF_EXPORT int FPDF_CALLCONV FPDFPathSegment_GetType(FPDF_PATHSEGMENT segment);
  939 +
  940 +// Experimental API.
  941 +// Gets if the |segment| closes the current subpath of a given path.
  942 +//
  943 +// segment - handle to a segment.
  944 +//
  945 +// Returns close flag for non-NULL segment, FALSE otherwise.
  946 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  947 +FPDFPathSegment_GetClose(FPDF_PATHSEGMENT segment);
  948 +
  949 +// Move a path's current point.
  950 +//
  951 +// path - the handle to the path object.
  952 +// x - the horizontal position of the new current point.
  953 +// y - the vertical position of the new current point.
  954 +//
  955 +// Note that no line will be created between the previous current point and the
  956 +// new one.
  957 +//
  958 +// Returns TRUE on success
  959 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_MoveTo(FPDF_PAGEOBJECT path,
  960 + float x,
  961 + float y);
  962 +
  963 +// Add a line between the current point and a new point in the path.
  964 +//
  965 +// path - the handle to the path object.
  966 +// x - the horizontal position of the new point.
  967 +// y - the vertical position of the new point.
  968 +//
  969 +// The path's current point is changed to (x, y).
  970 +//
  971 +// Returns TRUE on success
  972 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_LineTo(FPDF_PAGEOBJECT path,
  973 + float x,
  974 + float y);
  975 +
  976 +// Add a cubic Bezier curve to the given path, starting at the current point.
  977 +//
  978 +// path - the handle to the path object.
  979 +// x1 - the horizontal position of the first Bezier control point.
  980 +// y1 - the vertical position of the first Bezier control point.
  981 +// x2 - the horizontal position of the second Bezier control point.
  982 +// y2 - the vertical position of the second Bezier control point.
  983 +// x3 - the horizontal position of the ending point of the Bezier curve.
  984 +// y3 - the vertical position of the ending point of the Bezier curve.
  985 +//
  986 +// Returns TRUE on success
  987 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_BezierTo(FPDF_PAGEOBJECT path,
  988 + float x1,
  989 + float y1,
  990 + float x2,
  991 + float y2,
  992 + float x3,
  993 + float y3);
  994 +
  995 +// Close the current subpath of a given path.
  996 +//
  997 +// path - the handle to the path object.
  998 +//
  999 +// This will add a line between the current point and the initial point of the
  1000 +// subpath, thus terminating the current subpath.
  1001 +//
  1002 +// Returns TRUE on success
  1003 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_Close(FPDF_PAGEOBJECT path);
  1004 +
  1005 +// Set the drawing mode of a path.
  1006 +//
  1007 +// path - the handle to the path object.
  1008 +// fillmode - the filling mode to be set: one of the FPDF_FILLMODE_* flags.
  1009 +// stroke - a boolean specifying if the path should be stroked or not.
  1010 +//
  1011 +// Returns TRUE on success
  1012 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetDrawMode(FPDF_PAGEOBJECT path,
  1013 + int fillmode,
  1014 + FPDF_BOOL stroke);
  1015 +
  1016 +// Experimental API.
  1017 +// Get the drawing mode of a path.
  1018 +//
  1019 +// path - the handle to the path object.
  1020 +// fillmode - the filling mode of the path: one of the FPDF_FILLMODE_* flags.
  1021 +// stroke - a boolean specifying if the path is stroked or not.
  1022 +//
  1023 +// Returns TRUE on success
  1024 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_GetDrawMode(FPDF_PAGEOBJECT path,
  1025 + int* fillmode,
  1026 + FPDF_BOOL* stroke);
  1027 +
  1028 +// Experimental API.
  1029 +// Get the transform matrix of a path.
  1030 +//
  1031 +// path - handle to a path.
  1032 +// matrix - pointer to struct to receive the matrix value.
  1033 +//
  1034 +// The matrix is composed as:
  1035 +// |a c e|
  1036 +// |b d f|
  1037 +// and used to scale, rotate, shear and translate the path.
  1038 +//
  1039 +// Returns TRUE on success.
  1040 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_GetMatrix(FPDF_PAGEOBJECT path,
  1041 + FS_MATRIX* matrix);
  1042 +
  1043 +// Experimental API.
  1044 +// Set the transform matrix of a path.
  1045 +//
  1046 +// path - handle to a path.
  1047 +// matrix - pointer to struct with the matrix value.
  1048 +//
  1049 +// The matrix is composed as:
  1050 +// |a c e|
  1051 +// |b d f|
  1052 +// and can be used to scale, rotate, shear and translate the path.
  1053 +//
  1054 +// Returns TRUE on success.
  1055 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetMatrix(FPDF_PAGEOBJECT path,
  1056 + const FS_MATRIX* matrix);
  1057 +
  1058 +// Create a new text object using one of the standard PDF fonts.
  1059 +//
  1060 +// document - handle to the document.
  1061 +// font - string containing the font name, without spaces.
  1062 +// font_size - the font size for the new text object.
  1063 +//
  1064 +// Returns a handle to a new text object, or NULL on failure
  1065 +FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
  1066 +FPDFPageObj_NewTextObj(FPDF_DOCUMENT document,
  1067 + FPDF_BYTESTRING font,
  1068 + float font_size);
  1069 +
  1070 +// Set the text for a textobject. If it had text, it will be replaced.
  1071 +//
  1072 +// text_object - handle to the text object.
  1073 +// text - the UTF-16LE encoded string containing the text to be added.
  1074 +//
  1075 +// Returns TRUE on success
  1076 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  1077 +FPDFText_SetText(FPDF_PAGEOBJECT text_object, FPDF_WIDESTRING text);
  1078 +
  1079 +// Returns a font object loaded from a stream of data. The font is loaded
  1080 +// into the document.
  1081 +//
  1082 +// document - handle to the document.
  1083 +// data - the stream of data, which will be copied by the font object.
  1084 +// size - size of the stream, in bytes.
  1085 +// font_type - FPDF_FONT_TYPE1 or FPDF_FONT_TRUETYPE depending on the font
  1086 +// type.
  1087 +// cid - a boolean specifying if the font is a CID font or not.
  1088 +//
  1089 +// The loaded font can be closed using FPDFFont_Close.
  1090 +//
  1091 +// Returns NULL on failure
  1092 +FPDF_EXPORT FPDF_FONT FPDF_CALLCONV FPDFText_LoadFont(FPDF_DOCUMENT document,
  1093 + const uint8_t* data,
  1094 + uint32_t size,
  1095 + int font_type,
  1096 + FPDF_BOOL cid);
  1097 +
  1098 +// Experimental API.
  1099 +// Loads one of the standard 14 fonts per PDF spec 1.7 page 416. The preferred
  1100 +// way of using font style is using a dash to separate the name from the style,
  1101 +// for example 'Helvetica-BoldItalic'.
  1102 +//
  1103 +// document - handle to the document.
  1104 +// font - string containing the font name, without spaces.
  1105 +//
  1106 +// The loaded font can be closed using FPDFFont_Close.
  1107 +//
  1108 +// Returns NULL on failure.
  1109 +FPDF_EXPORT FPDF_FONT FPDF_CALLCONV
  1110 +FPDFText_LoadStandardFont(FPDF_DOCUMENT document, FPDF_BYTESTRING font);
  1111 +
  1112 +// Experimental API.
  1113 +// Get the transform matrix of a text object.
  1114 +//
  1115 +// text - handle to a text.
  1116 +// matrix - pointer to struct with the matrix value.
  1117 +//
  1118 +// The matrix is composed as:
  1119 +// |a c e|
  1120 +// |b d f|
  1121 +// and used to scale, rotate, shear and translate the text.
  1122 +//
  1123 +// Returns TRUE on success.
  1124 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFTextObj_GetMatrix(FPDF_PAGEOBJECT text,
  1125 + FS_MATRIX* matrix);
  1126 +
  1127 +// Experimental API.
  1128 +// Get the font size of a text object.
  1129 +//
  1130 +// text - handle to a text.
  1131 +//
  1132 +// Returns the font size of the text object, measured in points (about 1/72
  1133 +// inch) on success; 0 on failure.
  1134 +FPDF_EXPORT float FPDF_CALLCONV FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text);
  1135 +
  1136 +// Close a loaded PDF font.
  1137 +//
  1138 +// font - Handle to the loaded font.
  1139 +FPDF_EXPORT void FPDF_CALLCONV FPDFFont_Close(FPDF_FONT font);
  1140 +
  1141 +// Create a new text object using a loaded font.
  1142 +//
  1143 +// document - handle to the document.
  1144 +// font - handle to the font object.
  1145 +// font_size - the font size for the new text object.
  1146 +//
  1147 +// Returns a handle to a new text object, or NULL on failure
  1148 +FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
  1149 +FPDFPageObj_CreateTextObj(FPDF_DOCUMENT document,
  1150 + FPDF_FONT font,
  1151 + float font_size);
  1152 +
  1153 +// Experimental API.
  1154 +// Get the text rendering mode of a text object.
  1155 +//
  1156 +// text - the handle to the text object.
  1157 +//
  1158 +// Returns one of the known FPDF_TEXT_RENDERMODE enum values on success,
  1159 +// FPDF_TEXTRENDERMODE_UNKNOWN on error.
  1160 +FPDF_EXPORT FPDF_TEXT_RENDERMODE FPDF_CALLCONV
  1161 +FPDFTextObj_GetTextRenderMode(FPDF_PAGEOBJECT text);
  1162 +
  1163 +// Experimental API.
  1164 +// Set the text rendering mode of a text object.
  1165 +//
  1166 +// text - the handle to the text object.
  1167 +// render_mode - the FPDF_TEXT_RENDERMODE enum value to be set (cannot set to
  1168 +// FPDF_TEXTRENDERMODE_UNKNOWN).
  1169 +//
  1170 +// Returns TRUE on success.
  1171 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  1172 +FPDFTextObj_SetTextRenderMode(FPDF_PAGEOBJECT text,
  1173 + FPDF_TEXT_RENDERMODE render_mode);
  1174 +
  1175 +// Experimental API.
  1176 +// Get the font name of a text object.
  1177 +//
  1178 +// text - the handle to the text object.
  1179 +// buffer - the address of a buffer that receives the font name.
  1180 +// length - the size, in bytes, of |buffer|.
  1181 +//
  1182 +// Returns the number of bytes in the font name (including the trailing NUL
  1183 +// character) on success, 0 on error.
  1184 +//
  1185 +// Regardless of the platform, the |buffer| is always in UTF-8 encoding.
  1186 +// If |length| is less than the returned length, or |buffer| is NULL, |buffer|
  1187 +// will not be modified.
  1188 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  1189 +FPDFTextObj_GetFontName(FPDF_PAGEOBJECT text,
  1190 + void* buffer,
  1191 + unsigned long length);
  1192 +
  1193 +// Experimental API.
  1194 +// Get the text of a text object.
  1195 +//
  1196 +// text_object - the handle to the text object.
  1197 +// text_page - the handle to the text page.
  1198 +// buffer - the address of a buffer that receives the text.
  1199 +// length - the size, in bytes, of |buffer|.
  1200 +//
  1201 +// Returns the number of bytes in the text (including the trailing NUL
  1202 +// character) on success, 0 on error.
  1203 +//
  1204 +// Regardless of the platform, the |buffer| is always in UTF-16LE encoding.
  1205 +// If |length| is less than the returned length, or |buffer| is NULL, |buffer|
  1206 +// will not be modified.
  1207 +FPDF_EXPORT unsigned long FPDF_CALLCONV
  1208 +FPDFTextObj_GetText(FPDF_PAGEOBJECT text_object,
  1209 + FPDF_TEXTPAGE text_page,
  1210 + void* buffer,
  1211 + unsigned long length);
  1212 +
  1213 +// Experimental API.
  1214 +// Get number of page objects inside |form_object|.
  1215 +//
  1216 +// form_object - handle to a form object.
  1217 +//
  1218 +// Returns the number of objects in |form_object| on success, -1 on error.
  1219 +FPDF_EXPORT int FPDF_CALLCONV
  1220 +FPDFFormObj_CountObjects(FPDF_PAGEOBJECT form_object);
  1221 +
  1222 +// Experimental API.
  1223 +// Get page object in |form_object| at |index|.
  1224 +//
  1225 +// form_object - handle to a form object.
  1226 +// index - the 0-based index of a page object.
  1227 +//
  1228 +// Returns the handle to the page object, or NULL on error.
  1229 +FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
  1230 +FPDFFormObj_GetObject(FPDF_PAGEOBJECT form_object, unsigned long index);
  1231 +
  1232 +// Experimental API.
  1233 +// Get the transform matrix of a form object.
  1234 +//
  1235 +// form_object - handle to a form.
  1236 +// matrix - pointer to struct to receive the matrix value.
  1237 +//
  1238 +// The matrix is composed as:
  1239 +// |a c e|
  1240 +// |b d f|
  1241 +// and used to scale, rotate, shear and translate the form object.
  1242 +//
  1243 +// Returns TRUE on success.
  1244 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  1245 +FPDFFormObj_GetMatrix(FPDF_PAGEOBJECT form_object, FS_MATRIX* matrix);
  1246 +
  1247 +#ifdef __cplusplus
  1248 +} // extern "C"
  1249 +#endif // __cplusplus
  1250 +
  1251 +#endif // PUBLIC_FPDF_EDIT_H_
  1 +// Copyright 2014 PDFium Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
  6 +
  7 +#ifndef PUBLIC_FPDF_EXT_H_
  8 +#define PUBLIC_FPDF_EXT_H_
  9 +
  10 +#include <time.h>
  11 +
  12 +// NOLINTNEXTLINE(build/include)
  13 +#include "fpdfview.h"
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif // __cplusplus
  18 +
  19 +// Unsupported XFA form.
  20 +#define FPDF_UNSP_DOC_XFAFORM 1
  21 +// Unsupported portable collection.
  22 +#define FPDF_UNSP_DOC_PORTABLECOLLECTION 2
  23 +// Unsupported attachment.
  24 +#define FPDF_UNSP_DOC_ATTACHMENT 3
  25 +// Unsupported security.
  26 +#define FPDF_UNSP_DOC_SECURITY 4
  27 +// Unsupported shared review.
  28 +#define FPDF_UNSP_DOC_SHAREDREVIEW 5
  29 +// Unsupported shared form, acrobat.
  30 +#define FPDF_UNSP_DOC_SHAREDFORM_ACROBAT 6
  31 +// Unsupported shared form, filesystem.
  32 +#define FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM 7
  33 +// Unsupported shared form, email.
  34 +#define FPDF_UNSP_DOC_SHAREDFORM_EMAIL 8
  35 +// Unsupported 3D annotation.
  36 +#define FPDF_UNSP_ANNOT_3DANNOT 11
  37 +// Unsupported movie annotation.
  38 +#define FPDF_UNSP_ANNOT_MOVIE 12
  39 +// Unsupported sound annotation.
  40 +#define FPDF_UNSP_ANNOT_SOUND 13
  41 +// Unsupported screen media annotation.
  42 +#define FPDF_UNSP_ANNOT_SCREEN_MEDIA 14
  43 +// Unsupported screen rich media annotation.
  44 +#define FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA 15
  45 +// Unsupported attachment annotation.
  46 +#define FPDF_UNSP_ANNOT_ATTACHMENT 16
  47 +// Unsupported signature annotation.
  48 +#define FPDF_UNSP_ANNOT_SIG 17
  49 +
  50 +// Interface for unsupported feature notifications.
  51 +typedef struct _UNSUPPORT_INFO {
  52 + // Version number of the interface. Must be 1.
  53 + int version;
  54 +
  55 + // Unsupported object notification function.
  56 + // Interface Version: 1
  57 + // Implementation Required: Yes
  58 + //
  59 + // pThis - pointer to the interface structure.
  60 + // nType - the type of unsupported object. One of the |FPDF_UNSP_*| entries.
  61 + void (*FSDK_UnSupport_Handler)(struct _UNSUPPORT_INFO* pThis, int nType);
  62 +} UNSUPPORT_INFO;
  63 +
  64 +// Setup an unsupported object handler.
  65 +//
  66 +// unsp_info - Pointer to an UNSUPPORT_INFO structure.
  67 +//
  68 +// Returns TRUE on success.
  69 +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
  70 +FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info);
  71 +
  72 +// Set replacement function for calls to time().
  73 +//
  74 +// This API is intended to be used only for testing, thus may cause PDFium to
  75 +// behave poorly in production environments.
  76 +//
  77 +// func - Function pointer to alternate implementation of time(), or
  78 +// NULL to restore to actual time() call itself.
  79 +FPDF_EXPORT void FPDF_CALLCONV FSDK_SetTimeFunction(time_t (*func)());
  80 +
  81 +// Set replacement function for calls to localtime().
  82 +//
  83 +// This API is intended to be used only for testing, thus may cause PDFium to
  84 +// behave poorly in production environments.
  85 +//
  86 +// func - Function pointer to alternate implementation of localtime(), or
  87 +// NULL to restore to actual localtime() call itself.
  88 +FPDF_EXPORT void FPDF_CALLCONV
  89 +FSDK_SetLocaltimeFunction(struct tm* (*func)(const time_t*));
  90 +
  91 +// Unknown page mode.
  92 +#define PAGEMODE_UNKNOWN -1
  93 +// Document outline, and thumbnails hidden.
  94 +#define PAGEMODE_USENONE 0
  95 +// Document outline visible.
  96 +#define PAGEMODE_USEOUTLINES 1
  97 +// Thumbnail images visible.
  98 +#define PAGEMODE_USETHUMBS 2
  99 +// Full-screen mode, no menu bar, window controls, or other decorations visible.
  100 +#define PAGEMODE_FULLSCREEN 3
  101 +// Optional content group panel visible.
  102 +#define PAGEMODE_USEOC 4
  103 +// Attachments panel visible.
  104 +#define PAGEMODE_USEATTACHMENTS 5
  105 +
  106 +// Get the document's PageMode.
  107 +//
  108 +// doc - Handle to document.
  109 +//
  110 +// Returns one of the |PAGEMODE_*| flags defined above.
  111 +//
  112 +// The page mode defines how the document should be initially displayed.
  113 +FPDF_EXPORT int FPDF_CALLCONV FPDFDoc_GetPageMode(FPDF_DOCUMENT document);
  114 +
  115 +#ifdef __cplusplus
  116 +} // extern "C"
  117 +#endif // __cplusplus
  118 +
  119 +#endif // PUBLIC_FPDF_EXT_H_
  1 +// Copyright 2014 PDFium Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
  6 +
  7 +#ifndef PUBLIC_FPDF_FLATTEN_H_
  8 +#define PUBLIC_FPDF_FLATTEN_H_
  9 +
  10 +// NOLINTNEXTLINE(build/include)
  11 +#include "fpdfview.h"
  12 +
  13 +// Flatten operation failed.
  14 +#define FLATTEN_FAIL 0
  15 +// Flatten operation succeed.
  16 +#define FLATTEN_SUCCESS 1
  17 +// Nothing to be flattened.
  18 +#define FLATTEN_NOTHINGTODO 2
  19 +
  20 +// Flatten for normal display.
  21 +#define FLAT_NORMALDISPLAY 0
  22 +// Flatten for print.
  23 +#define FLAT_PRINT 1
  24 +
  25 +#ifdef __cplusplus
  26 +extern "C" {
  27 +#endif // __cplusplus
  28 +
  29 +// Flatten annotations and form fields into the page contents.
  30 +//
  31 +// page - handle to the page.
  32 +// nFlag - One of the |FLAT_*| values denoting the page usage.
  33 +//
  34 +// Returns one of the |FLATTEN_*| values.
  35 +//
  36 +// Currently, all failures return |FLATTEN_FAIL| with no indication of the
  37 +// cause.
  38 +FPDF_EXPORT int FPDF_CALLCONV FPDFPage_Flatten(FPDF_PAGE page, int nFlag);
  39 +
  40 +#ifdef __cplusplus
  41 +} // extern "C"
  42 +#endif // __cplusplus
  43 +
  44 +#endif // PUBLIC_FPDF_FLATTEN_H_