CPF/CPF.Mac/Mac/CoreGraphics/CGPDFInfo.cs
2023-11-21 23:05:03 +08:00

166 lines
3.9 KiB
C#

using CPF.Mac.CoreFoundation;
using CPF.Mac.Foundation;
using CPF.Mac.ObjCRuntime;
using System;
namespace CPF.Mac.CoreGraphics
{
public class CGPDFInfo : CGPDFPageInfo
{
private static IntPtr kCGPDFContextTitle;
private static IntPtr kCGPDFContextAuthor;
private static IntPtr kCGPDFContextSubject;
private static IntPtr kCGPDFContextKeywords;
private static IntPtr kCGPDFContextCreator;
private static IntPtr kCGPDFContextOwnerPassword;
private static IntPtr kCGPDFContextUserPassword;
private static IntPtr kCGPDFContextEncryptionKeyLength;
private static IntPtr kCGPDFContextAllowsPrinting;
private static IntPtr kCGPDFContextAllowsCopying;
public string Title
{
get;
set;
}
public string Author
{
get;
set;
}
public string Subject
{
get;
set;
}
public string[] Keywords
{
get;
set;
}
public string Creator
{
get;
set;
}
public string OwnerPassword
{
get;
set;
}
public string UserPassword
{
get;
set;
}
public int? EncryptionKeyLength
{
get;
set;
}
public bool? AllowsPrinting
{
get;
set;
}
public bool? AllowsCopying
{
get;
set;
}
static CGPDFInfo()
{
IntPtr handle = Dlfcn.dlopen("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics", 0);
try
{
kCGPDFContextTitle = Dlfcn.GetIntPtr(handle, "kCGPDFContextTitle");
kCGPDFContextAuthor = Dlfcn.GetIntPtr(handle, "kCGPDFContextAuthor");
kCGPDFContextSubject = Dlfcn.GetIntPtr(handle, "kCGPDFContextSubject");
kCGPDFContextKeywords = Dlfcn.GetIntPtr(handle, "kCGPDFContextKeywords");
kCGPDFContextCreator = Dlfcn.GetIntPtr(handle, "kCGPDFContextCreator");
kCGPDFContextOwnerPassword = Dlfcn.GetIntPtr(handle, "kCGPDFContextOwnerPassword");
kCGPDFContextUserPassword = Dlfcn.GetIntPtr(handle, "kCGPDFContextUserPassword");
kCGPDFContextEncryptionKeyLength = Dlfcn.GetIntPtr(handle, "kCGPDFContextEncryptionKeyLength");
kCGPDFContextAllowsPrinting = Dlfcn.GetIntPtr(handle, "kCGPDFContextAllowsPrinting");
kCGPDFContextAllowsCopying = Dlfcn.GetIntPtr(handle, "kCGPDFContextAllowsCopying");
}
finally
{
Dlfcn.dlclose(handle);
}
}
internal override NSMutableDictionary ToDictionary()
{
NSMutableDictionary nSMutableDictionary = base.ToDictionary();
if (Title != null)
{
nSMutableDictionary.LowlevelSetObject((NSString)Title, kCGPDFContextTitle);
}
if (Author != null)
{
nSMutableDictionary.LowlevelSetObject((NSString)Author, kCGPDFContextAuthor);
}
if (Subject != null)
{
nSMutableDictionary.LowlevelSetObject((NSString)Subject, kCGPDFContextSubject);
}
if (Keywords != null && Keywords.Length != 0)
{
if (Keywords.Length == 1)
{
nSMutableDictionary.LowlevelSetObject((NSString)Keywords[0], kCGPDFContextKeywords);
}
else
{
nSMutableDictionary.LowlevelSetObject(NSArray.FromStrings(Keywords), kCGPDFContextKeywords);
}
}
if (Creator != null)
{
nSMutableDictionary.LowlevelSetObject((NSString)Creator, kCGPDFContextCreator);
}
if (OwnerPassword != null)
{
nSMutableDictionary.LowlevelSetObject((NSString)OwnerPassword, kCGPDFContextOwnerPassword);
}
if (UserPassword != null)
{
nSMutableDictionary.LowlevelSetObject((NSString)UserPassword, kCGPDFContextUserPassword);
}
if (EncryptionKeyLength.HasValue)
{
nSMutableDictionary.LowlevelSetObject(NSNumber.FromInt32(EncryptionKeyLength.Value), kCGPDFContextEncryptionKeyLength);
}
if (AllowsPrinting.HasValue && !AllowsPrinting.Value)
{
nSMutableDictionary.LowlevelSetObject(CFBoolean.False.Handle, kCGPDFContextAllowsPrinting);
}
if (AllowsCopying.HasValue && !AllowsCopying.Value)
{
nSMutableDictionary.LowlevelSetObject(CFBoolean.False.Handle, kCGPDFContextAllowsCopying);
}
return nSMutableDictionary;
}
}
}