Anuj Sharma
Anuj Sharma

Reputation: 66

Append Images to RTF document

I am trying to add images to a rtf document. I am able to add images to the document but I can't append any images. This means that when the 2nd Image is added, the first image is removed. I think that whenever the code is executed a new rtf document is created.

public class InsertToWord {

    com.lowagie.text.Document doc = null;
    FileOutputStream evidenceDocument;
    String fileName = "evidenceDocument.rtf";
    settings obj = null;

    InsertToWord() {
        obj = new settings();
        doc = new com.lowagie.text.Document();

    }

    public void insertImage(File saveLocation) {

        try {
            evidenceDocument = new FileOutputStream(obj.getFileLocation() + fileName);
            RtfWriter2.getInstance(doc, evidenceDocument);
            doc.open();
            com.lowagie.text.Image image = com.lowagie.text.Image.getInstance(saveLocation.toString());
            image.scaleAbsolute(400, 300);
            doc.add(image);
            doc.close();
        } catch (Exception e) {
        }
    }
}

Upvotes: 0

Views: 2926

Answers (2)

Josef
Josef

Reputation: 537

This code is the one I´m using to add an image into a RTF format and its working fine :

public void actionPerformed(ActionEvent arg0) {

        JFileChooser fileChooser = new JFileChooser();
        int option = fileChooser.showOpenDialog(null);
        File file = fileChooser.getSelectedFile();

        if (option == JFileChooser.APPROVE_OPTION) {

            try {

                BufferedImage image = ImageIO.read(file);
                image = Scalr.resize(image, 200);
                document = (StyledDocument) textPane.getDocument();
                javax.swing.text.Style style = document.addStyle("StyleName", null);
                StyleConstants.setIcon(style, new ImageIcon(image));
                document.insertString(document.getLength(), "ignored text", style);


            }

            catch (Exception e) {
                e.printStackTrace();
            }

        }

        if (option == JFileChooser.CANCEL_OPTION) {

            fileChooser.setVisible(false);

        }

    }// End of Method

The textPane variable is a JTextPane.

Upvotes: 0

Jonathan Payne
Jonathan Payne

Reputation: 2223

On your insertImage() method, you are indeed creating a new file and overwriting your old one.

This line is creating the new file:

evidenceDocument = new FileOutputStream(obj.getFileLocation()+fileName);

You can pass the FileOutputStream in as a parameter to the method and then remove the line all together:

public void insertImage( FileOutputStream evidenceDocument , File saveLocation )

Upvotes: 1

Related Questions