2015-04-01 3 views
0

Я не смог найти решение этой проблемы iText либо здесь, в книге iText In Action, и был бы признателен за предложения. То, что я хочу сделать, - это технические диаграммы, состоящие из прямоугольников, линий и т. Д. В PDF, так что диаграмма может плавать, как изображение, но также и для того, чтобы я мог связать действия PDF с графическими объектами, такими как прямоугольники. Мне нужно расширить iText, чтобы сделать это?iText - как связать действия с графическим объектом?

В настоящее время я рисую графику с помощью WMF-пакета и вставляю WMF-изображение, но я не могу связать действия таким образом или поместить графические объекты в слои.

+0

Вы можете уточнить? О каких действиях PDF мы говорим и что может вызвать эти действия? Прямо сейчас, ваш вопрос звучит как дубликат http://stackoverflow.com/questions/27083206/itextshape-clickable-polygon-or-path, но я не голосовал, чтобы закрыть вопрос, потому что я не уверен. Если это дубликат, у вас есть свой ответ. Если это не так, объясните, почему нет. –

+0

Это похоже на шаг в правильном направлении. То, что я хочу сделать, это иметь UML-диаграммы в документе. Им нужно «плавать», а не находиться на абсолютных позициях страницы. Я хочу, чтобы иметь возможность щелкнуть прямоугольник, представляющий класс, и выполнить действие, например, страницу goto, где задан класс, или, возможно, добавить аннотацию к описанию. Похоже, пример, на который вы ссылаетесь, ставит многоугольник в фиксированное место. –

+0

В PDF нет такой вещи, как плавающие изображения. Изображения всегда добавляются в абсолютные позиции. Вы уверены, что не говорите об аннотациях? Если бы я был вами, я бы работал с квадратными аннотациями. –

ответ

0

Пожалуйста, взгляните на пример AddLinkImages. Сначала я планировал использовать только файлы WMF (согласно вашему запросу), но я не нашел их, поэтому я использовал PNG, некоторые BMP и один WMP.

Вы хотите, чтобы эти изображения добавлялись точно так же, как и любой другой объект, но вы также хотите добавить к ним действие. Этого можно добиться, чтобы обернуть изображение внутри Chunk, как описано в главе 2 моей книги. Если у вас есть Chunk, вы можете определить PdfAction, что будет срабатывать, когда кусок (или в данном случае изображение завернутые в кусок) щелкают:

public Chunk createImage(String src, String url) throws BadElementException, IOException { 
    Image img = Image.getInstance(src); 
    Chunk chunk = new Chunk(img, 0, 0, true); 
    chunk.setAction(new PdfAction(url)); 
    return chunk; 
} 

Обратите внимание, что я установить параметр changeLeading в true , Если я этого не сделаю, начало абзаца станет ведущим текстом, а изображения обычно больше, что приведет к перекрытию текста и изображений. Установив changeLeading на true, ведущие адаптируются к высоте изображений.

public void createPdf(String dest) throws IOException, DocumentException { 
    Document document = new Document(); 
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest)); 
    document.open(); 
    PdfContentByte cb = writer.getDirectContent(); 
    document.add(new Paragraph("Objects with links")); 
    Paragraph p = new Paragraph(); 
    p.add(createImage("resources/images/info.png", "http://itextpdf.com/")); 
    p.add(createImage("resources/images/dog.bmp", "http://pages.itextpdf.com/ebook-stackoverflow-questions.html")); 
    p.add(createImage("resources/images/fox.bmp", "http://stackoverflow.com/q/29388313/1622493")); 
    p.add(createImage("resources/images/butterfly.wmf", "http://stackoverflow.com/questions/tagged/itext*")); 
    document.add(p); 
    document.close(); 
} 

enter image description here

+0

Спасибо. Наверное, я действительно не понимаю, однако стараюсь. Я создаю изображение WMF, чтобы содержать многочисленные прямоугольники, каждый из которых требует отдельного действия. Но я думаю, вы указали мне в сторону решения. Я опубликую его, если он будет работать. В принципе, я вставляю изображение как обычно, а затем фиксирую текущую вертикальную позицию. Поскольку я знаю, где я помещаю прямоугольники в WMF, я должен иметь возможность перекрывать аннотации с соответствующими действиями. –

+0

Если вы закроете 'Image' внутри' Chunk', вы можете получить положение изображения с помощью общего события тега. Вы могли бы даже нарисовать все фигуры в таком случае. –

Смежные вопросы