Using GDPicture from Code
It’s possible to make calls to the web service from a client application, which forces the use of the GdPicture converter. First, the web service needs to be configured.
Copy the GdPicture converter node and paste a copy underneath. Rename it to GdPicture High Fidelity and set fidelity
to High:
<add key="GdPicture High Fidelity" description="GdPicture Converter" fidelity="High" maxInstances="2" supportedExtensions="docx,docm,dotx,doc,dot,rtf,htm,html,mht,mhtml,xml,tif,xls, xlsx,xlsm,csv,ppt,pptx,pptm,ps,msg,eml,dxf,cur,wsq,gif,bmp, cut,dds,dib,dicom,exif,exr,fax,g3,hdr,heif,heic,iff,ico,j2k, j2c,webp, jb2,jbig2,jif,jfif,jng,jp2,jpeg,jpg,jpe,koa,lbm, mng,pbm,pcd,pct,pict,pic,pcx,pdf,pfm,pgm,psd,png,pnm,ppm,ras,raw, rle,sgi,svg,tga,targa,tiff,tif,wbmp,wap,wbm,xbm,xpm" supportedOutputFormats="pdf" type="Muhimbi.DocumentConverter.WebService.GdPictureConverter, Muhimbi.DocumentConverter.WebService, Version=1.0.1.1, Culture=neutral, PublicKeyToken=c9db4759c9eaad12" />
After that, any calls to the web service requesting “High” fidelity conversion will use the GdPicture converter, thanks to this second configuration element.
static void Main(string[] args) { DocumentConverterServiceClient client = null; try { // ** Delete any processed files from a previous run. foreach (FileInfo f in new DirectoryInfo(".").GetFiles("*.pdf")) f.Delete(); // ** Determine the source file and read it into a byte array. string sourceFileName = null; if (args.Length == 0) { // ** If nothing is specified, then read the first PDF file from the current folder. string[] sourceFiles = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.docx"); if (sourceFiles.Length > 0) sourceFileName = sourceFiles[0]; else { Console.WriteLine("Please specify a document to convert."); Console.ReadKey(); return; } } else sourceFileName = args[0]; byte[] sourceFile = File.ReadAllBytes(sourceFileName); // ** Open the service and configure the bindings. client = OpenService(SERVICE_URL); //** Set the absolute minimum open options. OpenOptions openOptions = new OpenOptions(); openOptions.OriginalFileName = Path.GetFileName(sourceFileName); openOptions.FileExtension = Path.GetExtension(sourceFileName); // ** Set the absolute minimum conversion settings. ConversionSettings conversionSettings = new ConversionSettings(); conversionSettings.Format = OutputFormat.PDF; conversionSettings.Fidelity = ConversionFidelities.High; // ** Carry out the conversion. Console.WriteLine("Converting file " + sourceFileName + "."); byte[] convFile = client.Convert(sourceFile, openOptions, conversionSettings); // ** Write the processed file back to the file system with a PDF extension. string destinationFileName = Path.GetFileNameWithoutExtension(sourceFileName) + ".pdf"; using (FileStream fs = File.Create(destinationFileName)) { fs.Write(convFile, 0, convFile.Length); fs.Close(); } Console.WriteLine("File written to " + destinationFileName); // ** Open the generated PDF file in a PDF reader. Console.WriteLine("Launching file in PDF Reader"); Process.Start(destinationFileName); } catch (FaultException<WebServiceFaultException> ex) { Console.WriteLine("FaultException occurred: ExceptionType: " + ex.Detail.ExceptionType.ToString()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { CloseService(client); } Console.ReadKey(); } /// <summary> /// Configure the bindings and endpoints and open the service using the specified address. /// </summary> /// <returns>An instance of the web service.</returns> public static DocumentConverterServiceClient OpenService(string address) { DocumentConverterServiceClient client = null; try { BasicHttpBinding binding = new BasicHttpBinding(); // ** Use standard Windows Security. binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; // ** Increase the client timeout to deal with (very) long running requests. binding.SendTimeout = TimeSpan.FromMinutes(120); binding.ReceiveTimeout = TimeSpan.FromMinutes(120); // ** Set the maximum document size to 50MB. binding.MaxReceivedMessageSize = 50 * 1024 * 1024; binding.ReaderQuotas.MaxArrayLength = 50 * 1024 * 1024; binding.ReaderQuotas.MaxStringContentLength = 50 * 1024 * 1024; // ** Specify an identity (any identity) to get past .net3.5 sp1. EndpointIdentity epi = EndpointIdentity.CreateUpnIdentity("unknown"); EndpointAddress epa = new EndpointAddress(new Uri(address), epi); client = new DocumentConverterServiceClient(binding, epa); client.Open(); return client; } catch (Exception) { CloseService(client); throw; } } /// <summary> /// Check if the client is open and then close it. /// </summary> /// <param name="client">The client to close</param> public static void CloseService(DocumentConverterServiceClient client) { if (client != null && client.State == CommunicationState.Opened) client.Close(); }