c# pdf to image ghostscript : Convert pdf fill form SDK application project winforms html windows UWP Yildiz_MasterThesis5-part526

disease, with </text>
<text top="950" left="469" width="320" height="14" font="1">spectrum of severity ranging from self-limited
to </text>
<text top="968" left="469" width="312" height="14" font="1">progressive disease indistinguishable from
<text top="986" left="469" width="327" height="14" font="1">Associated drugs include idoxuridine,
<text top="1004" left="469" width="272" height="14" font="1">epinephrine, timolol, and
<text top="1143" left="841" width="8" height="14" font="1">5</text>
Figure 15: XML code of the table in Figure 14.
We can see some properties of the output data:
1.  The tool returns all of the text chunks in the PDF file as text elements.
2.  The tool returns the text elements in the order they appear in the original file.
3.  Each text element has five attributes: top, left, width, height, and font. These attributes
give information about the exact position of the text in the original file and its size.
4.  Text elements that were formatted as bold or italic have additional <b> or <i> tags.
5.  The tool processes the PDF file line by line and splits text chunks that logically belong
together. For example, the first row in the table “Type of Conjunctivitis” is split into
two text elements, the first one contains the text “Type of” and the second contains the
text “Conjunctivitis”.
5.2.2  The Approach
After all these considerations I decided to make use of the heuristic based approach. For that
purpose, I build a rule set which can be considered in two parts. The first part contains the
rules about the table recognition task and the second one contains the rules about the table
decomposition task.
The properties of the output data of the pdf2html tool listed in 5.2.1, affect the algorithm to
recognize and decompose the tables. Before I give detailed information about the algorithm, I
will explain some terms that I will use later on.
  Single-Line: A line with only one text element (i.e., just one element with the same
  Multi-Line: A line with more than one text elements (i.e., more than one consecutive
text elements has the same top-value).
  Multi-Line Block: Group of consecutive multi-lines.
  Average distance of a multi-line block: The average distance between the top values
of the lines in a multi-line block.
  Maximum number of elements in a multi-line block: The maximum number of
elements in a multi-line in a multi-line block.
My  algorithm  extracts the  table  information in two  steps. I called  the first step  first
classification and the second step second classification. In the following, I will give the
pseudo-codes of these two steps.
First classification:
1.  Go through all the text elements on a page.
2.  For each text element check whether there are other text elements that follow the first
one having the same top value, or not.
Convert pdf fill form - C# PDF Form Data fill-in Library: auto fill-in PDF form data in C#.net, ASP.NET, MVC, WinForms, WPF
Online C# Tutorial to Automatically Fill in Field Data to PDF
convert excel to fillable pdf form; create fillable forms in pdf
Convert pdf fill form - VB.NET PDF Form Data fill-in library: auto fill-in PDF form data in vb.net, ASP.NET, MVC, WinForms, WPF
VB.NET PDF Form Data fill-in library: auto fill-in PDF form data in vb.net, ASP.NET, MVC, WinForms, WPF
asp.net fill pdf form; change font pdf fillable form
one having the same top value, or not.
3.  Put the text elements with the same top value together and mark this line as multi-line.
4.  If there are no other text elements with the same top value, mark this line as a single-
5.  The occurrence of one multi-line starts a multi-line block.
6.  The occurrence of a single-line ends a multi-line block.
Figure 16: Pseudo-code for the first classification step
Sometimes it can be that the occurrence of a single-line has not to mean that a multi-line
block ends. I will explain this on the following example.
Figure 17: Example for a single-line that not indicates the end of a multi-line block
Here the text elements “Vernal” and “Hot, dry environments such as West Africa; parts of”
build together a multi-line. Then, the text element “India, Mexico, Central, North, and South
America;” follows. In this case, this element not indicates the end of the multi-line block, but
belong to a text element in the previous line. To take account of such cases, another rule
comes into action:
If a single-line occurs directly after a multi-line, check whether this single text element
belongs to any of the text elements in the previous multi-line.
A text element belongs to one text element of the previous line if it lies under one of these text
<text top="743" left="258" width="41" height="14" font="1">Vernal</text>
<text top="743" left="469" width="342" height="14" font="1">Hot, dry environments such as West Africa;
parts of </text>
<text top="761" left="469" width="331" height="14" font="1">India, Mexico, Central, North, and South
America; </text>
Figure 18: XML code of the table fragment in Figure 17.
As you can see the left value of the mentioned single text element and the second text element
of the multi-line are the same, namely “469”. In such cases the multi-line block goes on,
indicating that the single-line belongs logically to the multi-line block.
After the first classification the multi-line blocks are identified. The next step is to combine
multi-line blocks that belong to each other.
Second classification:
1.  Go through all the multi-line blocks.
2.  Determine the number of lines between each pair of multi-line blocks.
3.  If the lines that lie between two multi-line blocks are less or equal than three, the two
multi-line blocks belong together with a high probability. Thus, these two blocks are
merged (i.e. the second block is attached at the end of the first block).
4.  If the lines that lie between two multi-line blocks are greater than three and less or equal
than five, these two blocks might belong together but with a less probability. The lines
between these two blocks are tried to be assigned to the first block. If this process
succeeds and there are no lines left between them, these two blocks are merged.
5.  // Once the multi-line blocks are identified, the structure of each multi-line block has to
// be determined. First, the lines that belong together (e.g., parts of the same sentence)
// has to be identified.
VB.NET PDF Password Library: add, remove, edit PDF file password
passwordSetting.IsAnnot = True ' Allow to fill form. passwordSetting document. passwordSetting.IsAssemble = True ' Add password to PDF file.
create fillable pdf form from word; convert fillable pdf to html form
C# PDF Password Library: add, remove, edit PDF file password in C#
passwordSetting.IsAnnot = true; // Allow to fill form. passwordSetting document. passwordSetting.IsAssemble = true; // Add password to PDF file.
pdf fill form; create fillable form from pdf
6.  Go through all lines in the multi-line block.
7.  Compare the text elements on one line with the text elements on the next line.
8.  If two text elements on continuous lines have almost the same left value, the same
format and the difference of their top values are not that big, these text elements
assumed to belong together. The difference of their top values has to be less than the
average distance of this multi-line block. If two text elements fit these requirements they
are merged. To merge two lines, all the text elements on the second line must be merged
to the text elements on the previous line.
9.  // Once the belonging lines are merged, we have to find a title if there is one.
10. Go maximal ten lines backward and look whether this line contains a title.
11. For each of these lines, check whether the text element on this line lies approximately at
the centre of the multi-line blocks side boundaries or the text contains the string “table”.
12. // Whether or not a title is found, the next step is to determine the header part of the
// table.
13. The first line with the amount of elements equal to the maximum number of elements in
this multi-line block is the last line of the header. Thus, the next line is the first data row.
14. The lines going backward from the last line of the header are being explored.
15. For each text element on the header lines there are two possibilities: this element is itself
a super-header (i.e. a header at the top of the hierarchy), this element has a super-header
that lies above him. For the latter case the super-header for this element must be
determined. There are four possibilities:
a.  The text element lies directly under a text element on the previous line.
b.  The left-point of the text element lies under a text element on the previous line.
c.  The right-point of the text element lies under a text element on the previous line.
d.  The text element lies completely on the left of a text element on the previous line.
e.  The text element lies completely on the right of a text element on the previous line.
16. If case d or e occurs the text element is assigned to the element that is nearest to this
17. // After constructing the header part, the data-rows are explored to assign each text
// element to a header element.
18. For each line from the first data row line on, assign the elements on this line to a header
element on the last header line using the rules listed above.
Figure 19: Pseudo-code of the second classification step
5.2.3 Limitations of the Approach
Because of the complexity of the task, the bugs in the pdf2html tool, and the heuristic based
approach which cannot cover all table structure, you cannot assume that this tool returns you a
perfect conversion for each table. You should expect that a post-process in form of changes in
the user interface must be done in almost each case. Therefore, you should always control the
output of the tool and you should use the “with interaction” option of the interface, because to
correct the false points as early as possible is the best solution.
All these steps and rules, explained in 5.2.2 have the aim to construct the table as good as
possible and likely to its original. But this is often not reached because of several reasons:
The tool that I used for getting the text elements out of the PDF file contains a number of bugs
that affect the result of my heuristic based approach. This is a direct result of the nature of this
approach. Namely, all the rules are based on assumptions. The basic and most important
assumption is that the XML code returned from the pdf2html tool contains correctly extracted
data. If that is not the case, the result of my implementation would suffer.
C# WPF PDF Viewer SDK to annotate PDF document in C#.NET
Text box. Click to add a text box to specific location on PDF page. Line color and fill can be set in properties. Copyright © <2000-2016> by <RasterEdge.com>.
convert pdf fill form; add fillable fields to pdf
VB.NET PDF - Annotate PDF with WPF PDF Viewer for VB.NET
Text box. Click to add a text box to specific location on PDF page. Line color and fill can be set in properties. Copyright © <2000-2016> by <RasterEdge.com>.
attach image to pdf form; create pdf fill in form
The  pdf2html-tool  has  some  known  bugs  that  are  listed  in  the  readme-file  of  the
implementation. But the worst bug is the following: “Plain (non-complex) output might not
preserve the order of text sometimes.” This is the worst bug, because all the rules I have set,
are based on the assumption that the text elements in the pdf2html output file are in the same
order as in the original PDF file.
To meet these bugs I decided to implement a graphical user interface which can be used to
make changes on the extracted tables.
But there are limitations of the pdf2html tool that cannot be addressed with the GUI. For
example, the pdf2html tool has no facilities to extract text from a graphic in a PDF file. Thus,
if a table in a PDF file is actually a graphic, no information can be extracted and my algorithm
also cannot extract anything.
5.2.4 The Graphical User Interface (GUI)
The graphical user interface (GUI) allows the user to make changes on the extracted table. I
will explain the usage and the benefits of this GUI by an example.
After starting the program, the following interface appears on the screen:
Figure 20: User interface of the extraction tool
Using this interface, the user can browse for a source PDF file and for a directory where the
resulting files should be saved. The output of this tool consists of five files saved in the given
directory. For a PDF file with the name “example.pdf” the resulting files would be:
1.  example.xml: This file is the result of the used pdf2html conversion tool.
2.  pdf2xml.dtd: This is the DTD for the example.xml file.
3.  output.xml: This file contains the extracted table information in XML form.
4.  tables.dtd: This is the DTD for the output.xml file.
5.  table_view.xsl: This file contains the style-sheet for the output.xml file.
The user can set the interval of pages of the source file, which the program has to explore for
finding tables. Depending on the selection of the “interactive extraction” checkbox, the
program can either extract the tables and then can terminate, or can allow the user to make
changes on the extracted tables. I will explain you the latter by an example.
As the source file, I will use the paper [Riloff, 1999] with setting the page interval between
page 4 and page 18. On page 18 there is the following table, which is the table I want to be
VB.NET PDF - Annotate PDF Online with VB.NET HTML5 PDF Viewer
on PDF page. Outline width, outline color, fill color and transparency are all can be altered in properties. Drawing Tab. Item. Name. Description. 7. Draw free
convert excel spreadsheet to fillable pdf form; pdf fillable form
C# HTML5 PDF Viewer SDK to annotate PDF document online in C#.NET
on PDF page. Outline width, outline color, fill color and transparency are all can be altered in properties. Drawing Tab. Item. Name. Description. 7. Draw free
convert word document to pdf fillable form; convert html form to pdf fillable form
Figure 21: An example for a table with spanning columns
As you can see, this is a complex table in the sense that it contains spanning columns and a
header part with hierarchy level two.
After the program has extracted the tables in the file, the following interface appears.
Figure 22: User interface that appear after extracting the paper [Riloff, 1999]
As you can see, the GUI consists of a panel where the extracted information is displayed, and
of seven buttons which have various functionalities. First, I will explain the functionalities of
the buttons and then the part with the extracted information.
Next Table: There is always the possibility that a file contain more than one table. In such
cases the user might want to go through all the extracted tables to control and perhaps correct
Previous Table: In some cases the user might want to go back and take a look at a previous
table and perhaps make additional changes on it.
VB.NET PDF Form Data Read library: extract form data from PDF in
RasterEdge .NET PDF SDK is such one provide various of form field edit functions. Demo Code to Retrieve All Form Fields from a PDF File in VB.NET.
converting a word document to pdf fillable form; add signature field to pdf
VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.
Export PDF form data to html form in .NET WinForms and ASP.NET. Embed PDF hyperlinks to HTML links in VB.NET. NET component to convert adobe PDF file to html
convert an existing form into a fillable pdf; convert pdf to fillable pdf form
Delete Table: Sometimes it can happen that the extracted information is not a real table or of
not interest for the user. If the user don’t want this part to be in the output file, a click on this
button is sufficient.
Merge with Previous Table: Many files contain tables that are laid out on consecutive pages.
Although the program consists of some rules for detecting such cases, it could happen that the
program fail in such a situation. With this button, the user can easily merge a table which
originally belongs to the previous table. In this context merge means that the actual table is
attached to the end of the previous table.
Apply Changes: After making changes to the table structure, the user must click this button
before closing the GUI or going to the next/previous table to apply these changes.
Edit Table: After clicking this button the following interface appears:
Figure 23: The interface that enables the user to change the table structure
This interface allows the user to insert additional rows/columns or to delete rows/columns in
the table, by easily setting the index number of the row or column.
Close: A click on this button terminates the extraction process for the actual input file and
closes the GUI.
Now, its time to explain the extracted information displayed in Figure 22. As you can see, the
extracted content is not a real table. In fact, it is the part of the file displayed in Figure 24.
Figure 24: Source of the extracted information in Figure 22
This part is extracted as a table because the pdf2html tool has extracted the string “2” as one
text element and the string “Trends in Information Extraction” as another text element, both
with the same top value. The same, for the line pointed at with the other arrow. Therefore, my
heuristic identifies the lines pointed at with arrows, as multi-lines. The texts between these
two multi-lines are identified as single-lines, and thus the heuristic merges the two multi-lines
and creates the look in Figure 22. In this case the “Delete Table” button could be used by the
After deleting the table the next table appears on the screen.
Figure 25: Part of the user interface for the extracted information of the table in Figure 21
As you can see, this is the extracted information for the table in Figure 21 and it is extracted
correctly. Now, the user can change the table if she wanted to. There are several possible
changes. Either the properties of the cells or the structure of the table (i.e. number of rows and
columns) could be changed. To change the properties of a cell, the user has simply to click on
it. After clicking on a cell, for example on the cell at position [3,5], the following interface
Figure 26: Content of the cell at position [3,5] in Figure 25.
The user can change the following properties of a cell:
Content: The content of the cell can be easily changed by clicking on the text area and
change the text within.
Header: The pop-up menu allows the user to change the header to which the cell belongs to.
This pop-up menu is not accessible for all kinds of cells, but only for cells that are in the
header part of the table. If the cell is a header cell, it can be assigned to another header cell in
the hierarchy level above.
Assume, that the user will change the super-header (i.e., header element at the top level of the
hierarchy of the header part) of the cell at position [2,2] in Figure 25. After clicking on the
cell, the following interface appears where the pop-up menu is activated.
Figure 27: Interface for changing the properties of a header cell with an active pop-up menu
Now the user selects the entry that is empty which refers to the first cell in the table. After
applying the changes and closing the cell editing interface the following result is shown in the
Figure 28: Part of the result after applying the changes in Figure 27
Columns spanning: The user can change the amount of columns the cell is spanning. If the
user increases the amount of the column spanning, the cell would only be extended and the
other cells originally been on the right side of the cell would be shifted to the right. The
program don’t verifies the new structure of the table, thus the user must be sure that the table
has, in the end, the structure he wants.
The location of the content of the cell: It could happen that some text that was identified by
the program as a cell, is not really a cell on its own, but belongs to another neighbour cell. In
such cases the user can easily merge the content of this cell to a cell above, below, left or
right. Whereas, merging means again attaching the content at the end of the neighbouring cell.
5.2.3 Experimental Results
I will add some source-result pairs which are the results of the testing process.
Figure 29: Example for a table with spanning columns
Figure 30: Output of my implementation for the table in Figure 29
Figure 31: Example for a table with a simple structure but with much text
Documents you may be interested
Documents you may be interested