Do not waste your time Googling on how to create a 2D measurement annotation in iText or any kind of measurement for that matter because it is not supported.
Yet. Hopefully soon the people behind iText will have this feature soon.
The only solution for this would be coding it in a low level approach. Meaning, you will have to look up Adobe’s documentation on PDF and add the necessary properties in iText’s dictionary to be able to simulate a distance measurement annotation.
This was quite an annoying experience. When I upgraded to Windows 10, I expected the same user privileges would be the same when my operating system was still Windows 7. But alas, in Windows 10, every time I run some programs, it tells me access denied.
Hell. My account is not connected to any domain network since it is just a personal PC. It is quite annoying to have to manually set the account to be part of the Administrator group.
Sure. Good for me because I know how but for those who are not technically inclined, it can be a waste of time having to find a solution how to bypass it.
So anyway, since you are here, follow these steps:
Using iText to create PDF and Annotations can be hard at first. I learned it the hard way since it was my first time to take a crack into doing it. While this post does not provide the source code on how to do it (sorry, I am not giving it away for free but you can buy it from me), here are some tips to help get you started.
1) The coordinate system in PDF is different
I created an annotation layer in PDF.JS so I could create annotations on top of PDF pages. Naturally, I stored the annotation coordinates to keep track of its location. When I used the annotation data to create a PDF embedded with them, I was surprised that the positions were incorrect. It turned out the y-coordinate is actually from bottom to top instead of top to bottom. No worries though, you can create a function that will return the bottom-to-top y-coordinate based on your top-to-bottom y-coordinate. Bruno Lowagie actually provided a function for that in some StackOverflow forum post.
2) No SVG library for C# that iText can use to use as images
I created both a Java and C# implementation for this and I could not find a C# library that could let me use an SVG image in iText. Java has a 3rd party library for that though.
3) Do not get confused with Adobe Acrobat and Adobe Acrobat Pro’s comment window
Yes, I have to admit I got confused at first when I set all my comments to locked and read-only I thought that it did not work because the look and feel in Acrobat and Acrobat Pro looks different. If you have Acrobat Pro or Acrobat X, better use that to see your output PDF generated by iText as it gives a better presentation on how you set your annotations’ properties like locked and read-only.
4) If you used PDF.JS to save annotations and export them using iText, the page dimensions are different.
I created annotations using PDF.JS and its page dimensions at scale 100% are different in an actual PDF page when viewed in Acrobat. In order to position them correctly in a physical PDF file, create a function that will return the x and y coordinate of a physical PDF page’s dimension based from the PDF.JS annotation position and its page dimension. Sounds confusing? Here is a sample pseudo function with parameters.
5) Search in Google on how to create annotations using iText
Most annotation types (rectangle, circle, line, arrow, free text, free hand drawing, text underline, text strike-through, text highlight, stamp, icons) that my web application featured have samples provided by Bruno Lowagie in his iText documentation website and StackOverflow forum.
6) Converting to Java, C# or vice-versa is not hard
Once you implemented code using Java or C#, it is not hard to do considering most if not all of the classes are the same. It is just a matter of renaming some naming conventions on properties and methods