Ignore:
Timestamp:
01/30/14 11:11:40 (10 years ago)
Author:
jts21
Message:

Add support to PDF2Writer for rotated images, filled polyons, polylines, and arrows (complete with arrowheads)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/io/PDF2Writer.java

    r655 r789  
    33import java.awt.Dimension;
    44import java.awt.Image;
     5import java.awt.Polygon;
    56import java.io.FileOutputStream;
    67import java.io.IOException;
    78import java.io.Writer;
    89import java.util.Collection;
     10import java.util.LinkedList;
    911import java.util.List;
    1012
     
    1214import org.expeditee.gui.FrameGraphics;
    1315import org.expeditee.items.Item;
     16import org.expeditee.items.Line;
    1417import org.expeditee.items.Picture;
    1518import org.expeditee.items.Text;
     
    100103                try {
    101104                        PdfContentByte cb = _pdfWriter.getDirectContent();
    102                         com.lowagie.text.Image iTextImage = com.lowagie.text.Image
    103                                         .getInstance(image, null);
     105                        com.lowagie.text.Image iTextImage = com.lowagie.text.Image.getInstance(image, null);
    104106                        iTextImage.setAbsolutePosition(pic.getX(), _pdfWriter.getPageSize().getHeight() - pic.getY() - pic.getHeight());
     107                        iTextImage.setRotationDegrees((float) - pic.getRotate());
    105108                        cb.addImage(iTextImage);
    106109                } catch (DocumentException e) {
    107110                        e.printStackTrace();
     111                }
     112        }
     113       
     114        private List<Line> seenLines = new LinkedList<Line>();
     115        private List<Item> seenArrowHeads = new LinkedList<Item>();
     116        @Override
     117        protected void writeLine(Line line) throws IOException {
     118                if(seenLines.contains(line)) {
     119                        return;
     120                }
     121                PdfContentByte cb = _pdfWriter.getDirectContent();
     122                float height = _pdfWriter.getPageSize().getHeight();
     123                if(line.getStartItem().isEnclosed()) {
     124                        seenLines.add(line);
     125                        Line currentLine = line;
     126                        Item currentItem = line.getStartItem();
     127                        cb.moveTo(currentItem.getX(), height - currentItem.getY());
     128                        for(;;) {
     129                                currentItem = currentLine.getOppositeEnd(currentItem);
     130                                cb.lineTo(currentItem.getX(), height - currentItem.getY());
     131                                for(Line l : currentItem.getLines()) {
     132                                        if(l.equals(currentLine)) {
     133                                                continue;
     134                                        }
     135                                        currentLine = l;
     136                                        break;
     137                                }
     138                                if(currentLine == null || currentLine.equals(line)) {
     139                                        break;
     140                                }
     141                                seenLines.add(currentLine);
     142                        }
     143                        cb.setColorFill(currentItem.getFillColor());
     144                        cb.setColorStroke(currentLine.getColor());
     145                        cb.closePathFillStroke();
     146                } else {
     147                        for(Item l : line.getStartItem().getAllConnected()) {
     148                                if(l instanceof Line && !seenLines.contains(l)) {
     149                                        seenLines.add((Line) l);
     150                                        Item start = ((Line) l).getStartItem();
     151                                        Item end = ((Line) l).getEndItem();
     152                                        cb.moveTo(start.getX(), height - start.getY());
     153                                        cb.lineTo(end.getX(), height - end.getY());
     154                                        cb.setColorStroke(l.getColor());
     155                                        cb.closePathStroke();
     156                                        Polygon arrow = ((Line) l).getStartArrow();
     157                                        if(arrow != null) {
     158                                                cb.moveTo(arrow.xpoints[0], height - arrow.ypoints[0]);
     159                                                for(int i = 1; i < arrow.npoints; i++) {
     160                                                        cb.lineTo(arrow.xpoints[i], height - arrow.ypoints[i]);
     161                                                }
     162                                                cb.setColorFill(l.getColor());
     163                                                cb.closePath();
     164                                                cb.fill();
     165                                        }
     166                                        arrow = ((Line) l).getEndArrow();
     167                                        if(arrow != null) {
     168                                                cb.moveTo(arrow.xpoints[0], height - arrow.ypoints[0]);
     169                                                for(int i = 1; i < arrow.npoints; i++) {
     170                                                        cb.lineTo(arrow.xpoints[i], height - arrow.ypoints[i]);
     171                                                }
     172                                                cb.setColorFill(l.getColor());
     173                                                cb.closePath();
     174                                                cb.fill();
     175                                        }
     176                                }
     177                        }
    108178                }
    109179        }
Note: See TracChangeset for help on using the changeset viewer.