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

150 lines
4.7 KiB
C#

using CPF.Mac.Foundation;
using System;
using System.Runtime.InteropServices;
namespace CPF.Mac.CoreGraphics
{
public class CGContextPDF : CGContext
{
private bool closed;
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern IntPtr CGPDFContextCreateWithURL(IntPtr url, ref CGRect rect, IntPtr dictionary);
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern IntPtr CGPDFContextCreateWithURL(IntPtr url, IntPtr rect, IntPtr dictionary);
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern IntPtr CGPDFContextCreate(IntPtr dataConsumer, ref CGRect rect, IntPtr dictionary);
public CGContextPDF(CGDataConsumer dataConsumer, CGRect mediaBox, CGPDFInfo info)
{
if (dataConsumer == null)
{
throw new ArgumentNullException("dataConsumer");
}
handle = CGPDFContextCreate(dataConsumer.Handle, ref mediaBox, info?.ToDictionary().Handle ?? IntPtr.Zero);
}
public CGContextPDF(NSUrl url, CGRect mediaBox, CGPDFInfo info)
{
if (url == null)
{
throw new ArgumentNullException("url");
}
handle = CGPDFContextCreateWithURL(url.Handle, ref mediaBox, info?.ToDictionary().Handle ?? IntPtr.Zero);
}
public CGContextPDF(NSUrl url, CGRect mediaBox)
{
if (url == null)
{
throw new ArgumentNullException("url");
}
handle = CGPDFContextCreateWithURL(url.Handle, ref mediaBox, IntPtr.Zero);
}
public CGContextPDF(NSUrl url, CGPDFInfo info)
{
if (url == null)
{
throw new ArgumentNullException("url");
}
handle = CGPDFContextCreateWithURL(url.Handle, IntPtr.Zero, info?.ToDictionary().Handle ?? IntPtr.Zero);
}
public CGContextPDF(NSUrl url)
{
if (url == null)
{
throw new ArgumentNullException("url");
}
handle = CGPDFContextCreateWithURL(url.Handle, IntPtr.Zero, IntPtr.Zero);
}
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern void CGPDFContextClose(IntPtr handle);
public void Close()
{
if (!closed)
{
CGPDFContextClose(handle);
closed = true;
}
}
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern void CGPDFContextBeginPage(IntPtr handle, IntPtr dict);
public void BeginPage(CGPDFPageInfo info)
{
CGPDFContextBeginPage(handle, info?.ToDictionary().Handle ?? IntPtr.Zero);
}
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern void CGPDFContextEndPage(IntPtr handle);
public new void EndPage()
{
CGPDFContextEndPage(handle);
}
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern void CGPDFContextAddDocumentMetadata(IntPtr handle, IntPtr nsDataHandle);
public void AddDocumentMetadata(NSData data)
{
if (data != null)
{
CGPDFContextAddDocumentMetadata(handle, data.Handle);
}
}
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern void CGPDFContextSetURLForRect(IntPtr handle, IntPtr urlh, CGRect rect);
public void SetUrl(NSUrl url, CGRect region)
{
if (url == null)
{
throw new ArgumentNullException("url");
}
CGPDFContextSetURLForRect(handle, url.Handle, region);
}
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern void CGPDFContextAddDestinationAtPoint(IntPtr handle, IntPtr cfstring, CGPoint point);
public void AddDestination(string name, CGPoint point)
{
if (name == null)
{
throw new ArgumentNullException("name");
}
CGPDFContextAddDestinationAtPoint(handle, new NSString(name).Handle, point);
}
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern void CGPDFContextSetDestinationForRect(IntPtr handle, IntPtr cfstr, CGRect rect);
public void SetDestination(string name, CGRect rect)
{
if (name == null)
{
throw new ArgumentNullException("name");
}
CGPDFContextSetDestinationForRect(handle, new NSString(name).Handle, rect);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
Close();
}
base.Dispose(disposing);
}
}
}