How to open an MS Word attachment by clicking an image?

Tags: actionsannotationsembedded filesgo to embeddediText 5

How can I make an image clickable so that an attached MS word document opens? I have some PDFs here where there are some images (an MS Word icon with the MS word file name beneath the icon) which open the attached ms word document by clicking on the images. I wonder how can I do this with the iText library. I can add the images and attach the MS word documents but I haven't figured out how I can apply something like an action (GoToE seems only available for PDF attachments) or a link?

Posted on StackOverflow on Jun 23, 2015 by Pali

Please take a look at section 12.6.4.4 in ISO-32000-1 (that is the PDF specification). That section is titled "Embedded Go-To Actions":

ISO-32000-1, section 12.6.4.4
ISO-32000-1, section 12.6.4.4

As you've found out, the behavior you describe is by specification. The GoToE action is for jumping to and form a PDF file that is embedded in another PDF file. Other document formats aren't supported because.

Your only option is to introduce a file attachment annotation instead of an Embedded file along with a GoToE action. See for instance the FileAttachmentAnnot example:

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    Rectangle rect = new Rectangle(36, 700, 136, 800);
    PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(
            writer, PATH, "test.docx", null);
    PdfAnnotation attachment =
            PdfAnnotation.createFileAttachment(writer, rect, "Click me" , fs);
    PdfAppearance app = writer.getDirectContent().createAppearance(100, 100);
    Image img = Image.getInstance(IMG);
    img.scaleAbsolute(100, 100);
    img.setAbsolutePosition(0, 0);
    app.addImage(img);
    attachment.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, app);
    writer.addAnnotation(attachment);
    document.close();
}

In this example, we create a PdfAnnotation and we define a custom appearance for this annotation (instead of the pin or the paperclip symbol). I used an image because that's what you seem to want. Check out the result here (this works with Adobe Reader, but not all PDF viewers support this).