Wyswietlanie pliku PDF w JFrame

0

Czy jest mozliwosc wyswietlenia pliku .pdf wewnatrz okna JFrame przy uzyciu domyslnej przegladarki systemu?
Wiem, ze sa tez specjalne readery typu JPedal, ICE, a nawet Javabean Acrobat Reader'a, ale chcialbym zeby w oknie otwieralo domyslna przegladarke.
Wiem rowniez, ze otwarcie w nowym oknie jest banalne:

d = java.awt.Desktop.getDesktop();
d.open(new java.io.File("C:/plik.pdf"));

Zalezy mi jednak zeby otwierac domyslnym programem w moim oknie. Da sie?

0

Dzieki za szybka odpowiedz, ale tak napisany kod caly czas zwraca mi wyjatek FileNotFoundException mimo ze ten plik tam jest i moge go toworzyc normalnie. Jakis pomysl czemu?

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.io.File;
import java.io.FileOutputStream;
import javax.swing.JFrame;

/**
 *
 * @author Ja
 */
public class Main extends JFrame {

    private static int width = 800;
    private static int height = 600;

    public void PrintFrameToPDF(JFrame bill)  {
    try {
        Document d = new Document();
        PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream ("C:/plik.pdf"));
        d.open ();

        PdfContentByte cb = writer.getDirectContent();
        PdfTemplate template = cb.createTemplate(width, height);
        Graphics2D g2d = template.createGraphics(width, height);
        bill.print(g2d);
        bill.addNotify();
        bill.validate();
        g2d.dispose();

        d.close ();
    }
    catch(Exception e)  {
        System.out.println("blad");
    }
    }

    public static void main(String args[]) {
        Main frame = new Main();
        frame.setSize(new Dimension(width, height));
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.PrintFrameToPDF(frame);
    }
} 
0

Jak już to c:\plik.pdf. A jeszcze lepiej użyć do budowy ścieżki file.separator: http://download.oracle.com/javase/tutorial/essential/environment/sysprop.html

0

Jezeli wprowadze taka modyfikacje kodu:

public void PrintFrameToPDF(JFrame bill) {
        Desktop doc = java.awt.Desktop.getDesktop();
        try {
            doc.open(new java.io.File("C:"+System.getProperty("file.separator")+"plik.pdf"));
        } catch (IOException ex) {
            System.out.println("blad pliku");
        }
    try {
        Document d = new Document();
        PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream (new java.io.File("C:\\plik.pdf")));
        d.open (); 

to w wypadku pierwszej metody doc.open plik otwiera sie nawet dla separatora /, natomiast w drugim przypadku za kazdym razem jest wyjatek FileNotFoundException. Korzystam z NetBeans IDE 6.9.1. Jestes pewien ze ta metoda z linku, ktorego mi podales dziala? Stosowales ja?

0

Tak, stosowałem. Trochę mnie to dziwi. Czy plik nie jest blokowany przez inne aplikacje FNFE pojawia się też w przypadku gdy nie można otworzyć pliku.

0

No nie jest blokowany bo tym pierwszym sposobem sie otwiera. Poza tym ten plik jest kopia innego ze zmieniona nazwa i specjalnie nagrana na C:\ zeby sciezka byla krotka. Nie wiem czemu to nie dziala. Jeszcze jutro bede kombinowal i bede wdzieczny za wszelkie sugestie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1