且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。

更新时间:2022-04-18 15:27:49

利用Ghostscript提供的gsapi_vb实现转postscript为PDF,进一步成功把VB.NET代码转为C#。
所用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 IntegerAs 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 IntegerAs 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 IntegerAs 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文件。    
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_stderr()Function gsdll_stderr(ByVal intGSInstanceHandle As IntPtr, ByVal strz As IntPtr, ByVal intBytes As IntegerAs Integer
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。        gsdll_stderr 
= gsdll_stdout(intGSInstanceHandle, strz, intBytes)
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。    
End Function

实现用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 IntegerAs 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 IntegerByVal 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 StringByVal intErrors As IntegerByVal intExitCode As IntegerAs 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 StringAs 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 + 11))
实现用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文件。    
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 AnsiZtoString()Function AnsiZtoString(ByVal strz As IntPtr) As String
实现用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文件。
        Dim byteCh(1As 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文件。        
Dim str As String
实现用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文件。            
Else
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。                
str = str + Chr(byteCh(0))
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。            
End If
实现用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文件。    
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 CheckRevision()Function CheckRevision(ByVal intRevision As IntegerAs 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文件。        
Else
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。            CheckRevision 
= False
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。        
End If
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。        gcRevision.Free()
实现用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 CallGS()Function CallGS(ByVal astrGSArgs() As StringAs Boolean
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。        
Dim intReturn As Integer
实现用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文件。        
Dim intCounter As Integer
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。        
Dim intElementCount As Integer
实现用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 < 0Then
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。            
Return (False)
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。        
End If
实现用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 >= 0Then
实现用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文件。
            For intCounter = 0 To intElementCount
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。                aGCHandle(intCounter).Free()
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。            
Next
实现用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文件。        
End If
实现用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文件。        
If (intReturn >= 0Then
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。            CallGS 
= True
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。        
Else
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。            CallGS 
= False
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。        
End If
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。
实现用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文件。    
Private Function ConvertFile()Function ConvertFile() As Boolean
实现用C#和VB.NET调用Ghostscript的API,把Postscript文件转为PDF文件。        
Dim astrArgs(10As 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文件。    
End Function

实现用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(2As 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文件。        
Return CallGS(astrArgs)
实现用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文件。    
'------------------------------------------------
实现用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

 

 

本文转自RubyPdf 的中文博客博客园博客,原文链接:http://www.cnblogs.com/hardrock/archive/2006/03/01/340580.html,如需转载请自行联系原作http://www.cnblogs.com/hardrock/archive/2006/05/17/402654.html