Skip to content

Commit 5239c77

Browse files
committed
fixed incompatibility problem with 'gsapi_set_arg_encoding' function in Ghostscript releases prior to 9.10. (this function was introduced in 9.10 release)
fixed older versions incompatibility problem with '-dMaxBitmap=1g' switch bugfix which in some cases turns on text antialiasing for Ghostscript 9.14
1 parent 1949ebe commit 5239c77

File tree

5 files changed

+69
-12
lines changed

5 files changed

+69
-12
lines changed

Ghostscript.NET/GhostscriptLibrary.cs

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class GhostscriptLibrary : IDisposable
4242
private DynamicNativeLibrary _library;
4343
private GhostscriptVersionInfo _version;
4444
private bool _loadedFromMemory = false;
45+
private int _revision;
4546

4647
#endregion
4748

@@ -224,6 +225,12 @@ private void Initialize()
224225
if (this.gsapi_revision == null)
225226
throw new GhostscriptException(string.Format(symbolMappingError, "gsapi_revision"));
226227

228+
gsapi_revision_s rev = new gsapi_revision_s();
229+
if (this.gsapi_revision(ref rev, System.Runtime.InteropServices.Marshal.SizeOf(rev)) == 0)
230+
{
231+
_revision = rev.revision;
232+
}
233+
227234
this.gsapi_new_instance = _library.GetDelegateForFunction<gsapi_new_instance>("gsapi_new_instance");
228235

229236
if (this.gsapi_new_instance == null)
@@ -249,10 +256,13 @@ private void Initialize()
249256
if (this.gsapi_set_display_callback == null)
250257
throw new GhostscriptException(string.Format(symbolMappingError, "gsapi_set_display_callback"));
251258

252-
this.gsapi_set_arg_encoding = _library.GetDelegateForFunction<gsapi_set_arg_encoding>("gsapi_set_arg_encoding");
259+
if (is_gsapi_set_arg_encoding_supported)
260+
{
261+
this.gsapi_set_arg_encoding = _library.GetDelegateForFunction<gsapi_set_arg_encoding>("gsapi_set_arg_encoding");
253262

254-
if (this.gsapi_set_arg_encoding == null)
255-
throw new GhostscriptException(string.Format(symbolMappingError, "gsapi_set_arg_encoding"));
263+
if (this.gsapi_set_arg_encoding == null)
264+
throw new GhostscriptException(string.Format(symbolMappingError, "gsapi_set_arg_encoding"));
265+
}
256266

257267
this.gsapi_init_with_args = _library.GetDelegateForFunction<gsapi_init_with_args>("gsapi_init_with_args");
258268

@@ -314,5 +324,33 @@ private void ThrowIncompatibileNativeGhostscriptLibraryException()
314324

315325
#endregion
316326

327+
#region Revision
328+
329+
public int Revision
330+
{
331+
get { return _revision; }
332+
}
333+
334+
#endregion
335+
336+
#region is_gsapi_set_arg_encoding
337+
338+
public bool is_gsapi_set_arg_encoding_supported
339+
{
340+
get
341+
{
342+
if (_revision >= 910)
343+
{
344+
return true;
345+
}
346+
else
347+
{
348+
return false;
349+
}
350+
}
351+
}
352+
353+
#endregion
354+
317355
}
318356
}

Ghostscript.NET/Interpreter/GhostscriptInterpreter.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,8 +277,11 @@ public void Setup(GhostscriptStdIO stdIO, GhostscriptDisplayDeviceHandler displa
277277
/// </summary>
278278
public void InitArgs(string[] args)
279279
{
280-
// set the encoding to UTF8
281-
int rc_enc = _gs.gsapi_set_arg_encoding(_gs_instance, GS_ARG_ENCODING.UTF8);
280+
if (_gs.is_gsapi_set_arg_encoding_supported)
281+
{
282+
// set the encoding to UTF8
283+
int rc_enc = _gs.gsapi_set_arg_encoding(_gs_instance, GS_ARG_ENCODING.UTF8);
284+
}
282285

283286
// GSAPI: initialize the interpreter
284287
int rc_init = _gs.gsapi_init_with_args(_gs_instance, args.Length, args);
@@ -381,5 +384,14 @@ public void RunFile(string path)
381384

382385
#endregion
383386

387+
#region LibraryRevision
388+
389+
public int LibraryRevision
390+
{
391+
get { return _gs.Revision; }
392+
}
393+
394+
#endregion
395+
384396
}
385397
}

Ghostscript.NET/Processor/GhostscriptProcessor.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,10 @@ public void StartProcessing(string[] args, GhostscriptStdIO stdIO_callback)
276276

277277
_stopProcessing = false;
278278

279-
int rc_enc = _gs.gsapi_set_arg_encoding(instance, GS_ARG_ENCODING.UTF8);
279+
if (_gs.is_gsapi_set_arg_encoding_supported)
280+
{
281+
int rc_enc = _gs.gsapi_set_arg_encoding(instance, GS_ARG_ENCODING.UTF8);
282+
}
280283

281284
int rc_init = _gs.gsapi_init_with_args(instance, args.Length, args);
282285

Ghostscript.NET/Viewer/GhostscriptViewer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,11 @@ private void Open()
376376

377377
args.Add("-dDOINTERPOLATE");
378378

379-
args.Add("-dMaxBitmap=1g");
379+
// fixes bug: http://bugs.ghostscript.com/show_bug.cgi?id=695180
380+
if (_interpreter.LibraryRevision > 910)
381+
{
382+
args.Add("-dMaxBitmap=1g");
383+
}
380384

381385
_interpreter.InitArgs(args.ToArray());
382386

Ghostscript.NET/gs/iapi.h.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ namespace Ghostscript.NET
3737
[StructLayout(LayoutKind.Sequential)]
3838
public struct gsapi_revision_s
3939
{
40-
public string product;
41-
public string copyright;
42-
public Int32 revision;
43-
public Int32 revisiondate;
40+
public IntPtr product;
41+
public IntPtr copyright;
42+
public int revision;
43+
public int revisiondate;
4444
}
4545

4646
#endregion
@@ -60,7 +60,7 @@ public struct gsapi_revision_s
6060
/// <param name="len"></param>
6161
/// <returns></returns>
6262
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
63-
public delegate int gsapi_revision(out gsapi_revision_s pr, Int32 len);
63+
public delegate int gsapi_revision(ref gsapi_revision_s pr, Int32 len);
6464

6565
/// <summary>
6666
/// Create a new instance of Ghostscript.

0 commit comments

Comments
 (0)