JTextPane

Модератор: Absurd

Ответить
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Привет!
Такая задача. На машине локально есть html-страница. Нужно отобразить ее на экране с последующей возможностью печати.
Для того чтобы отобразить я пробовал использовать JTextPane, а именно метод setPage. Отображается все как надо, но… в качестве параметра нужно посылать URL. Для того чтобы отобразить страницу "E:\article.htm" мне нужно посылать в качестве параметра "file://localhost/E:/article.htm".
В связи с этим хочу спросить. Как поступать, если известен только обычный путь ("E:\article.htm"), а иногда только относительный ("htm\article.htm").

Ну и про печать…

Вот код. Где-то нашел в примерах…

Код: Выделить всё

if ("print".equals(e.getActionCommand())) {
      DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
      PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
      PrintService pservices = PrintServiceLookup.lookupDefaultPrintService();
      
       if (pservices!=null) {
        System.out.println("selected printer " + pservices.getName());

        DocPrintJob pj = pservices.createPrintJob();
        try {
          FileInputStream fis = new FileInputStream("E:\\article.htm");
          Doc doc = new SimpleDoc(fis, flavor, null);
          pj.print(doc, aset);

        }
        catch (IOException ie) {
          System.err.println(ie);
        }
        catch (PrintException ex) {
          System.err.println(ex);
        }
      }
}
Это не то, что надо, но от этого решил отталкиваться…

Так вот… Пример рабочий, но

1) печатает исходник страницы, а не то что должно отображаться…
Думаю надо изменить строку

Код: Выделить всё

DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
но на что изменить не знаю. Пробовал

Код: Выделить всё

DocFlavor flavor = DocFlavor.INPUT_STREAM.TEXT_HTML_US_ASCII;
ругается

2) Как сделать чтобы инфу для вывода брать непосредственно из JTextPane, а не с помощью FileInputStream.

3) ну и последнее, просто интересно… у меня на компе стоит Status Monitor. Все чтобы я не посылал на печать перехватывается этим монитором, можно посмотреть как будет выглядеть страница, отменить печать части страниц и т.д. Не было случая чтобы монитор, что-то пропустил. До сегодняшнего дня. Пример, который описан выше, сразу же начал печататься на принтере. Почему?

Заранее спасибо!
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Код: Выделить всё

String html = "<b style='color: red;'>Hello, World![/b]
";

html += "<a href=\"http://www.google.com\">google</a>
";
		
JEditorPane htmlPanel = new JEditorPane("text/html", html); // style, text
Запихнуть в String содержимое файла, надеюсь, не будет проблемой.
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Попробовал...
Если пытаюсь загрузить обычную html-страницу - ничего не отображается...
Если убрать такие тэги как <html>, <head>, <body> из страницы и оставить только контент и оформление - все отображается...
Но надо-то страницы...
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

keo,
мда .. логично, не подумал ..

тогда так:

Код: Выделить всё

JEditorPane htmlPanel = null;
		try {
			//URL url = new URL("file", "localhost", "E:/test.html"); //абсолютный путь
			URL url = new URL("file", "localhost", "test.html"); // относительный путь
			htmlPanel = new JEditorPane(url);
		} catch (IOException e) {
			htmlPanel = new JEditorPane();
			htmlPanel.setText(e.getMessage());
		}		
		htmlPanel.setEditable(false);
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Oscar, спасибо...
Это похоже то, что мне нужно.

А с печатью что-нибудь подскажешь?
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

keo, с печатью никогда дела не имел, даже принтера нет.

Могу посоветовать почитать: Java Print Service, но это скорей для общего развития, чем для решения конкретной задачи.

Зато нашел кой-чего, что делает (пунт 2) того, что тебе нужно:
"Как напечатать контент JEditorPane"

На принтере проверить не могу, но после раскомментирования двух указаных участков и маленьких подправок, вывод картинки (Image) в другой JFrame у меня сработал "на ура".

P.S. надо больше спать ...
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Oscar, спасибо...
P.S. надо больше спать ...
???
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

keo, оффтопик: Это я о себе, по поводу структуры последнего предложения.
Ответить