support

Where do I get AGPL tech support?

Where do I get pre-sales tech support?

Is support license agreement mandatory?

Main image
stackTrace5.png

iText PDF Renderer Framework

Many of you are aware that iText Software provides dedicated support to its paying customers. However, we also have a very large user base that complies with the AGPL license. Since they don't pay for technical support, they have to rely on their own debugging skills and, as a fallback channel, on Stack Overflow to solve their iText problems.

Those who have stared into the abyss of iText 5's ColumnText::go method and survived, know that debugging our good old rendering engine could be a daunting task because of that method's recursive nature and opaque variable names. ColumnText::go was the organic result of almost 20 years of refactoring of the original iText code, and it's one of the prime examples why we chose to reimplement our library.

The main innovation of the PDF document generation module of iText 7 is the Renderer Framework. Its architecture is explained in detail in the introduction to the technical tutorial for iText 7. The framework defines three general concepts:

  • an Element is a high-level layout object that will be written to a PDF document

  • a RootElement is the background upon which layout objects are drawn. It functions as an element container

  • a Renderer draws an Element onto a RootElement

    • RootElement objects also have a special RootRenderer, which will perform calculations for layout positionings

The flexibility in the framework lies in the configurability and pluggability of the Renderer objects. All Renderer types implement the methods defined in the IRenderer interface:

  • layout(): will calculate how much of the object will fit onto the RootElement

  • getOccupiedArea(): gets the area that the Element will try to occupy

  • draw(): will write the graphical instructions to the RootElement

  • addChild(), setParent(), getChildRenderers(), getNextRenderer(): methods for constructing and querying the hierarchy of the Renderer tree

Every Element has its own renderer implementation, and uses it by default. It is easy to customize the rendering rules for a specific layout object, by plugging in a homebrewn Renderer class, or a subclass of the Element's default renderer with a few modifications.

// in C#
var element = new Div();
element.SetNextRenderer(new MyDivRenderer(element));
document.Add(element);

It is also possible to let all objects of a certain type use your custom Renderer, by subclassing the Element and creating these objects instead of the default type.

// in Java
class MyDiv extends Div {
    @Override
    protected IRenderer makeNewRenderer() {
        return new MyDivRenderer(this);
    }
}

As already hinted at in the introduction to this post, another great advantage lies in debugging your application. In iText 5, users debugging ColumnText encountered a turtles-all-the-way-down stack of go() calls.

Debugging a nested table in iText 5

By contrast, in iText 7, you clearly see where, and how deep, in the Renderer hierarchy you are:

Debugging a nested table in iText 7

Article type
Technical notes
Main image
confidential.png

Confidential emails and the mailing list

In one of our previous posts, we've already listed some of the reasons why an e-mail to the free mailing list can be rejected when you're not subscribed. One reason could be the fact that we thought it was SPAM, another could be that you were using the word urgent, but the following screen shot shows another reason: When you post an e-mail to the mailing-list, it is automatically sent to more than 2500 subscribers and your mail is archived on different public archives. This may be your intention. If so, feel free to register on the mailing list and post your question to the public. In that case, it doesn't really make sense to add a confidentiality notice: your e-mail will be be visible to anyone with an internet connection.

There is no way we can know whether or not this is your intention, and we'd rather be safe than sorry. When in doubt, we reject the e-mail. In the past, we've received requests like this:

Could you please be so kind and remove from the mailing list archive the message with the subject "XYZ" posted by me (Anonymous), on Month day, year, from my email address. The attachments of this message represent highly confidential customer documents and were posted by error. We need to urgently remove them from the public internet.

Please understand that there is nothing we can do about this! We are not responsible for the problem you have caused yourself. You've sent your mail to about 2500 addresses. Most of these addresses belong to actual people, but some of them are used to populate third party mailing-list archives: Nabble, GMANE, mail-archive,... We don't have any control over these archives. You'll have to contact the admins of every archive separately, and hope they'll answer your question.

Note that the best way to get help is to buy a license with a support contract. If you don't have a license, then there's no business relationship between your company and the iText company. However, if you have a support contract, you'll get a special e-mail address you can use to contact us with PDFs containing confidential information. PDFs sent to this special address aren't made public.

We also get questions like this:

I will get in contact with each of the archive administrators but, as stated in their FAQ, you, as the itext mailing list administrator, must approve the deletion of this message. So I kindly ask you to reply me with a message like the one below, that I can then forward to the archive admins: I confirm that the message "XYZ" posted by Anonymous on Month Day, Year can be deleted from your archive.

If you have a similar problem, please refer the administrators of that archive to the following statement:

We, the administrators at iText Software, grant anyone who has posted anything to the iText mailing list, the right to ask the admin of any archiving sites, permission to ask the removal of his own posts for any reason he or she may have (privacy reasons, sent by mistake,...).

We hope this helps!

Tags
support
Article type
iText news
Main image
urgent.png

About using the word "Urgent" in your email

In previous blogs (Why your mail doesn't show up on the mailing list) and YouTube videos (The internal kitchen at iText: how we fight SPAM), we already explained the mechanics behind systems such as the iText mailing-list. The following screen shot is yet another example of the administrative interface that is used to keep subscribers of the mailing list from receiving SPAM: As you can see, this "question" had the word "urgent" as its subject line. We get many mails with similar subject lines: "Urgent question", "Need answer ASAP", and so on. In the majority of cases, the content of such a message is SPAM. In the above example, the message was sent through an SMTP server with the word p0rn in its domain name and the content clearly wasn't a question about iText. We've gotten used to mails like this, and as a result we often discard such questions without even reading what they're about.

This is the main reason why you shouldn't use the word urgent in your question. It usually triggers an automated reflex resulting in the deletion of your question, even if your question is genuine and even if, in fact, you need an answer urgently.

There is also another reason: many people agree that using the word "URGENT" (often written in capitals) is rude. If you post a question to the free mailing list, you're using iText for free, otherwise you'd send your question to the premium support address. If you're not paying for iText, you're asking the subscribers of the mailing list to do you a favor on a voluntary basis. Although many developers are willing to grant you that favor, it's rude to SHOUT when asking for a favor. Additionally, using emotional blackmail trying to force people to answer your question has no added value. People usually won't help you faster if you use words such as ASAP. On the contrary: it's considered being counter-productive to the extent that some people consistently skip questions that demand an answer.

In short: please avoid the use of words such as "urgent" or "ASAP" in your questions. You're doing yourself a favor giving your question a better chance at being accepted. At the same time, you don't offend the people who may want to grant you the favor of answering your question.

Tags
support spam
Article type
iText news

Why your mail doesn't show up on the mailing list

Every week, we receive a number of questions on the old iText mailing-list, but some questions never reach this list because of one of the following reasons:

  1. You are not subscribed to the mailing-list (and you shouldn't be, because the list is no longer in use),

  2. Mail from people who aren't subscribed is put on hold and needs to be approved manually. This is such a cumbersome process that not all mail is read. If there's too much SPAM in the "on hold" box, all mail is deleted automatically.

  3. In some cases, mail doesn't reach the list because it's posted on the wrong forum. For instance: if you're registered on Nabble, you may not be registered on the iText mailing list.

This is how you can see that a question posted on Nabble didn't reach the mailing list:

There is no affiliation between Nabble and iText, which explains why there's a message with a yellow background saying "This post has NOT been accepted by the mailing list yet." This should ring a bell for you that you are not using the proper channel to post a question. Take a look at our support page to find out which channels you should use.

Article type
Technical notes
Contact

Still have questions? 

We're happy to answer your questions. Reach out to us and we'll get back to you shortly.

Contact us
Stay updated

Join 11,000+ subscribers and become an iText PDF expert by staying up to date with our new products, updates, tips, technical solutions and happenings.

Subscribe Now