itextPDF PDF操作PDF、PDFコンテンツ取得

4648 ワード

class TestRenderListener implements RenderListener {

        //         
        List rectText = new ArrayList();
        //      
        List textList = new ArrayList();
        //       y  
        List listY = new ArrayList();
        //              
        List> rows_text_rect = new ArrayList<>();
        //PDF     
        protected String filepath = null;

        public TestRenderListener() {
        }

        //step 2,  "BT"  
        @Override
        public void beginTextBlock() {
            // TODO Auto-generated method stub
        }

        //step 3

        /**
         *         
         */
        @Override
        public void renderText(TextRenderInfo renderInfo) {
            //          
            //Rectangle2D.Float rectBase = renderInfo.getBaseline().getBoundingRectange();


            String text = renderInfo.getText();
            if (text.length() > 0) {
                RectangularShape rectBase = renderInfo.getBaseline().getBoundingRectange();
                //         
                Rectangle2D.Float rectAscen = renderInfo.getAscentLine().getBoundingRectange();
                //          
                float leftX = (float) rectBase.getMinX();
                float leftY = (float) rectBase.getMinY() - 1;
                float rightX = (float) rectAscen.getMaxX();
                float rightY = (float) rectAscen.getMaxY()   1;

                Rectangle2D.Float rect = new Rectangle2D.Float(leftX, leftY, rightX - leftX, rightY - leftY);

//                System.out.println("text:"   text   "--x:"   rect.x   "--y:"   rect.y   "--width:"   rect.width   "--height:"   rect.height);

                if (listY.contains(rect.y)) {
                    int index = listY.indexOf(rect.y);
                    float tempx = rect.x > rectText.get(index).x ? rectText.get(index).x : rect.x;
                    rectText.set(index, new Rectangle2D.Float(tempx, rect.y, rect.width   rectText.get(index).width, rect.height));
                    textList.set(index, textList.get(index)   text);
                } else {
                    rectText.add(rect);
                    textList.add(text);
                    listY.add(rect.y);
                }

                Map map = new HashMap<>();
                map.put(text, rect);
                rows_text_rect.add(map);
            }
        }

        //step 4(     ,     ),  “ET”  
        @Override
        public void endTextBlock() {
            // TODO Auto-generated method stub
        }

        //step 1(      )
        @Override
        public void renderImage(ImageRenderInfo renderInfo) {

        }
    }
        try {
            PdfReader reader = new PdfReader(pdfPath);
            //    PDF    
            PdfReaderContentParser parser = new PdfReaderContentParser(reader);
            //   PDF     ,       
            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("E:/pdftest/test2.pdf"));
                        //  pdf   
                        PdfContentByte page = stamper.getOverContent(1);
            for (int i = 1; i <= reader.getNumberOfPages(); i  ) {
                //    ImageRenderListener  ,      RenderListener  ,    PDF    
                TestRenderListener listener = new TestRenderListener();
                //  PDF,        
                parser.processContent(i, listener);
                //         
                List rectText = listener.rectText;
                List textList = listener.textList;
                List listY = listener.listY;
                List> list_text = listener.rows_text_rect;
                Map map1 = new HashMap<>();
                for (int k = 0; k < list_text.size(); k  ) {
                    Map map = list_text.get(k);
                    for (Map.Entry entry : map.entrySet()) {
                        System.out.println(entry.getKey()   "----"   entry.getValue());
                    }
                }
            }
            System.out.println(JSON.toJSON(positionMap));
        } catch (Exception ex) {
            ex.printStackTrace();
        }