Question about "IRT" entry for markup annotations.
- From: "Alexander Golub" <agolub (at) beldts.de>
- Date: Mon, 6 Feb 2006 19:21:28 +0200
Hello,
friends.
I've encountered the
situation, when PDF document contains text annotation with reply. As you
definitely know, reply is the annotation too, but it is rendering in
the same area as annotation the given reply is dirrected to and text of reply is
shown within popup window of "parent" annotation.
As you again
definitely know, reply annotation is connected to "parent" annotation via
"IRT" entry from markup annotations dictionary. This entry is either text string
which refers to an entry "NM" of parent annotation, or indirect reference to
parent annotation.
What I have : I have
original PDF file without annotations (file 1) and PDF file with two text
annotations, one of which has a "reply-to" connecion to another (file 2); file 2
was obtained from file 1
by adding these two annotations.
What do I want : using iText
library, I want to read all annotations from file 2 and, basing on file
1, create another file - PDF file which will contain all annotations from
file 2 appended to the file 1. Kinda copy, although technically it is not a
copy.
I've successfully obtained annotations from file 2, and
I've added them to a file 3; now I have to link one annotation as
reply to another one.
When reply
annotation is referring to a parent annotation via "NM" entry, I can handle this
successfully like in the following code snippet (regardless of restrictions by
page):
...
PdfStamper stamper =
new PdfStamper("file1.pdf", "file3.pdf");
...
PdfAnnotation parent
= PdfAnnotation.createText(stamper.getWriter, getRectangle(), getContent(),
isOpened1(), getName());
PdfAnnotation reply = PdfAnnotation.createText(stamper.getWriter,
getRectangleReply(), getContentReply(), isOpenedReply(),
getNameReply());
...
reply.put(new PdfName("IRT"), new
PdfString(getParentAnnotationUniqueName));
But when reply
annotation is connected with parent annotation via indirect reference, I cannot
to do the same trick with put() method - I don't have access to an indirect
reference of parent annotation.
I can see from code,
that similar situation with relation by reference for "parent-popup"
pair was encountered. Situation was resolved via the PdfAnnotation's method
setPopup(), in which an internal package method getIndirectReference() was
used.
To achieve my goal,
I use the following workaround : within package "com.lowagie.text.pdf" I create
a class PackageMethodsAccessor with a single static method, which has an access
to a package method getIndirectReference(), which is used in the
PdfAnnotation's setPopup() method:
public class
PackageMethodsAccessor
{
public static PdfIndirectReference
getIndirectReference_PdfAnnotation(PdfAnnotation annotation)
{
return
annotation.getIndirectReference();
}
}
I know that it is
not correct technique and it is a hack. But can you tell me -
is there a legal approach
of setting relation "annotation"-"reply to annotation" in the iText? If there is
no such method, is it possible to provide means of interconnection of
such reply annotations within next library
?