1 31 package org.pdfbox.examples.pdmodel; 32 33 import java.awt.geom.Rectangle2D ; 34 import java.util.List ; 35 36 import org.pdfbox.pdmodel.PDDocument; 37 import org.pdfbox.pdmodel.PDPage; 38 39 import org.pdfbox.pdmodel.common.PDRectangle; 40 import org.pdfbox.pdmodel.interactive.action.type.PDAction; 41 import org.pdfbox.pdmodel.interactive.action.type.PDActionURI; 42 import org.pdfbox.pdmodel.interactive.annotation.PDAnnotation; 43 import org.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink; 44 import org.pdfbox.util.PDFTextStripperByArea; 45 46 47 53 public class PrintURLs 54 { 55 58 private PrintURLs() 59 { 60 } 62 63 72 public static void main(String [] args) throws Exception 73 { 74 PDDocument doc = null; 75 try 76 { 77 if( args.length != 1 ) 78 { 79 usage(); 80 } 81 else 82 { 83 doc = PDDocument.load( args[0] ); 84 List allPages = doc.getDocumentCatalog().getAllPages(); 85 for( int i=0; i<allPages.size(); i++ ) 86 { 87 PDFTextStripperByArea stripper = new PDFTextStripperByArea(); 88 PDPage page = (PDPage)allPages.get( i ); 89 List annotations = page.getAnnotations(); 90 for( int j=0; j<annotations.size(); j++ ) 92 { 93 PDAnnotation annot = (PDAnnotation)annotations.get( j ); 94 if( annot instanceof PDAnnotationLink ) 95 { 96 PDAnnotationLink link = (PDAnnotationLink)annot; 97 PDRectangle rect = link.getRectangle(); 98 float x = rect.getLowerLeftX(); 100 float y = rect.getUpperRightY(); 101 float width = rect.getWidth(); 102 float height = rect.getHeight(); 103 int rotation = page.findRotation(); 104 if( rotation == 0 ) 105 { 106 PDRectangle pageSize = page.findMediaBox(); 107 y = pageSize.getHeight() - y; 108 } 109 else if( rotation == 90 ) 110 { 111 } 113 114 Rectangle2D.Float awtRect = new Rectangle2D.Float ( x,y,width,height ); 115 stripper.addRegion( "" + j, awtRect ); 116 } 117 } 118 119 stripper.extractRegions( page ); 120 121 for( int j=0; j<annotations.size(); j++ ) 122 { 123 PDAnnotation annot = (PDAnnotation)annotations.get( j ); 124 if( annot instanceof PDAnnotationLink ) 125 { 126 PDAnnotationLink link = (PDAnnotationLink)annot; 127 PDAction action = link.getAction(); 128 String urlText = stripper.getTextForRegion( "" + j ); 129 if( action instanceof PDActionURI ) 130 { 131 PDActionURI uri = (PDActionURI)action; 132 System.out.println( "Page " + (i+1) +":'" + urlText + "'=" + uri.getURI() ); 133 } 134 } 135 } 136 } 137 } 138 } 139 finally 140 { 141 if( doc != null ) 142 { 143 doc.close(); 144 } 145 } 146 } 147 148 151 private static void usage() 152 { 153 System.err.println( "usage: " + PrintURLs.class.getName() + " <input-file>" ); 154 } 155 } | Popular Tags |