Lost hyperlink action

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Lost hyperlink action

vodanh661983
This post has NOT been accepted by the mailing list yet.
I use itextsharp to merge pdf files. The result is ok except the action of hyperlink (in content of pdf file) is lost.

How to fix this bug?
Reply | Threaded
Open this post in threaded view
|

Re: Lost hyperlink action

vodanh661983
This post has NOT been accepted by the mailing list yet.
I found solution for this. See example:
public static void preserveLinkSample(String[] files, String outputFile)
                        throws IOException, DocumentException {
                int firstPage=1;
                Document document = new Document();
                PdfWriter writer = PdfWriter.getInstance(document,
                                new FileOutputStream(outputFile));
                document.setPageSize(PageSize.A4);
                float W = PageSize.A4.getWidth() / 2;
                float H = PageSize.A4.getHeight() / 2;
                document.open();
                PdfContentByte cb = writer.getDirectContent();
                for (int i = 0; i < files.length; i++) {
                        PdfReader currentReader = new PdfReader(files[i]);
                        currentReader.consolidateNamedDestinations();
                        for (int page = 1; page <= currentReader.getNumberOfPages(); page++) {
                                PdfImportedPage importedPage = writer.getImportedPage(
                                                currentReader, page);
                                float a = 0.5f;
                                float e = (page % 2 == 0) ? W : 0;
                                float f = (page % 4 == 1 || page % 4 == 2) ? H : 0;
                                PdfAnnotation.PdfImportedLink[] links =
                                        currentReader.getLinks(page);
                                cb.addTemplate(importedPage, a, 0, 0, a, e, f);
                                for (int j = 0; j < links.length; j++) {
                                        if (links[j].isInternal()) {
                                                int dPage = links[j].getDestinationPage();
                                                int newDestPage = (dPage-1)/4 + firstPage;
                                                float ee = (dPage % 2 == 0) ? W : 0;
                                                float ff = (dPage % 4 == 1 || dPage % 4 == 2) ? H : 0;
                                                links[j].setDestinationPage(newDestPage);
                                                links[j].transformDestination(a, 0, 0, a, ee, ff);
                                        }
                                        links[j].transformRect(a, 0, 0, a, e, f);
                                        writer.addAnnotation(links[j].createAnnotation(writer));
                                }
                                if (page % 4 == 0)
                                        document.newPage();
                        }
                        if (i < files.length - 1)
                                document.newPage();
                        firstPage += (currentReader.getNumberOfPages()+3)/4;
                }
                document.close();
        }
}