/* http://www.cgsoso.com/forum-211-1.html CG搜搜 Unity3d 每日Unity3d插件免费更新 更有VIP资源! CGSOSO 主打游戏开发,影视设计等CG资源素材。 插件如若商用,请务必官网购买! daily assets update for try. U should buy the asset from home store if u use it in your project! */ using System; using System.Runtime.InteropServices; #if NETFX_CORE && !UNITY_WSA_10_0 using WinRTLegacy.Text; #else using System.Text; #endif namespace Paroxe.PdfRenderer { #if !UNITY_WEBGL /// /// Represents the PDF action into a PDF document. /// public class PDFAction : IDisposable { private bool m_Disposed; private IntPtr m_NativePointer; private IDisposable m_Source; private PDFDocument m_Document; private ActionType m_ActionType = ActionType.Unknown; private string m_FilePath; private string m_URIPath; public PDFAction(PDFLink link, IntPtr nativePointer) { if (link == null) throw new NullReferenceException(); if (nativePointer == IntPtr.Zero) throw new NullReferenceException(); PDFLibrary.AddRef("PDFAction"); m_Source = link; m_Document = link.Page.Document; m_NativePointer = nativePointer; } public PDFAction(PDFBookmark bookmark, IntPtr nativePointer) { if (bookmark == null) throw new NullReferenceException(); if (nativePointer == IntPtr.Zero) throw new NullReferenceException(); PDFLibrary.AddRef("PDFAction"); m_Source = bookmark; m_Document = bookmark.Document; m_NativePointer = nativePointer; } ~PDFAction() { Dispose(false); } public enum ActionType { /// /// Unsupported action type. /// Unsupported = 0, /// /// Go to a destination within current document. /// GoTo = 1, /// /// Go to a destination within another document. /// RemoteGoTo = 2, /// /// Universal Resource Identifier, including web pages and other Internet based resources. /// Uri = 3, /// /// Launch an application or open a file. /// Launch = 4, Unknown = 133709999 }; public IDisposable Source { get { return m_Source; } } public PDFDocument Document { get { return m_Document; } } public IntPtr NativePointer { get { return m_NativePointer; } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!m_Disposed) { m_NativePointer = IntPtr.Zero; PDFLibrary.RemoveRef("PDFAction"); m_Disposed = true; } } /// /// Gets the PDFDest object associated with this action. /// /// public PDFDest GetDest() { IntPtr destPtr = FPDFAction_GetDest(m_Document.NativePointer, m_NativePointer); if (destPtr != IntPtr.Zero) return new PDFDest(this, destPtr); return null; } public string GetFilePath() { if (string.IsNullOrEmpty(m_FilePath)) { byte[] buffer = new byte[4096]; int filePathLength = (int) FPDFAction_GetFilePath(m_NativePointer, buffer, (uint) buffer.Length); if (filePathLength > 0) m_FilePath = Encoding.Unicode.GetString(Encoding.Convert(Encoding.ASCII, Encoding.Unicode, buffer, 0, filePathLength)); } return m_FilePath; } /// /// Gets type of current action. /// /// public ActionType GetActionType() { if (m_ActionType == ActionType.Unknown) m_ActionType = (ActionType) FPDFAction_GetType(m_NativePointer); return m_ActionType; } /// /// Gets URL assigned to the current action. /// /// public string GetURIPath() { if (string.IsNullOrEmpty(m_URIPath)) { byte[] buffer = new byte[4096]; int uriLength = (int) FPDFAction_GetURIPath(m_Document.NativePointer, m_NativePointer, buffer, (uint)buffer.Length); if (uriLength > 0) m_URIPath = Encoding.Unicode.GetString(Encoding.Convert(Encoding.ASCII, Encoding.Unicode, buffer, 0, uriLength)); } return m_URIPath; } #region NATIVE [DllImport(PDFLibrary.PLUGIN_ASSEMBLY)] private static extern IntPtr FPDFAction_GetDest(IntPtr document, IntPtr action); [DllImport(PDFLibrary.PLUGIN_ASSEMBLY)] private static extern uint FPDFAction_GetFilePath(IntPtr action, [In, Out] byte[] buffer, uint buflen); [DllImport(PDFLibrary.PLUGIN_ASSEMBLY)] private static extern uint FPDFAction_GetType(IntPtr action); [DllImport(PDFLibrary.PLUGIN_ASSEMBLY)] private static extern uint FPDFAction_GetURIPath(IntPtr document, IntPtr action, [In, Out] byte[] buffer, uint buflen); #endregion } #endif }