3#ifndef PDFSDK_CXX_TYPES_H_INCLUDED_
4#define PDFSDK_CXX_TYPES_H_INCLUDED_
11#include <pdfsdk/cxx/bytes.h>
12#include <pdfsdk/cxx/exception.h>
17inline bool IsValidPDDateTime(
const PDDateTime& pddt) {
22 if (pddt.
day < 1 || pddt.
day > 31)
34inline std::chrono::system_clock::time_point PDDateTimeToStdTimePoint(
const PDDateTime& pddt) {
36 tm.tm_year = pddt.
year - 1900;
37 tm.tm_mon = pddt.
month - 1;
38 tm.tm_mday = pddt.
day;
39 tm.tm_hour = pddt.
hour;
43 auto time_point = std::chrono::system_clock::from_time_t(std::mktime(&tm));
47 auto utc_offset = std::chrono::hours(pddt.
tz_hour) + std::chrono::minutes(pddt.
tz_minute);
49 ? time_point - utc_offset
50 : time_point + utc_offset;
55template<
typename CallableGetter,
typename... Args>
56std::wstring GetWstringProperty(CallableGetter getter, Args&&... args) {
58 auto ec = std::invoke(getter, args...,
nullptr, 0, &valueSize);
60 return std::wstring{};
62 PDF_CHECK_SUCCESS_X(ec);
63 std::wstring valueString(valueSize, L
'\0');
64 PDF_CHECK_SUCCESS_X(std::invoke(getter, args..., &valueString[0], valueSize, &valueSize));
68template<
typename CallableGetter,
typename... Args>
69std::string GetStringProperty(CallableGetter getter, Args&&... args) {
71 auto ec = std::invoke(getter, args...,
nullptr, 0, &valueSize);
75 PDF_CHECK_SUCCESS_X(ec);
76 std::string valueString(valueSize,
'\0');
77 PDF_CHECK_SUCCESS_X(std::invoke(getter, args..., &valueString[0], valueSize, &valueSize));
81template<
typename CallableGetter,
typename... Args>
82std::vector<Byte> GetBytesProperty(CallableGetter getter, Args&&... args) {
84 auto ec = std::invoke(getter, args...,
nullptr, 0, &valueSize);
86 return std::vector<Byte>{};
88 PDF_CHECK_SUCCESS_X(ec);
89 std::vector<Byte> value(valueSize);
90 PDF_CHECK_SUCCESS_X(std::invoke(getter, args..., value.data(), valueSize, &valueSize));
@ kPDErrSuccess
Operation was successful.
Definition errors.h:18
@ kPDErrBufferTooSmall
Memory buffer too small, increase buffer size.
Definition errors.h:25
int month
The month in the range 1..12.
Definition types.h:25
int tz_sign
The "sign" of the time zone, (0) means UTC, (-1) is west, (+1) is east.
Definition types.h:30
int year
The year.
Definition types.h:24
int tz_hour
The time zone hour in the range 0..23.
Definition types.h:31
int day
The day of the month in the range 1..31.
Definition types.h:26
int hour
The hour in the range 0..23.
Definition types.h:27
int tz_minute
The time zone minute in the range 0..59.
Definition types.h:32
int second
The second in the range 0..59.
Definition types.h:29
int minute
The minute in the range 0..59.
Definition types.h:28