У меня есть небольшое приложение для добавления подписи к PDF-файлу в JAVA с помощью iText. Это фрагмент кода:

PdfReader           reader  = new PdfReader(pdfBytes);
FileOutputStream    fos     = new FileOutputStream(new File("/home/john/signedPdf.pdf"));
PdfStamper          stamper = PdfStamper.createSignature(
                            reader, 
                            fos, 
                            '\0', 
                            new File("/home/john/"), 
                            true
    );
PdfSignatureAppearance signatureAppearance = stamper.getSignatureAppearance();
signatureAppearance.setRenderingMode(PdfSignatureAppearance.RenderingMode.DESCRIPTION);
Rectangle rectangle = new Rectangle(
                36,
                748 - 20 * (next - 1) ,
                144,
                780 - 20 * (next - 1)
    );
rectangle.normalize();
signatureAppearance.setVisibleSignature(
        rectangle, 
        1, contact);

PDF-файл подписан правильно, но видимый знак в прямоугольнике имеет отступы, и один прямоугольник перекрывает второй, второй - третий и т. Д. Это пример изображения: введите описание изображения здесь введите описание изображения здесь Существует способ удалить это заполнение и сделать так, чтобы один прямоугольник перекрывал другой. заранее спасибо

0
J_J 16 Апр 2018 в 19:05

1 ответ

Лучший ответ

Вы используете созданные таким образом прямоугольники для своих подписей.

Rectangle rectangle = new Rectangle(
                36,
                748 - 20 * (next - 1) ,
                144,
                780 - 20 * (next - 1)
    );

Где (как поясняется в комментариях) целое число next может иметь последовательные значения для подписей, например 1 и 2.

Но это означает, что вы действительно просите перекрывающиеся прямоугольники подписи! Например. для значений 1 и 2 вы получите:

  • next == 1 - прямоугольник вверху y : 780; прямоугольник внизу y : 748
  • next == 2 - прямоугольник вверху y : 760; прямоугольник внизу y : 728

Таким образом, эти прямоугольники перекрываются для y между 760 и 748.

Если вы не хотите, чтобы ваш прямоугольник перекрывался, коэффициент шага y (в настоящее время 20) должен быть не меньше разницы между верхней и нижней координатами y начала значения (в настоящее время 780-748 = 32).

Например. вы можете использовать коэффициент шага 32

Rectangle rectangle = new Rectangle(
                36,
                748 - 32 * (next - 1) ,
                144,
                780 - 32 * (next - 1)
    );

Или прямоугольник высотой 20

Rectangle rectangle = new Rectangle(
                36,
                760 - 20 * (next - 1) ,
                144,
                780 - 20 * (next - 1)
    );

Вместо ваших текущих размеров и местоположений прямоугольника.

1
mkl 16 Апр 2018 в 20:21