Loading...
Searching...
No Matches
PDFDoc.h
Go to the documentation of this file.
1//---------------------------------------------------------------------------------------
2// Copyright (c) 2001-2025 by Apryse Software Inc. All Rights Reserved.
3// Consult legal.txt regarding legal and license information.
4//---------------------------------------------------------------------------------------
5#ifndef PDFTRON_H_CPPPDFPDFDoc
6#define PDFTRON_H_CPPPDFPDFDoc
7
8#include <Common/BasicTypes.h>
9#include <FDF/FDFDoc.h>
10#include <PDF/PDFDocInfo.h>
11#include <PDF/PageLabel.h>
12//#include <PDF/OCG/Config.h>
13#include <C/PDF/TRN_PDFDoc.h>
14#include <PDF/PDFDocViewPrefs.h>
15#include <SDF/SDFDoc.h>
16#include <PDF/Page.h>
17#include <PDF/PageSet.h>
18#include <PDF/DiffOptions.h>
19#include <PDF/TextDiffOptions.h>
20#include <PDF/Annot.h>
21#include <Common/Iterator.h>
23#include <SDF/UndoManager.h>
26#include <PDF/RefreshOptions.h>
28
29namespace pdftron {
30 namespace PDF {
31 class Bookmark;
32 namespace OCG{
33 class Config;
34 }
35 namespace Struct{class STree;};
36
42
48
54
71class PDFDoc
72{
73public:
74
79
90
98 PDFDoc(const PDFDoc& other);
100
109 PDFDoc (const UString& filepath);
110 PDFDoc (const char* filepath);
111
127
137 PDFDoc (const UChar* buf, size_t buf_size);
138
143
147 void Close();
148
153
180#ifndef SWIG
181 void* custom_data = 0
182#endif
183 );
184
217 bool InitStdSecurityHandler(const char* password, int password_sz);
218
246
273 bool InitStdSecurityHandler(const std::vector<UInt8>& password_buf);
274
290
303
308
309
310 /* {{codegen: PDFDoc}} */
311 /* {{codegen: PDFDoc}} */
312
318
327
337 SDF::SignatureHandlerId AddStdSignatureHandler(const UString& pkcs12_keyfile, const UString& pkcs12_keypass);
338
348 SDF::SignatureHandlerId AddStdSignatureHandler(const std::vector<unsigned char>& pkcs12_keybuffer, const UString& pkcs12_keypass);
349
355 void RemoveSignatureHandler(const SDF::SignatureHandlerId signature_handler_id);
356
365
370
379
386
394
400
409
411 {
412 e_action_trigger_doc_will_close = 17, //Triggered before closing a document
413 e_action_trigger_doc_will_save = 18, //Triggered before saving a document
414 e_action_trigger_doc_did_save = 19, //Triggered after saving a document
415 e_action_trigger_doc_will_print = 20, //Triggered before printing a document
416 e_action_trigger_doc_did_print = 21 //Triggered after printing a document
417 };
418
426
433 bool IsModified () const;
434
446 bool HasRepairedXRef() const;
447
467 bool IsLinearized() const;
468
474
485
496
523 void Save(const UString& path, UInt32 flags);
524
525#ifndef SWIG
553 void Save(const UString& path, UInt32 flags, Common::ProgressMonitor* progress);
554#endif
555
556 std::vector<unsigned char> Save(UInt32 flags);
557
558#ifndef SWIG
578 void Save(const char* &out_buf, size_t& out_buf_size, UInt32 flags, Common::ProgressMonitor* progress);
579#endif
580
595 void Save(Filters::Filter& stream, UInt32 flags);
596
597#ifdef SWIG
606 void SaveCustomSignature(const std::vector<UChar>& in_signature, const DigitalSignatureField& in_field, const UString& in_path);
615 void SaveCustomSignature(const std::vector<UChar>& in_signature, const DigitalSignatureField& in_field, Filters::Filter& out_stream);
616#else
626 void SaveCustomSignature(const UChar* in_signature, const size_t in_signature_size, const DigitalSignatureField& in_field, const UString& in_path);
636 void SaveCustomSignature(const UChar* in_signature, const size_t in_signature_size, const DigitalSignatureField& in_field, Filters::Filter& out_stream);
637
650 void SaveCustomSignature(const UChar* in_signature, const size_t in_signature_size, const DigitalSignatureField& in_field, const UChar* &out_buf, size_t& out_buf_size);
651#endif
652
653
671
685 Page GetPage(UInt32 page_number);
686
692 void PageRemove(const PageIterator& page_itr);
693
695 e_none, //default, do not insert bookmarks
696 e_insert_bookmark, //insert bookmarks (use this option when inserting many pages in a single call)
697 e_insert_goto_bookmark // same as e_insert_bookmark, but ignore GoToR and URI links, while still retaining bookmark hierarchy (use this option when inserting one page at a time)
698 };
699
710 void PageInsert(PageIterator& where, Page page);
711
724 void InsertPages(int insert_before_page_number
725 , PDFDoc& src_doc
726 , int start_page
727 , int end_page
728 , enum InsertFlag flag
729#ifndef SWIG
730 , Common::ProgressMonitor * monitor = 0
731#endif
732 );
733
745 void InsertPages(int insert_before_page_number
746 , PDFDoc& src_doc
747 , const PageSet& source_page_set
748 , enum InsertFlag flag
749#ifndef SWIG
750 , Common::ProgressMonitor * monitor = 0
751#endif
752 );
753
754
769 void MovePages(int move_before_page_number
770 , PDFDoc& src_doc
771 , int start_page
772 , int end_page
773 , enum InsertFlag flag
774#ifndef SWIG
775 , Common::ProgressMonitor * monitor = 0
776#endif
777 );
778
779
793 void MovePages(int move_before_page_number
794 , PDFDoc& src_doc
795 , const PageSet& source_page_set
796 , enum InsertFlag flag
797#ifndef SWIG
798 , Common::ProgressMonitor * monitor = 0
799#endif
800 );
801
807 void PagePushFront(Page page);
808
814 void PagePushBack(Page page);
815
832 std::vector<Page> ImportPages(const std::vector<Page>& pages, bool import_bookmarks = false);
833
899 Page PageCreate(const Rect& media_box = Rect(0, 0, 612, 792));
900
911 int AppendTextDiff(Page page1, Page page2);
912
922 int AppendTextDiff(PDFDoc& doc1, PDFDoc& doc2);
923
934 int AppendTextDiff(PDFDoc& doc1, PDFDoc& doc2, TextDiffOptions* options);
935
946 static int HighlightTextDiff(PDFDoc& doc1, PDFDoc& doc2, TextDiffOptions* options);
947
954
961 void AddRootBookmark(class Bookmark root_bookmark);
962
967
973
978
983
984
1009
1026
1043 Field GetField(const UString& field_name);
1044
1059 Field FieldCreate(const UString& field_name,
1060 Field::Type type,
1061 SDF::Obj field_value = 0,
1062 SDF::Obj def_field_value = 0);
1063
1078 Field FieldCreate(const UString& field_name,
1079 Field::Type type,
1080 const UString& field_value,
1081 const UString& def_field_value = "");
1082
1089
1095 void RefreshAnnotAppearances(const RefreshOptions* options = 0);
1096
1102 void FlattenAnnotations(bool forms_only = false);
1103
1108
1110 e_forms_only, // default, only extract form fields to FDF
1111 e_annots_only, // only extract annots
1112 e_both, // extract both form fields and annots
1113 e_annots_only_no_links = 5 // same as e_annots_only but no url links get converted
1114 };
1115
1122
1129 FDF::FDFDoc FDFExtract(PageSet& pages_to_extract, enum ExtractFlag flag = e_forms_only);
1130
1136 FDF::FDFDoc FDFExtract(const std::vector<Annot>& annotations);
1137
1145 FDF::FDFDoc FDFExtract(const std::vector<Annot>& annot_added, const std::vector<Annot>& annot_modified, const std::vector<Annot>& annot_deleted);
1146
1151 void FDFMerge(FDF::FDFDoc& fdf_doc);
1152
1165 void FDFUpdate(FDF::FDFDoc& fdf_doc);
1166
1176
1184 void SetOpenAction(const Action& action);
1185
1203 void AddFileAttachment(const UString& file_key, FileSpec embedded_file);
1204
1214
1225 void SetPageLabel(int page_num, PageLabel& label);
1226
1236 void RemovePageLabel(int page_num);
1237
1241 bool IsTagged();
1242
1247
1254 bool HasOC() const;
1255
1263
1269
1281 void AddHighlights(const UString& hilite);
1282
1290 SDF::Obj CreateIndirectName(const char* name);
1372 SDF::Obj CreateIndirectStream(const char* data, const size_t data_size, Filters::Filter filter_chain = Filters::Filter (0,false));
1373
1378
1383 operator SDF::SDFDoc& () { return GetSDFDoc(); }
1384
1385
1391 void Lock();
1392
1396 void Unlock();
1397
1403 bool TryLock( int milliseconds = 0 );
1404
1415 void LockRead();
1416
1421
1428 bool TryLockRead( int milliseconds = 0 );
1429
1436
1442
1450
1463
1464#ifndef SWIG
1479 void SaveViewerOptimized(const char* &out_buf, size_t& out_buf_size, const ViewerOptimizedOptions& opts);
1480#endif
1481 std::vector<unsigned char> SaveViewerOptimized(const ViewerOptimizedOptions& opts);
1482
1484 {
1486 // e_failure == bad doc, digest, or MDP (i.e. does not include trust issues, because those are flaky due to being network/config-related)
1490 // unsigned sigs skipped; parts of document may be unsigned (check GetByteRanges on signed sigs to find out)
1492 };
1493
1500
1519 void MergeXFDF(Filters::Filter stream, const MergeXFDFOptions* opts = 0);
1538 void MergeXFDF(const UString& xfdf, const MergeXFDFOptions* opts = 0);
1539
1540 //for xamarin use only
1541 static PDFDoc* CreateInternal(ptrdiff_t impl);
1543
1544// @cond PRIVATE_DOC
1545#ifndef SWIGHIDDEN
1546
1547 TRN_PDFDoc mp_doc;
1548 PDFDoc(TRN_PDFDoc impl) : mp_doc(impl) {}
1549#endif
1550// @endcond
1551
1552};
1553
1554 }; // namespace PDF
1555}; // namespace pdftron
1556
1557
1558#include <Impl/PDFDoc.inl>
1559
1560#endif // PDFTRON_H_CPPPDFPDFDoc
PDFDoc(const UString &filepath)
Page PageCreate(const Rect &media_box=Rect(0, 0, 612, 792))
void AppendVisualDiff(Page p1, Page p2, DiffOptions *opts)
bool TryLock(int milliseconds=0)
void RemovePageLabel(int page_num)
FDF::FDFDoc FDFExtract(const std::vector< Annot > &annotations)
static int HighlightTextDiff(PDFDoc &doc1, PDFDoc &doc2, TextDiffOptions *options)
@ e_action_trigger_doc_will_save
Definition PDFDoc.h:413
@ e_action_trigger_doc_did_print
Definition PDFDoc.h:416
@ e_action_trigger_doc_will_close
Definition PDFDoc.h:412
@ e_action_trigger_doc_did_save
Definition PDFDoc.h:414
@ e_action_trigger_doc_will_print
Definition PDFDoc.h:415
std::vector< unsigned char > SaveViewerOptimized(const ViewerOptimizedOptions &opts)
void PagePushBack(Page page)
PDF::DigitalSignatureField CreateDigitalSignatureField(const UString &in_sig_field_name="")
int AppendTextDiff(Page page1, Page page2)
void SaveCustomSignature(const UChar *in_signature, const size_t in_signature_size, const DigitalSignatureField &in_field, Filters::Filter &out_stream)
FieldIterator GetFieldIterator()
void Save(const char *&out_buf, size_t &out_buf_size, UInt32 flags, Common::ProgressMonitor *progress)
void FDFUpdate(FDF::FDFDoc &fdf_doc)
bool IsLinearized() const
PDFDocInfo GetDocInfo()
PageLabel GetPageLabel(int page_num)
void RefreshFieldAppearances()
SDF::Obj CreateIndirectStream(Filters::FilterReader &data, Filters::Filter filter_chain=Filters::Filter(0, false))
void AddHighlights(const UString &hilite)
void InsertPages(int insert_before_page_number, PDFDoc &src_doc, const PageSet &source_page_set, enum InsertFlag flag, Common::ProgressMonitor *monitor=0)
void Save(Filters::Filter &stream, UInt32 flags)
SDF::Obj GetTriggerAction(PDFDoc::ActionTriggerEvent trigger)
ptrdiff_t GetHandleInternal()
Page GetPage(UInt32 page_number)
SDF::SignatureHandlerId AddSignatureHandler(const SDF::SignatureHandler &signature_handler)
PageIterator GetPageIterator(UInt32 page_number=1)
OCG::Config GetOCGConfig() const
SDF::Obj CreateIndirectDict()
PDFDoc(const UChar *buf, size_t buf_size)
UInt64 GetDownloadedByteCount()
PDFDoc(const PDFDoc &other)
SDF::Obj CreateIndirectString(const UChar *value, UInt32 size)
PDFDocViewPrefs GetViewPrefs()
bool IsModified() const
SDF::Obj CreateIndirectName(const char *name)
void SaveCustomSignature(const UChar *in_signature, const size_t in_signature_size, const DigitalSignatureField &in_field, const UString &in_path)
void MovePages(int move_before_page_number, PDFDoc &src_doc, const PageSet &source_page_set, enum InsertFlag flag, Common::ProgressMonitor *monitor=0)
bool TryLockRead(int milliseconds=0)
void AddFileAttachment(const UString &file_key, FileSpec embedded_file)
SDF::SignatureHandlerId AddStdSignatureHandler(const UString &pkcs12_keyfile, const UString &pkcs12_keypass)
void SetPageLabel(int page_num, PageLabel &label)
SDF::Obj CreateIndirectBool(bool value)
void SetOpenAction(const Action &action)
Field FieldCreate(const UString &field_name, Field::Type type, const UString &field_value, const UString &def_field_value="")
SDF::Obj CreateIndirectStream(const char *data, const size_t data_size, Filters::Filter filter_chain=Filters::Filter(0, false))
PDFDoc(const char *filepath)
SignaturesVerificationStatus VerifySignedDigitalSignatures(const VerificationOptions &in_opts) const
void RemoveSignatureHandler(const SDF::SignatureHandlerId signature_handler_id)
Struct::STree GetStructTree()
SDF::Obj CreateIndirectArray()
std::vector< unsigned char > Save(UInt32 flags)
UString GetFileName() const
bool InitStdSecurityHandler(const pdftron::UString &password)
FieldIterator GetFieldIterator(const UString &field_name)
void Save(const UString &path, UInt32 flags, Common::ProgressMonitor *progress)
class Bookmark GetFirstBookmark()
void InsertPages(int insert_before_page_number, PDFDoc &src_doc, int start_page, int end_page, enum InsertFlag flag, Common::ProgressMonitor *monitor=0)
void MergeXFDF(Filters::Filter stream, const MergeXFDFOptions *opts=0)
int AppendTextDiff(PDFDoc &doc1, PDFDoc &doc2)
bool InitStdSecurityHandler(const std::vector< UInt8 > &password_buf)
bool HasOC() const
void SaveCustomSignature(const UChar *in_signature, const size_t in_signature_size, const DigitalSignatureField &in_field, const UChar *&out_buf, size_t &out_buf_size)
PDF::DigitalSignatureFieldIterator GetDigitalSignatureFieldIterator()
SDF::Obj CreateIndirectString(const UString &str)
SDF::SignatureHandler * GetSignatureHandler(const SDF::SignatureHandlerId signature_handler_id)
PDFDoc & operator=(const PDFDoc &)
SDF::Obj CreateIndirectNull()
void AddRootBookmark(class Bookmark root_bookmark)
void FlattenAnnotations(bool forms_only=false)
PDF::DigitalSignatureField::DocumentPermissions GetDigitalSignaturePermissions() const
void SaveViewerOptimized(const UString &path, const ViewerOptimizedOptions &opts)
std::vector< Page > ImportPages(const std::vector< Page > &pages, bool import_bookmarks=false)
void GenerateThumbnails(UInt32 size)
void PageInsert(PageIterator &where, Page page)
SDF::UndoManager GetUndoManager()
void FDFMerge(FDF::FDFDoc &fdf_doc)
static PDFDoc * CreateInternal(ptrdiff_t impl)
void SetSecurityHandler(const SDF::SecurityHandler &handler)
Field GetField(const UString &field_name)
void SaveViewerOptimized(const char *&out_buf, size_t &out_buf_size, const ViewerOptimizedOptions &opts)
FDF::FDFDoc FDFExtract(const std::vector< Annot > &annot_added, const std::vector< Annot > &annot_modified, const std::vector< Annot > &annot_deleted)
PDFDoc(Filters::Filter stream)
bool InitStdSecurityHandler(const char *password, int password_sz)
FDF::FDFDoc FDFExtract(PageSet &pages_to_extract, enum ExtractFlag flag=e_forms_only)
SDF::SignatureHandlerId AddStdSignatureHandler(const std::vector< unsigned char > &pkcs12_keybuffer, const UString &pkcs12_keypass)
bool HasRepairedXRef() const
void PagePushFront(Page page)
int AppendTextDiff(PDFDoc &doc1, PDFDoc &doc2, TextDiffOptions *options)
SDF::SDFDoc & GetSDFDoc()
void Save(const UString &path, UInt32 flags)
FDF::FDFDoc FDFExtract(enum ExtractFlag flag=e_forms_only)
bool InitSecurityHandler(void *custom_data=0)
SDF::Obj GetOCGs() const
void MergeXFDF(const UString &xfdf, const MergeXFDFOptions *opts=0)
SDF::Obj CreateIndirectNumber(double value)
void PageRemove(const PageIterator &page_itr)
PDFDoc(SDF::SDFDoc &sdfdoc)
void RefreshAnnotAppearances(const RefreshOptions *options=0)
void MovePages(int move_before_page_number, PDFDoc &src_doc, int start_page, int end_page, enum InsertFlag flag, Common::ProgressMonitor *monitor=0)
SDF::SecurityHandler GetSecurityHandler()
SDF::Obj GetAcroForm()
UInt64 GetTotalRemoteByteCount()
Field FieldCreate(const UString &field_name, Field::Type type, SDF::Obj field_value=0, SDF::Obj def_field_value=0)
Common::Iterator< Page > PageIterator
Definition PDFDoc.h:41
Common::Iterator< DigitalSignatureField > DigitalSignatureFieldIterator
Definition PDFDoc.h:53
Common::Iterator< Field > FieldIterator
Definition PDFDoc.h:47
size_t SignatureHandlerId
TRN_UInt32 UInt32
Definition BasicTypes.h:13
TRN_UInt64 UInt64
Definition BasicTypes.h:21
TRN_UChar UChar
Definition BasicTypes.h:12