天天看點

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

所用GhostScript為AFPL Ghostscript 8.53

附上GhostScript提供的VB.NET代碼:

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' Copyright (c) 2002 Dan Mount and Ghostgum Software Pty Ltd

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

'

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' Permission is hereby granted, free of charge, to any person obtaining 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' a copy of this software and associated documentation files (the 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' "Software"), to deal in the Software without restriction, including

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' without limitation the rights to use, copy, modify, merge, publish, 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' distribute, sublicense, and/or sell copies of the Software, and to

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' permit persons to whom the Software is furnished to do so, subject to 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' the following conditions:

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' The above copyright notice and this permission notice shall be

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' included in all copies or substantial portions of the Software.

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' SOFTWARE.

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' This is an example of how to call the Ghostscript DLL from

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' Visual Basic.NET.  There are two examples, one converts

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' colorcir.ps to PDF, the other is like command line Ghostscript.

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' The display device is not supported.

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' This code is not compatible with VB6.  There is another

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' example which does work with VB6.  Differences include:

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' 1. VB.NET uses GCHandle to get pointer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

'    VB6 uses StrPtr/VarPtr

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' 2. VB.NET Integer is 32bits, Long is 64bits

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

'    VB6 Integer is 16bits, Long is 32bits

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' 3. VB.NET uses IntPtr for pointers

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

'    VB6 uses Long for pointers

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' 4. VB.NET strings are always Unicode

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

'    VB6 can create an ANSI string

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

' See the following URL for some VB6 / VB.NET details

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

'  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvb600/html/vb6tovbdotnet.asp

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

Option Explicit On 

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

Imports System.Runtime.InteropServices

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

Module gsapiModule gsapi

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Declare Sub CopyMemory()Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal dest As IntPtr, ByVal source As IntPtr, ByVal bytes As Long)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    '------------------------------------------------

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'UDTs Start

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    <StructLayout(LayoutKind.Sequential)> Public Structure GS_RevisionStructure GS_Revision

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Public strProduct As IntPtr

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Public strCopyright As IntPtr

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Public intRevision As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Public intRevisionDate As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    End Structure

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'UDTs End

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'Callback Functions Start

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'These are only required if you use gsapi_set_stdio

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Delegate Function StdioCallBack()Function StdioCallBack(ByVal handle As IntPtr, ByVal strptr As IntPtr, ByVal count As Integer) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Function gsdll_stdin()Function gsdll_stdin(ByVal intGSInstanceHandle As IntPtr, ByVal strz As IntPtr, ByVal intBytes As Integer) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' This is dumb code that reads one byte at a time

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Ghostscript doesn't mind this, it is just very slow

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        If intBytes = 0 Then

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            gsdll_stdin = 0

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Else

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            Dim ich As Integer = Console.Read()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            If ich = -1 Then

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                gsdll_stdin = 0 ' EOF

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            Else

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                Dim bch As Byte = ich

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                Dim gcByte As GCHandle = GCHandle.Alloc(bch, GCHandleType.Pinned)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                Dim ptrByte As IntPtr = gcByte.AddrOfPinnedObject()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                CopyMemory(strz, ptrByte, 1)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                ptrByte = IntPtr.Zero

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                gcByte.Free()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                gsdll_stdin = 1

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            End If

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        End If

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    End Function

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Function gsdll_stdout()Function gsdll_stdout(ByVal intGSInstanceHandle As IntPtr, ByVal strz As IntPtr, ByVal intBytes As Integer) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' If you can think of a more efficient method, please tell me!

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' We need to convert from a byte buffer to a string

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' First we create a byte array of the appropriate size

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim aByte(intBytes) As Byte

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Then we get the address of the byte array

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim gcByte As GCHandle = GCHandle.Alloc(aByte, GCHandleType.Pinned)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim ptrByte As IntPtr = gcByte.AddrOfPinnedObject()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Then we copy the buffer to the byte array

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        CopyMemory(ptrByte, strz, intBytes)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Release the address locking

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ptrByte = IntPtr.Zero

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        gcByte.Free()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Then we copy the byte array to a string, character by character

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim str As String

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim i As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        For i = 0 To intBytes - 1

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            str = str + Chr(aByte(i))

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Next

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Finally we output the message

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Console.Write(str)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        gsdll_stdout = intBytes

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Function gsdll_stderr()Function gsdll_stderr(ByVal intGSInstanceHandle As IntPtr, ByVal strz As IntPtr, ByVal intBytes As Integer) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        gsdll_stderr = gsdll_stdout(intGSInstanceHandle, strz, intBytes)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'Callback Functions End

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'API Calls Start

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'Win32 API

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'GhostScript API

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    '    Public Declare Function gsapi_revision Lib "gsdll32.dll" (ByVal pGSRevisionInfo As IntPtr, ByVal intLen As Integer) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Declare Function gsapi_revision()Function gsapi_revision Lib "gsdll32.dll" (ByRef pGSRevisionInfo As GS_Revision, ByVal intLen As Integer) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Declare Function gsapi_new_instance()Function gsapi_new_instance Lib "gsdll32.dll" (ByRef lngGSInstance As IntPtr, ByVal lngCallerHandle As IntPtr) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Declare Function gsapi_set_stdio()Function gsapi_set_stdio Lib "gsdll32.dll" (ByVal lngGSInstance As IntPtr, ByVal gsdll_stdin As StdioCallBack, ByVal gsdll_stdout As StdioCallBack, ByVal gsdll_stderr As StdioCallBack) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Declare Sub gsapi_delete_instance()Sub gsapi_delete_instance Lib "gsdll32.dll" (ByVal lngGSInstance As IntPtr)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Declare Function gsapi_init_with_args()Function gsapi_init_with_args Lib "gsdll32.dll" (ByVal lngGSInstance As IntPtr, ByVal lngArgumentCount As Integer, ByVal lngArguments As IntPtr) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Declare Function gsapi_run_file()Function gsapi_run_file Lib "gsdll32.dll" (ByVal lngGSInstance As IntPtr, ByVal strFileName As String, ByVal intErrors As Integer, ByVal intExitCode As Integer) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Declare Function gsapi_exit()Function gsapi_exit Lib "gsdll32.dll" (ByVal lngGSInstance As IntPtr) As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'API Calls End

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'User Defined Functions Start

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Function StringToAnsiZ()Function StringToAnsiZ(ByVal str As String) As Byte()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Convert a Unicode string to a null terminated Ansi string for Ghostscript.

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' The result is stored in a byte array.  Later you will need to convert

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' this byte array to a pointer with GCHandle.Alloc(XXXX, GCHandleType.Pinned)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' and GSHandle.AddrOfPinnedObject()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim intElementCount As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim intCounter As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim aAnsi() As Byte

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim bChar As Byte

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        intElementCount = Len(str)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ReDim aAnsi(intElementCount + 1)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        For intCounter = 0 To intElementCount - 1

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            bChar = Asc(Mid(str, intCounter + 1, 1))

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            aAnsi(intCounter) = bChar

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Next intCounter

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        aAnsi(intElementCount) = 0

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        StringToAnsiZ = aAnsi

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Function AnsiZtoString()Function AnsiZtoString(ByVal strz As IntPtr) As String

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim byteCh(1) As Byte

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim bOK As Boolean = True

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim gcbyteCh As GCHandle = GCHandle.Alloc(byteCh, GCHandleType.Pinned)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim ptrByte As IntPtr = gcbyteCh.AddrOfPinnedObject()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim j As Integer = 0

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        While bOK

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            ' This is how to do pointer arithmetic!

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            Dim sPtr As New IntPtr(strz.ToInt64() + j)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            CopyMemory(ptrByte, sPtr, 1)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            If byteCh(0) = 0 Then

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                bOK = False

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                str = str + Chr(byteCh(0))

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            j = j + 1

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        End While

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        AnsiZtoString = str

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Function CheckRevision()Function CheckRevision(ByVal intRevision As Integer) As Boolean

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Check revision number of Ghostscript

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim intReturn As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim udtGSRevInfo As GS_Revision

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim gcRevision As GCHandle

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        gcRevision = GCHandle.Alloc(udtGSRevInfo, GCHandleType.Pinned)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        intReturn = gsapi_revision(udtGSRevInfo, 16)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Console.WriteLine("Revision = " & udtGSRevInfo.intRevision)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Console.WriteLine("RevisionDate = " & udtGSRevInfo.intRevisionDate)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Console.WriteLine("Product = " & AnsiZtoString(udtGSRevInfo.strProduct))

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Console.WriteLine("Copyright = " & AnsiZtoString(udtGSRevInfo.strCopyright))

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        If udtGSRevInfo.intRevision = intRevision Then

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            CheckRevision = True

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            CheckRevision = False

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        gcRevision.Free()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Public Function CallGS()Function CallGS(ByVal astrGSArgs() As String) As Boolean

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim intGSInstanceHandle As IntPtr

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim aAnsiArgs() As Object

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim aPtrArgs() As IntPtr

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim aGCHandle() As GCHandle

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim iTemp As Integer

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim callerHandle As IntPtr

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim gchandleArgs As GCHandle

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim intptrArgs As IntPtr

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Print out the revision details.

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' If we want to insist on a particular version of Ghostscript

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' we should check the return value of CheckRevision().

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        CheckRevision(704)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Load Ghostscript and get the instance handle

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        intReturn = gsapi_new_instance(intGSInstanceHandle, callerHandle)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        If (intReturn < 0) Then

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            Return (False)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' Capture stdio

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim stdinCallback As StdioCallBack

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        stdinCallback = AddressOf gsdll_stdin

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim stdoutCallback As StdioCallBack

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        stdoutCallback = AddressOf gsdll_stdout

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim stderrCallback As StdioCallBack

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        stderrCallback = AddressOf gsdll_stderr

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        intReturn = gsapi_set_stdio(intGSInstanceHandle, stdinCallback, stdoutCallback, stderrCallback)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        If (intReturn >= 0) Then

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            ' Convert the Unicode strings to null terminated ANSI byte arrays

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            ' then get pointers to the byte arrays.

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            intElementCount = UBound(astrGSArgs)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            ReDim aAnsiArgs(intElementCount)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            ReDim aPtrArgs(intElementCount)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            ReDim aGCHandle(intElementCount)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            For intCounter = 0 To intElementCount

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                aAnsiArgs(intCounter) = StringToAnsiZ(astrGSArgs(intCounter))

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                aGCHandle(intCounter) = GCHandle.Alloc(aAnsiArgs(intCounter), GCHandleType.Pinned)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                aPtrArgs(intCounter) = aGCHandle(intCounter).AddrOfPinnedObject()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            Next

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            gchandleArgs = GCHandle.Alloc(aPtrArgs, GCHandleType.Pinned)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            intptrArgs = gchandleArgs.AddrOfPinnedObject()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            callerHandle = IntPtr.Zero

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            intReturn = gsapi_init_with_args(intGSInstanceHandle, intElementCount + 1, intptrArgs)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            ' Release the pinned memory

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

                aGCHandle(intCounter).Free()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            gchandleArgs.Free()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            ' Stop the Ghostscript interpreter

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            gsapi_exit(intGSInstanceHandle)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ' release the Ghostscript instance handle

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        gsapi_delete_instance(intGSInstanceHandle)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            CallGS = True

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

            CallGS = False

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Private Function ConvertFile()Function ConvertFile() As Boolean

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim astrArgs(10) As String

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(0) = "ps2pdf" 'The First Parameter is Ignored

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(1) = "-dNOPAUSE"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(2) = "-dBATCH"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(3) = "-dSAFER"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(4) = "-r300"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(5) = "-sDEVICE=pdfwrite"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(6) = "-sOutputFile=c:\out.pdf"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(7) = "-c"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(8) = ".setpdfwrite"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(9) = "-f"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(10) = "c:\gs\gs7.04\examples\colorcir.ps"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Return CallGS(astrArgs)

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Private Function InteractiveGS()Function InteractiveGS() As Boolean

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        Dim astrArgs(2) As String

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(0) = "gs" 'The First Parameter is Ignored

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(1) = "-c"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        astrArgs(2) = "systemdict /start get exec"

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    'User Defined Functions End

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    Sub Main()Sub Main()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        ConvertFile()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        'InteractiveGS()

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

        MsgBox("Done")

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

    End Sub

實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。
實作用C#和VB.NET調用Ghostscript的API,把Postscript檔案轉為PDF檔案。

End Module

繼續閱讀