mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-07-15 14:04:34 +08:00
150 lines
4.7 KiB
C#
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);
|
||
|
}
|
||
|
}
|
||
|
}
|