PDF Converter Services - User & Developer Guide
PDF Converter Services - User & Developer Guide - Version 8.0 - 07/12/15 
© Copyright 2015, Muhimbi Ltd 
Page 61 of 124 
4.6.1  Cross-Converting file types using a Web Service call 
Converting files to non-PDF formats using web service calls works identical to 
converting  files  to  PDF.  The  only  difference  is  that  the Format property  on 
the ConversionSettings object must be set to the file type you are converting to. 
For details see the existing Convert to PDF sample code in chapters 4.1 and 
4.2. 
4.6.2  Convert InfoPath to MS-Word, Excel, XPS and PDF 
The PDF Converter’s cross
-conversion facility opens up a whole new world of 
possibilities such as converting between DOC and DOCX, XLS and XLSX, but 
more  importantly  it  also  supports  conversion  between  completely  different 
document types such as Excel to MS-Word and HTML to Excel. 
This section describes another new conversion type that should be of particular 
interest to InfoPath users as it is now possible to convert InfoPath forms to MS-
Word, Excel and HTML.  
Conversion to these new formats generally works very well, but there are some 
limitations  due  to  the  nature  of  these  non-PDF  based  destination  formats. 
Specifically: 
1. Attachments: When converting an InfoPath form to PDF the software also 
converts  all  attachments and  merges  them  into  the  main  PDF.  This  is 
possible because you can represent almost any  file format  in PDF and 
merge them together. Unfortunately this is not possible when converting to 
HTML, MS-Word or Excel. 
2. View Selection: The software provides a number of ways to specify which 
view  or  views  to  convert  (See  chapter  4.12 Controlling which InfoPath 
views to Export to PDF). When converting to PDF it is possible to specify 
multiple  views,  which  the  converter then  merges  together  into  a  single 
document. When converting to HTML, MS-Word or Excel it is only possible 
to convert a single view as these file formats don’t 
support merging. As a 
workaround it is possible to 
create a ‘conversion specific view’ and combine 
the content of multiple views in it.  
Print  Views  are also ignored when converting to HTML, Word or Excel. 
Instead you will need to use 
Muhimbi’s View Selection facilities
if you wish 
to convert any view other than the default View. 
3. Formatting: PDF is a very flexible format that allows any content to be 
placed  anywhere  on  the  page.  MS-Word,  Excel  and  HTML  are  not 
necessarily this flexible. For example, Excel uses a ‘cell based approach’ to 
display content. If an InfoPath form is not specifically designed for export to 
Excel, e.g. it uses nested tables or different column widths across a page, 
then you may need to optimise your InfoPath form for conversion, or create 
a ‘conversion specific view’.
Some hints and tips related to converting to the various non-PDF formats can 
be found below. 
Pdf find and replace text - search text inside PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn how to search text in PDF document and obtain text content and location information
search text in pdf image; how to select text in a pdf
Pdf find and replace text - VB.NET PDF Text Search Library: search text inside PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn How to Search Text in PDF Document and Obtain Text Content and Location Information in VB.NET application
pdf editor with search and replace text; search pdf for text in multiple files
PDF Converter Services - User & Developer Guide
PDF Converter Services - User & Developer Guide - Version 8.0 - 07/12/15 
© Copyright 2015, Muhimbi Ltd 
Page 62 of 124 
InfoPath to HTML (MHT) 
When converting InfoPath to HTML the resulting file is a self contained MHT 
file that most modern browsers can display. All information including images, 
HTML and style sheets are included in this single file.  
From left to right, the same Form in InfoPath, converted to PDF and converted to HTML 
As this image shows, InfoPath data can be represented in HTML really well so 
it is usually not needed to make any changes to the XSN file. 
InfoPath to MS-Word 
Depending on how an InfoPath form has been designed, some work may be 
required  to  make  things  look  better  when  converting  to  MS-Word.  This  is 
mainly  due  to  the  fact  that  MS-Word  does  not  like  dimensions  that  are 
expressed in percentages, while it is common in InfoPath to create a table grid 
and populate that grid with controls that take up 100% of the available cell 
space.  
Results when converted to MS-Word before optimisation (left) and afterwards (right). 
VB.NET PDF replace text library: replace text in PDF content in vb
and ASP.NET webpage. Find and replace text in PDF file in preview without adobe PDF reader component installed. Able to pull text
pdf searchable text; pdf make text searchable
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
When you have downloaded the RasterEdge Image SDK for .NET, you can unzip the package to find the RasterEdge.Imaging.PDF.dll in the bin folder under the root
cannot select text in pdf; text select tool pdf
PDF Converter Services - User & Developer Guide
PDF Converter Services - User & Developer Guide - Version 8.0 - 07/12/15 
© Copyright 2015, Muhimbi Ltd 
Page 63 of 124 
Looking at the ‘before optimisation’ conversion results in the image displayed 
above, there are 2 things that stand out: 
1. Dimension of text fields: The dimensions of most text fields are not quite 
right. This can easily be changed by opening the form in InfoPath Designer 
and changing  the  width  of  the  various  fields  from  ‘100%’  to  the  actual 
dimensions in cm or inches. 
2. 
Missing  ‘year’  in  date  picker  fields
: Due  the  way  the Date  Picker  is 
structured internally, modifying its width does not translate properly when 
displayed  in  MS-Word. To  solve this, change  the date  picker field  to a 
regular text field either by creating a conversion specific view, or using a 
display rule. 
The InfoPath to MS-Word facility can generate output in doc, docx, rtf, txt, html 
and odt formats. 
InfoPath to Excel 
InfoPath  to  Excel  conversion  for  existing  forms  that  are  not  optimised  for 
conversion to Excel are probably the trickiest ones to get right. If the ‘look and 
feel’ of the Excel sheet 
is not important then no change is required. However, if 
the Excel forms need to ‘look good’ then you may need to rethink the way the 
form is designed.  
Results when converted to Excel before optimisation (left) and afterwards (right).
Looking at the ‘before optimisation’ in the image above things don’t look too 
bad, but clearly it is not the same as the original. The main  issues are  as 
follows: 
1. Column Widths:  As  Excel  uses  a  cell  /  grid  based  approach  it  is  not 
possible  to  mix  different  column  widths.  The  information  in 
the  form’s 
header requires different column width and spans than the columns used in 
the repeating table further  down the  page.  By  changing the horizontally 
oriented  fields  in  the  header  to  individual rows we no longer  have this 
problem. 
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
document. If you find certain page in your PDF document is unnecessary, you may want to delete this page directly. Moreover, when
pdf text search tool; search text in pdf using java
VB.NET Create PDF Library SDK to convert PDF from other file
Create writable PDF file from text (.txt) file in VB.NET project. you can download the RasterEdge .NET Image SDK and find the PDF processing component DLL
find text in pdf image; searching pdf files for text
PDF Converter Services - User & Developer Guide
PDF Converter Services - User & Developer Guide - Version 8.0 - 07/12/15 
© Copyright 2015, Muhimbi Ltd 
Page 64 of 124 
2. Number formats: D
epending on a cell’s content
, Excel sometimes tries to 
be ‘clever’. Most of the time this works great, but in this case a field with 
value  ‘007’  is  changed  into  a  ‘7’.  This  could  be  fixed  by  changing  the 
content  of  the  InfoPath  field  into  a  formula  and  concatenating  an 
apostrophe in front of it. 
The InfoPath to Excel facility can generate output in xls, xlsx, csv and ods  
format. 
C# HTML5 PDF Viewer SDK deployment on Visual Studio .NET
Unzip the download package and you can find a project XDoc.PDF.HTML5 Viewer Demo or XDoc.PDF.HTML5 Editor Once done debugging with x86 dlls, replace the x86
pdf text searchable; search a pdf file for text
VB.NET PDF - Deploy VB.NET HTML5 PDF Viewer on Visual Studio.NET
to How to Build Online VB.NET PDF Viewer in Unzip the download package and you can find a project named XDoc Once done debugging with x86 dlls, replace the x86
how to select all text in pdf file; find and replace text in pdf file
PDF Converter Services - User & Developer Guide
PDF Converter Services - User & Developer Guide - Version 8.0 - 07/12/15 
© Copyright 2015, Muhimbi Ltd 
Page 65 of 124 
4.7  Merging multiple files into a single PDF using .NET 
The following example  describes the steps needed to convert all files  in a 
directory, merge the results into a single file and apply page numbering to the 
merged file using the built in watermarking engine. We are using Visual Studio 
and C#, but any environment that can invoke web services should be able to 
access  this  functionality.  Note  that  the  WSDL  can  be  found  at 
http://localhost:41734/Muhimbi.DocumentConverter.WebService/?wsdl.  
1.  Start a new Visual Studio project and create the project type of your choice. 
In this example we are using a standard .net 3.0 project of type Windows 
Forms Application
. Name it ‘Simple PDF Converter Sample’.
2.  Add a TextBox and Button control to the form. Accept the default names 
of textBox1  and button1
3.  In  the Solution Explorer  window,  right-click References  and  select Add 
Service Reference. (Do not use web references!) 
4.  In the Address box enter the WSDL address listed in the introduction of this 
section. If the Conversion Service is located on a different machine then 
substitute localhost 
with the server’s name.
5.  Accept  the  default  Namespace  of ServiceReference1 and  click  the OK 
button to generate the proxy classes. 
6.  Double click Button1 and replace the content of the entire code file with the 
following: 
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.ServiceModel; 
using System.Windows.Forms; 
using Simple_PDF_Converter_Sample.ServiceReference1; 
namespace Simple_PDF_Converter_Sample 
public partial class Form1 Form 
// ** The URL where the Web Service is located. Amend host name if needed. 
string SERVICE_URL = "http://localhost:41734/Muhimbi.DocumentConverter.WebService/"; 
public Form1() 
InitializeComponent(); 
private void button1_Click(object sender, EventArgs e) 
DocumentConverterServiceClient client = null; 
try 
// ** Options and all settings for batch conversion 
ProcessingOptions processingOptions = new ProcessingOptions(); 
// ** Specify the minimum level of merge settings 
MergeSettings mergeSettings = new MergeSettings(); 
mergeSettings.BreakOnError = false
mergeSettings.Watermarks = CreateWatermarks(); 
C# PDF File Permission Library: add, remove, update PDF file
Text: Replace Text in PDF. Image: Insert Image to PDF. Image: Remove Image from using RasterEdge.XDoc.PDF; In the following code table, you will find a piece of
convert a scanned pdf to searchable text; pdf select text
VB.NET PDF File Permission Library: add, remove, update PDF file
to PDF. Text: Delete Text from PDF. Text: Replace Text in PDF. In the following code table, you will find a VB NET code sample for how to set PDF file permissions
convert pdf to word searchable text; how to select all text in pdf
PDF Converter Services - User & Developer Guide
PDF Converter Services - User & Developer Guide - Version 8.0 - 07/12/15 
© Copyright 2015, Muhimbi Ltd 
Page 66 of 124 
processingOptions.MergeSettings = mergeSettings; 
// ** Get all files in the folder 
string sourceFolder = textBox1.Text; 
string[] sourceFileNames = Directory.GetFiles(sourceFolder); 
// ** Iterate over all files and create a list of SourceFile Objects 
List<SourceFile> sourceFiles = new List<SourceFile>(); 
foreach (string sourceFileName in sourceFileNames) 
// ** Read the contents of the file 
byte[] sourceFileContent = File.ReadAllBytes(sourceFileName); 
// ** 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.Fidelity = ConversionFidelities.Full; 
conversionSettings.Quality = ConversionQuality.OptimizeForPrint; 
// ** Create merge settings for each file and set name for the PDF bookmark 
FileMergeSettings fileMergeSettings = new FileMergeSettings(); 
fileMergeSettings.TopLevelBookmark = openOptions.OriginalFileName; 
// ** Create a source file object and add it to the list 
SourceFile sourceFile = new SourceFile(); 
sourceFile.OpenOptions = openOptions; 
sourceFile.ConversionSettings = conversionSettings; 
sourceFile.MergeSettings = fileMergeSettings; 
sourceFile.File = sourceFileContent; 
sourceFiles.Add(sourceFile); 
// ** Assign source files 
processingOptions.SourceFiles = sourceFiles.ToArray(); 
// ** Open the service and configure the bindings 
client = OpenService(SERVICE_URL); 
// ** Carry out the merge process 
BatchResults results = client.ProcessBatch(processingOptions); 
// ** Read the results of the merged file. 
byte[] mergedFile = results.Results[0].File; 
// ** Write the converted file back using the name of the folder 
string folderName = new DirectoryInfo(sourceFolder).Name; 
DirectoryInfo parentFolder = Directory.GetParent(sourceFolder); 
string destinationFileName = Path.Combine(parentFolder.FullName,  
folderName + ".pdf"); 
using (FileStream fs = File.Create(destinationFileName)) 
fs.Write(mergedFile, 0, mergedFile.Length); 
fs.Close(); 
MessageBox.Show("Contents of directory merged to " + destinationFileName); 
catch (FaultException<WebServiceFaultException> ex) 
MessageBox.Show("FaultException occurred: ExceptionType: " + 
ex.Detail.ExceptionType.ToString()); 
catch (Exception ex) 
MessageBox.Show(ex.ToString()); 
finally 
CloseService(client); 
PDF Converter Services - User & Developer Guide
PDF Converter Services - User & Developer Guide - Version 8.0 - 07/12/15 
© Copyright 2015, Muhimbi Ltd 
Page 67 of 124 
/// <summary> 
/// Configure the Bindings, 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 Timeout to deal with (very) long running requests. 
binding.SendTimeout = TimeSpan.FromMinutes(30); 
binding.ReceiveTimeout = TimeSpan.FromMinutes(30); 
// ** Set the maximum document size to 40MB 
binding.MaxReceivedMessageSize = 50 * 1024 * 1024
binding.ReaderQuotas.MaxArrayLength = 50 * 1024 * 1024
binding.ReaderQuotas.MaxStringContentLength = 50 * 1024 * 1024
// ** Specify an identity (any identity) in order to get it 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(); 
/// <summary> 
/// This method creates watermarks for applying page numbers 
/// </summary> 
/// <returns>Array of watermarks</returns> 
private Watermark[] CreateWatermarks() 
// ** Create watermark container 
Watermark pageWatermark = new Watermark(); 
// ** Set positioning to the lower right of the page 
pageWatermark.HPosition = HPosition.Right; 
pageWatermark.VPosition = VPosition.Bottom; 
// ** Set size 
pageWatermark.Width = "200"
pageWatermark.Height = "20"
// ** Create text object for the page numbering  
Text oddPageText = new Text(); 
// ** No need to position the element in the watermark container 
PDF Converter Services - User & Developer Guide
PDF Converter Services - User & Developer Guide - Version 8.0 - 07/12/15 
© Copyright 2015, Muhimbi Ltd 
Page 68 of 124 
oddPageText.Width = "200"
oddPageText.Height = "20"
// ** set content including field codes 
oddPageText.Content = "Page {PAGE} of {NUMPAGES}"
// ** set font properties 
oddPageText.FillColor = "#ffff0000"
oddPageText.FontFamilyName = "Verdana"
oddPageText.FontSize = "10"
oddPageText.FontStyle = FontStyle.Regular; 
//* set text alignment 
oddPageText.HAlign = HAlign.Right; 
oddPageText.VAlign = VAlign.Top; 
//** create array of watermark elements 
Element[] pageWatermarkElements = new Element[] { oddPageText }; 
//** set elements of watermark 
pageWatermark.Elements = pageWatermarkElements; 
//* return array of watermarks 
return new Watermark[] { pageWatermark }; 
Providing the project and all controls are named as per the steps above, it 
should compile without errors. Run it, enter the full path to a folder that holds a 
couple of text files (PDF, Word, Excel, etc) and click the button to start the 
convert and merge process. The operation may take a while depending on the 
number and complexity of files in the folder. 
Note  that  in  this  example  we  are  programmatically  configuring  the  WCF 
Bindings and End Points. If you wish you can use a declarative approach using 
the  config  file.  For  more  information  about  working  with  WCF  see 
http://msdn.microsoft.com/en-us/library/ms735119(v=VS.90).aspx
A  more  complex  and  full  featured  sample  application  is  installed,  with  full 
source code, alongside the Conversion Service. 
PDF Converter Services - User & Developer Guide
PDF Converter Services - User & Developer Guide - Version 8.0 - 07/12/15 
© Copyright 2015, Muhimbi Ltd 
Page 69 of 124 
4.8  Merging multiple files into a single PDF using Java 
The following sample merges all files specified on the command line into a 
single  PDF.  If  the  source  files  are  not  already  in  PDF  format  then  it 
automatically converts them in the process. A PDF bookmark is automatically 
generated for each merged file as well. 
The full version of the sample code discussed in this chapter, including pre 
generated proxies, is installed alongside  each copy of the product. Use the 
Start Menu to open the appropriate folder. The latest version of this tutorial can 
be  found on-line at http://blog.muhimbi.com/2011/12/converting-and-merging-
multiple-files.html
.  
For details about setting up all Java prerequisites as well as using wsimport to 
generate Java proxies for the web service see section 4.2 PDF Conversion in 
Java
Once  the proxy classes  have  been  created  add the following code to  your 
project.  Run  the  code  and  make  sure  the  paths  to  multiple  documents  to 
convert and merge are specified on the command line.  
package com.muhimbi.app; 
import com.muhimbi.ws.*; 
import java.io.*; 
import java.net.URL; 
import javax.xml.bind.JAXBElement; 
import javax.xml.namespace.QName; 
public class WsClient { 
private final static String DOCUMENTCONVERTERSERVICE_WSDL_LOCATION =  
"http://localhost:41734/Muhimbi.DocumentConverter.WebService/?wsdl"; 
private static ObjectFactory _objectFactory = new ObjectFactory(); 
public static void main(String[] args) { 
try { 
if (args.length == 0) { 
System.out 
.println("Please specify one or more file names to convert and merge."); 
else 
System.out.println("Merging files"); 
// ** Initialise Web Service 
DocumentConverterService_Service dcss = new DocumentConverterService_Service( 
new URL(DOCUMENTCONVERTERSERVICE_WSDL_LOCATION),  
new QName("http://tempuri.org/""DocumentConverterService")); 
DocumentConverterService dcs = dcss.getBasicHttpBindingDocumentConverterService(); 
// ** Get the options for all files that need to be merged 
ProcessingOptions processingOptions = getProcessingOptions(args); 
// ** Carry out the merging (and converting if needed) 
BatchResults results = dcs.processBatch(processingOptions); 
// ** Get the content of the first file, which holds the merged file in the byte array 
byte[] convertedFile = 
results.getResults().getValue().getBatchResult().get(0).getFile().getValue(); 
// ** Write converted file to file system 
writeFile(convertedFile, "merged.pdf"); 
PDF Converter Services - User & Developer Guide
PDF Converter Services - User & Developer Guide - Version 8.0 - 07/12/15 
© Copyright 2015, Muhimbi Ltd 
Page 70 of 124 
System.out.println("Files merged into 'merged.pdf'"); 
catch (IOException e) { 
System.out.println(e.getMessage()); 
catch (DocumentConverterServiceProcessBatchWebServiceFaultExceptionFaultFaultMessage e) { 
printException(e.getFaultInfo()); 
public static ProcessingOptions getProcessingOptions(String[] sourceFileNames) throws 
IOException 
// ** Options and all settings for batch conversion 
ProcessingOptions processingOptions = new ProcessingOptions(); 
// ** Specify the minimum level of merge settings, optionally add watermarks and security 
MergeSettings mergeSettings = new MergeSettings(); 
mergeSettings.setBreakOnError(false); 
processingOptions.setMergeSettings( 
_objectFactory.createProcessingOptionsMergeSettings( mergeSettings )); 
// ** Create an array of files to merge 
ArrayOfSourceFile sourceFiles = new ArrayOfSourceFile(); 
for(int i =0; i<sourceFileNames.length; i++) 
SourceFile sourceFile = getSourceFile(sourceFileNames[i]); 
sourceFiles.getSourceFile().add(sourceFile); 
processingOptions.setSourceFiles(  
_objectFactory.createProcessingOptionsSourceFiles(sourceFiles)); 
return processingOptions; 
public static SourceFile getSourceFile(String fileName) throws IOException 
File file = new File(fileName); 
// ** Read the contents of the file 
System.out.println("- Reading: " + fileName); 
byte[] sourceFileContent = readFile(fileName); 
// ** Set the absolute minimum open options 
OpenOptions openOptions = getOpenOptions(getFileName(file), getFileExtension(file) ); 
// ** Set the absolute minimum conversion settings. 
ConversionSettings conversionSettings = getConversionSettings(); 
// ** Create merge settings for each file and set the name for the PDF bookmark 
FileMergeSettings fileMergeSettings = new FileMergeSettings(); 
fileMergeSettings.setTopLevelBookmark(  
_objectFactory.createFileMergeSettingsTopLevelBookmark( file.getName() )); 
// ** Create a source file object and return it 
SourceFile sourceFile = new SourceFile(); 
sourceFile.setOpenOptions(_objectFactory.createSourceFileOpenOptions(openOptions)); 
sourceFile.setConversionSettings( 
_objectFactory.createSourceFileConversionSettings(conversionSettings)); 
sourceFile.setMergeSettings(_objectFactory.createSourceFileMergeSettings(fileMergeSettings)); 
sourceFile.setFile(_objectFactory.createSourceFileFile(sourceFileContent)); 
return sourceFile; 
public static OpenOptions getOpenOptions(String fileName, String fileExtension) { 
OpenOptions openOptions = new OpenOptions(); 
// ** Set the minimum required open options. Additional options are available 
openOptions.setOriginalFileName(_objectFactory.createOpenOptionsOriginalFileName(fileName)); 
openOptions.setFileExtension(_objectFactory.createOpenOptionsFileExtension(fileExtension)); 
Documents you may be interested
Documents you may be interested