ITEXT-PDFの画像の座標とページ番号を位置決めする

5939 ワード

質問シーン:
itextでPDFを自動的に生成する過程で、PDFのいずれかのページに透かしを入れたいのですが、この透かし画像のページ番号は固定されていないので、そのまま『sealStamperUnder=stamp.getUnderContent(page-1);’を選択します.しかし、この透かしはある固定画像の前のページにあるので、この画像の位置情報を位置決めして、透かし画像のページ番号情報を取得することができます.この方法により、画像の座標情報も得ることができる.
コード#コード#
インポートするjarパッケージ:itext-pdfa-5.5.6.jar、itext-xtra-5.5.6.jar、itext-5.5.6.jar、itext-asian.jar
/**
     *             
     * @param filePath  PDF  
     * @param image           
     * @return  List                float[0] >> X; float[1] >> Y; float[2] >> page
     */
    public List<float[]> getKeyWords(String filePath, final Image image) {
        final List<float[]> arrays = new ArrayList<float[]>();
        PdfReader pdfReader;
            try {
                pdfReader = new PdfReader(filePath);
                int pageNum = pdfReader.getNumberOfPages();
                PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(pdfReader);

                for (int i = 1; i <= pageNum; i++) {

                    final int finalI = i;
                    pdfReaderContentParser.processContent(i, new RenderListener() {
                        //      PDF      ,                  arrays 
                        @Override
                        public void renderText(TextRenderInfo textRenderInfo) {
                            /*String text = textRenderInfo.getText(); //     

                            if (null != text && text.contains(key)) {
                                Rectangle2D.Float boundingRectange = textRenderInfo
                                        .getBaseline().getBoundingRectange();
                                float[] resu = new float[3];
                                resu[0] = (float)boundingRectange.getCenterX();
                                resu[1] = (float)boundingRectange.getCenterY();
                                resu[2] = finalI;
                                arrays.add(resu);
                            }*/
                        }

                        //      PDF      
                        @Override
                        public void renderImage(ImageRenderInfo arg0) {
                            PdfImageObject image0;
                            try {
                                image0 = arg0.getImage();
                                byte[] imageByte = image0.getImageAsBytes();
                                Image imageInPDF = Image.getInstance(imageByte);
                                if(image0!=null && imageInPDF.equals(image)){
                                    float[] resu = new float[3];
                                    // 0 => x;  1 => y;  2 => z
                                    //z     1
                                    resu[0] = arg0.getStartPoint().get(0);
                                    resu[1] = arg0.getStartPoint().get(1);
                                    resu[2] = finalI;
                                    arrays.add(resu);
                                }
                            } catch (IOException e) {
                                e.printStackTrace();
                            } catch (BadElementException e) {
                                e.printStackTrace();
                            }

                        }

                        @Override
                        public void endTextBlock() {


                        }

                        @Override
                        public void beginTextBlock() {


                        }

                    });

                }

                pdfReader.close();

            } catch (IOException e) {

                e.printStackTrace();
            }
            return arrays;
    }

後記:この方法は画像の座標とページ情報を取得し、テキストの座標とページ情報を取得したい場合はrenderText()のコメントを削除し、getKeyWords()のパラメータを交換すればよい.