Размещение цифровых подписей в PDF-файлах с использованием пользовательских координат (с использованием структуры надувного замка)
Ниже приведен код, который я использую для размещения цифровых подписей в четырех стандартных координатах: слева вверху, вверху справа, внизу слева, внизу справа. Тем не менее, он не работает правильно для верхнего левого.
PdfReader reader = new PdfReader(src);//src being file path of pdf being signed
Rectangle cropBox = reader.getCropBox(1);
if(signaturePosition.equalsIgnoreCase("bottom-left"))
appearance.setVisibleSignature(new Rectangle(cropBox.getLeft(), cropBox.getBottom(),
cropBox.getLeft(width), cropBox.getBottom(height)), 1, "first");
if(signaturePosition.equalsIgnoreCase("bottom-right"))
appearance.setVisibleSignature(new Rectangle(cropBox.getRight(width), cropBox.getBottom(),
cropBox.getRight(), cropBox.getBottom(height)), 1, "first");
if(signaturePosition.equalsIgnoreCase("top-left"))
appearance.setVisibleSignature(new Rectangle(72, 732, 144, 780), 1, "first");
if(signaturePosition.equalsIgnoreCase("top right"))
appearance.setVisibleSignature(new Rectangle(cropBox.getRight(width), cropBox.getTop(height),
cropBox.getRight(), cropBox.getTop()), 1, "first");
Требуется разместить подпись в любом месте PDF, в зависимости от координат, предоставленных пользователем. Чтобы получить координаты пользователя, мы используем шаблон pdf xpro с помещенным над ним текстовым полем (пользователь загрузит шаблон и поместит текстовое поле там, где ему требуется подпись), используя координаты этого текстового поля с его высотой и шириной. поместите подпись в PDF.
Мне нужна помощь в понимании того, как метод origin.setVisibleSignature () работает с объектом Rectangle, переданным ему, потому что для каждого квадранта страницы (рассматривая центр страницы как источник) параметры передаются по-разному для верхнего левого, верхнего правого внизу слева и внизу справа соответственно.
1 ответ
ФП пояснил в (пока что удаленном) комментарии:
Я прошу объяснить ширину передаваемой высоты в качестве параметра для функций getTop(),getLeft() и т.д. Это не ясно.
Эти методы определены как:
// Returns the lower left y-coordinate, considering a given margin. public float getBottom(final float margin) { return lly + margin; } // Returns the lower left x-coordinate, considering a given margin. public float getLeft(final float margin) { return llx + margin; } // Returns the upper right x-coordinate, considering a given margin. public float getRight(final float margin) { return urx - margin; } // Returns the upper right y-coordinate, considering a given margin. public float getTop(final float margin) { return ury - margin; }
Т.е. эти методы возвращают максимальную или минимальную координату x или y, сдвинутую внутрь на заданное расстояние. В вычислениях, которые вы скопировали выше, эти методы использовались просто как замена некоторых дополнений или вычитаний.
в идеале прямоугольник - это верхняя левая координата в качестве первых двух координат, а высота и ширина в качестве двух других координат,
То, что человек считает идеальным, зависит от обстоятельств. Здесь у нас есть конструктор
/** * Constructs a <CODE>Rectangle</CODE> -object. * * @param llx lower left x * @param lly lower left y * @param urx upper right x * @param ury upper right y */ public Rectangle(final float llx, final float lly, final float urx, final float ury)
( там же)
Итак, сначала у вас есть нижний левый x и y, затем верхний правый x и y. Другими словами, вы оставили x, нижний y, правый x, верхний y.
но это делается по-другому. Запросить понимание этого.
Если у вас есть верхние левые координаты, ширина и высота, эти необходимые координаты легко рассчитать.
Кстати, я надеюсь, вы знаете, что в PDF система координат пользовательского пространства по умолчанию может иметь свое начало в любом месте на странице или за ее пределами (установите флажок обрезки), и что (как это часто встречается в математике) координаты x увеличиваются вправо, а y координаты увеличиваются вверх.