Showing posts with label Automation. Show all posts
Showing posts with label Automation. Show all posts

22/05/2009

WARNING - DO NOT BUY SOFTWARE FROM: Websupergoo.com

I would rec against buying software from this company. I've now logged four bugs in their PDF product.

I'm sure it's useful for some things - but it is very inconsistent, buggy and if I had a choice, I'd never use it again. Unfortunately it's the only product on the market that can render SVG inside a PDF - so I'm stuck with it.

The following bugs were initially denied by ABCpdf support. I was wrong, they were right type of issue resolution. To their credit they managed to fix 1 of the issues, but they deny the existence of all other issues:

Fatal ExecutionExceptions
1) ABCpdf6 is crashing the .Net Runtime with Fatal ExecutionExceptions. If anyone has encountered an ExecutionException they know this is about as bad as it gets - it crashes the .Net runtime, it crashes the web server etc. etc. etc. Websupergoo support denied the existence of this issue for months. To reproduce this issue, download ABCpdf6, download .Net 3.5 SP1, run a project in VS2008 and hit stop button half way through some long process. Restart the application ... kaboom explosion ... Well guess what - they figured it out and fixed it in ABCpdf7.

Line Counts Fail
2) ABCpdf7 is not capable of counting the number of lines of text that have been written to a text area. Moreover, Websupergoo support denies this is an issue -> actually suggesting I use the line counts for another VERY important part of my application. I've uploaded an example of the incorrect line counts at my live space here:
http://cid-cd836a97f80e0c35.skydrive.live.com/self.aspx/Public/HeightProblemExample.zip

Text Height Methods Fail
3) ABCpdf7 is not capable of determining with accuracy the dimensions of text that has been written to a text area (esp when line spacing is specified). Moreover, Websupergoo support denies this is an issue -> they suggest I use line counts (which are also broken) to determine the height of a text area. They are morons, they don't read their support requests, and they are incapable of resolving any problems in what would be considered a reasonable amount of time. I've uploaded an example of the height calculation issues at my live space here:
http://cid-cd836a97f80e0c35.skydrive.live.com/self.aspx/Public/HeightProblemExample.zip

Cache is Completely Broken
4) ABCpdf6 is not capable of clearing it's cache properly, moreover, cache settings that Websupergoo claims to do things - do not do what they say they do. Websupergoo support denies this issue, are insulting by pointing users to obvious documentation - but even when all the settings are setup precisely to their requirements we still have to reboot the webserver to clear the cache. Unfortunately I don't have an example of this behavior - but you can see for yourself by going to their site and merely running the cache examples. It does not work consistently at all.

As to not complain complain complain - I assume idiots will always be idiots and business people will sell pretty much anything any idiot (like me) are willing to buy at the highest cost possible.

Solution To Text Height issues:
I'm providing a solution to accurately predict the height of text in ABCpdf7. Websupergoo is incapable of doing this - therefore - I've been forced to apply some really ugly inefficient methodolgy to correct their issue. I've uploaded an example of the fix to my live space here:
http://cid-cd836a97f80e0c35.skydrive.live.com/self.aspx/Public/TextHeightSolution.zip

I am purposely blasting this group as they have provided such low quality support. Every reply is insulting and the only way to get them to take your requests seriously is to kick and scream, kick and scream, kick and scream. May be at some point I'll get to chat with their top level support people - but even at that - these people deny the issues in their application and do not help users move forward.

If you don't believe me take a look at the examples they provide with the ABCpdf7 trial download. 1988 called and they want their coding conventions back!

Over And Out

09/04/2008

C#: Creating Tables in Open Office using C#.... Open Office Sucks and So Does Your Face

OK ... you're going to have to use your imagination a bit here because there is too much code to put everything in here ... the basic premise is as such:

// get the row counts out of my parameter => MyUserDefinedCustomTableObject is obviously a class in my app - and no, it is not a DataTable it is a Generic Matrix.
int RowCount = MyUserDefinedCustomTableObject.Rows.Count;

// get the col counts out of ma parameter
int ColCount = MyUserDefinedCustomTableObject.Rows[0].Cells.Count;

// create a context consisting of the oo bootstrap
unoidl.com.sun.star.uno.XComponentContext localContext = uno.util.Bootstrap.bootstrap();

// create a service factory to get shit from
unoidl.com.sun.star.lang.XMultiServiceFactory multiServiceFactory = (unoidl.com.sun.star.lang.XMultiServiceFactory )localContext.getServiceManager();

// create a component loader to get stuff from
XComponentLoader componentLoader = (XComponentLoader)multiServiceFactory.createInstance( "com.sun.star.frame.Desktop");

// create a frame which is basically the document reference
XFrame frame = ((unoidl.com.sun.star.text.XTextDocument)xComponent).getCurrentController().getFrame();

// the tricky part, create a dispatch helper - this is the work horse
XDispatchHelper xDispatchHelper = (XDispatchHelper )multiServiceFactory.createInstance( "com.sun.star.frame.DispatchHelper");

// this is only used if you want to set bookmark text within the table cells ... we use bookmarks as placeholders where there will be text in the future.
XNameAccess xna = ((XBookmarksSupplier)xComponent).getBookmarks();

// Create the property values - this uses a local function that I'm not nice enough to give you but on a primitive level it is propertyvalue.Name = first param, propertyvalue.value = 2nd param.
PropertyValue[] tableArgs = new unoidl.com.sun.star.beans.PropertyValue[4];
tableArgs[0] = CreateNewProperty("TableName", new uno.Any(MyUserDefinedCustomTableObject.TableName));
tableArgs[1] = CreateNewProperty("Columns", new uno.Any(ColCount));
tableArgs[2] = CreateNewProperty("Rows", new uno.Any(RowCount));

// check to determine if we should show borders
if (MyUserDefinedCustomTableObject.ShowBorders)
tableArgs[3] = CreateNewProperty("Flags", new uno.Any(9));
else
tableArgs[3] = CreateNewProperty("Flags", new uno.Any(8));

// dispatch the table creation event to the UI ...
xDispatchHelper.executeDispatch((XDispatchProvider)frame, ".uno:InsertTable", "", 0, tableArgs);

// you have a table in your document, the cursor is usually in the first cell of the table so you can use this function to jump between cells and insert text / bookmarks.
xDispatchHelper.executeDispatch((XDispatchProvider)frame, ".uno:JumpToNextCell", "", 0, new unoidl.com.sun.star.beans.PropertyValue[0]);

// if you are in a table cell and want to set the text of that cell then you can use this
cellTextArgs[0] = CreateNewProperty("Text", new uno.Any("My lovely text i love you text"));
xDispatchHelper.executeDispatch((XDispatchProvider)frame, ".uno:InsertText", "", 0, cellTextArgs);

// if you want to insert a bookmark into the cell you could try this (note you do not have to be in a table cell for this to insert a bookmark).
PropertyValue[] cellBkmkArgs = new unoidl.com.sun.star.beans.PropertyValue[1];
cellBkmkArgs[0] = CreateNewProperty("Bookmark", new uno.Any(cell.CellBookmark));
xDispatchHelper.executeDispatch((XDispatchProvider)frame, ".uno:InsertBookmark", "", 0, cellBkmkArgs);

Over and Out