Я использую 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;
};
}
}