Задать вопрос
@iText_Q

Как добавить карту с указателем в PDF-файл?

Вопрос. Я использую Java и iText для создания PDF-файла. Возможно ли добавить карту с указателем, чтобы пользователь знал, где находится изначальная точка?
  • Вопрос задан
  • 157 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@iText_A
Что вы имеете в виду под «картой с указателем, чтобы пользователь знал, где находится изначальная точка»? Если в PDF-файле есть карта, можно добавить аннотацию в виде стрелки. Вам нужно именно это?
Приведу два примера.
Пример 1: добавление настраиваемой формы в качестве дополнительного содержимого поверх карты
Этот вариант продемонстрирован в примере AddPointer:
PdfCanvas canvas = new PdfCanvas(pdfDoc.getFirstPage());
canvas.setStrokeColor(Color.RED)
        .setLineWidth(3)
        .moveTo(220, 330)
        .lineTo(240, 370)
        .arc(200, 350, 240, 390, 0, (float) 180)
        .lineTo(220, 330)
        .closePathStroke()
        .setFillColor(Color.RED)
        .circle(220, 370, 10)
        .fill();

Если известны координаты, то можно нарисовать из линий и кривых красный указатель, как на картинке ниже (красный указатель возле Cambridge Innovation Center):
5cf4c9bc2298e260188495.png
Карта с указателем

Пример 2: добавление строковой аннотации поверх карты
Этот вариант продемонстрирован в примере AddPointerAnnotation:
Rectangle rect = new Rectangle(220, 350, 255, 245);
PdfLineAnnotation lineAnnotation = new PdfLineAnnotation(rect, new float[]{225, 355, 470, 590});
lineAnnotation.setTitle(new PdfString("You are here:"));
lineAnnotation.setContents("Cambridge Innovation Center");
lineAnnotation.setColor(Color.RED);
lineAnnotation.setFlag(PdfAnnotation.PRINT);
 
PdfDictionary borderStyle = new PdfDictionary();
borderStyle.put(PdfName.S, PdfName.S);
borderStyle.put(PdfName.W, new PdfNumber(5));
lineAnnotation.setBorderStyle(borderStyle);
 
PdfArray le = new PdfArray();
le.add(new PdfName("OpenArrow"));
le.add(new PdfName("None"));
lineAnnotation.put(new PdfName("LE"), le);
lineAnnotation.put(new PdfName("IT"), new PdfName("LineArrow"));
 
pdfDoc.getFirstPage().addAnnotation(lineAnnotation);

В результате получается аннотация (она является частью не настоящего содержимого, а интерактивного слоя, накладываемого поверх настоящего содержимого):
5cf4ca5a5edc9578161343.png
Карта с аннотацией

Слой интерактивный: когда пользователь нажимает на аннотацию, появляется дополнительная информация:
5cf4ca951dde8997489097.png
Карта с открытой аннотацией
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы