добавить подпись или изображение в PDF с помощью перетаскивания Android (получить координаты X и Y) - PullRequest
0 голосов
/ 21 сентября 2019

Я использую Pdfbox https://github.com/TomRoush/PdfBox-Android, чтобы добавить подпись (изображение) в pdf. Я хочу добавить подпись, используя перетаскивание. Я реализовал некоторый код, используя сенсорный приемник. Пожалуйста, посмотрите и помогите мне, я не получаю точные координаты x и y длядобавьте его в код pdfbox от слушателя касания, и я также пытаюсь перетащить код https://www.tutorialspoint.com/android/android_drag_and_drop.htm, но это не поможет.когда я тестирую приложение и сбрасываю подпись (изображение) в pdf, результат pdf не получит подпись в правильном положении.Пожалуйста, помогите своему младшему брату и направьте меня, если что-то не так с кодом

Вот код Pdfbox

 private void createPdfTwo(File file,float x,float y) {
        try {
          PDDocument doc = PDDocument.load(file);          
           PDPage page = doc.getPages().get(0);  
          // StoredPath is the path where it gonna be saved
            PDImageXObject pdImage = PDImageXObject.createFromFile(StoredPath,doc);
            PDPageContentStream contents = new PDPageContentStream(doc, page,true,false);
        // here is the x,y which i am getting from touch listener
            contents.drawImage(pdImage, x, y,150,150);
            contents.close();
            doc.save(storedPath);
            doc.close();
            pdfView.fromFile(new File(storedPath)).load();
            imageView.setVisibility(View.GONE);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Вот код сенсорного прослушивателя

 @SuppressLint("ClickableViewAccessibility")
private View.OnTouchListener onTouchListener()
{
    return (view, event) -> {

        final int x = (int) event.getRawX();
        final int y = (int) event.getRawY();

        switch (event.getAction() & MotionEvent.ACTION_MASK) {

            case MotionEvent.ACTION_DOWN:
                RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams)
                        view.getLayoutParams();

                xDelta = x - lParams.leftMargin;
                yDelta = y - lParams.topMargin;
                break;
            case MotionEvent.ACTION_UP:
          // here is the code where magic should happen                                 
         RelativeLayout.LayoutParams qParams = (RelativeLayout.LayoutParams)
                        view.getLayoutParams();
             float   xD = x - qParams.leftMargin;
              float  yD = y - qParams.topMargin;
          // this method will calling the create pdf (file is defined global)
                createPdfTwo(file,xD,yD);
                Toast.makeText(MainActivity.this,
                        "Signature Drop", Toast.LENGTH_SHORT)
                        .show();
                break;

            case MotionEvent.ACTION_MOVE:
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view
                        .getLayoutParams();
                layoutParams.leftMargin = x - xDelta;
                layoutParams.topMargin = y - yDelta;
                layoutParams.rightMargin = 0;
                layoutParams.bottomMargin = 0;
                view.setLayoutParams(layoutParams);
                break;
        }
        mainLayout.invalidate();
        return true;
    };
}

}

...