powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вытащить содержимое страницы HTML при печати в ПДФ
7 сообщений из 7, страница 1 из 1
Вытащить содержимое страницы HTML при печати в ПДФ
    #37693440
s-dme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, пожалуйста, помогите и не сильно ругайте.

Я новичок, реально намучалась уже с одной задачей, и даже не знаю точно, в какую сторону стоит копать,
есть несколько вариантов, все испробованы и пока упираются в тупик.

Задача. Есть контент менеджмент система. В ней страница с типа как списком (архивом) аннотаций к различным статьям.
Под каждой аннотацией линк на саму статью.

И вот моя задача - сформировать ПДФ из этой страницы архива

НО (!) так, чтоб после самого архива шли еще и сами статьи. Т.е моя задача пройтись по всем ссылкам,
выцепить статью и добавить к концу ПДФ файла.


Загвоздка именно в получении ПДФ, так как на экране искомый вид страницы сделать удается. а ПДФ - нет, и вот почему:


Страница самого архива - это отдельный шаблон, который генерится на страницу "архив.jsp",
которая, в свою очередь и шлется на печать в ПДФ следующим образом:

Код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 	RequestDispatcher rd = request.getRequestDispatcher("архив.jsp");
 	    
 	    
 	     rd.forward(request, new HttpServletResponseWrapper(response)
 	     {
 	         @Override
 	         public java.io.PrintWriter getWriter() throws IOException
 	         {
 	           return pWriter;
 	         }
 	       }
 	   );





Далее все немножко сложнее. Шаблон архива на самом деле включает подшаблоны самих статей, которые генерятся "внутри".
Так вот, для генерации шаблонов статей также каждый раз используется request.getRequestDispatcher(*...*).forward


Слегка Smile подебажившись, я поняла, что в результате этих форвардов теряется содержимое request и response.

Вследствие этого ПДФ пытается напечатать только последнюю статью.


Испробованные мною варианты.

1) Влезть в момент создания ПДФ из стринг буффера, выбрать оттуда ссылки, вытащить по ним страницу HTML со статьей
и каким то образом прицепить к ПДФ.

проблемы
а) если я пытаюсь просто прочитать HTML страницу, там, естественно, теряются стили,
т.к я вытаскиваю только неразвернутые линки на СSS файлы, но никак не сами стили.
Ок, я пробовала вытащить оттуда саму статью, голый HTML , это удается, но тогда его нужно впихнуть внутрь генерируемого ДОМ документа,
внуть всех контейнеров типа "боди" и прочее. Вставка не работает, крешатся парсеры т.к полученный HTML статьи не является правильным ХМL документом

б) Даже если мне удастся получить HTML статьи со стилями, то как потом его прицепить к существующему документу, чтоб эти стили не потерялись?

2) Второй вариант, который я думала, это никуда в саму генерацию ПДФ не вмешиваться,
а просто каким то образом сохранять и восстанавливать объекты request и response при вызове рендерера каждой из статей.

Тут проблема одна (пока одна). Я по неопытности просто имею очень смутное представление как это сделать.
Читаю про сериализацию объектов, но пока не знаю, удастся ли мне сериализовать правильно такие ответственные объекты
...
Рейтинг: 0 / 0
Вытащить содержимое страницы HTML при печати в ПДФ
    #37693567
s-dme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, если задача слишком обширная.

Пока можно упростить.

Как прочитать под-страницу страницу по ссылке так, чтоб при этом сохранились все стили?

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

URLConnection conn = url.openConnection();

in = new BufferedReader(
new InputStreamReader(
url.openStream()));

StringBuffer sBuf = new StringBuffer();
String str;
while ((str = in.readLine()) != null)
sBuf.append(str);

return sBuf.toString();


Пожалуйста, подскажите хотя бы в сторону чего смотреть и в сторону чего копать .

Спасибо еще раз.
...
Рейтинг: 0 / 0
Вытащить содержимое страницы HTML при печати в ПДФ
    #37693603
s-dme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Второй подвопрос - можно ли сериализовать реквест -респонс и как это правильно сделать
...
Рейтинг: 0 / 0
Вытащить содержимое страницы HTML при печати в ПДФ
    #37693733
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s-dme,
я лично не понял, кто и как печатает\генерит\в респонс pdf
...
Рейтинг: 0 / 0
Вытащить содержимое страницы HTML при печати в ПДФ
    #37693875
s-dme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,


Я действительно слишком сложно объяснила, постараюсь упростить. И еще раз простите, если пишу глупости, я новичок.

Есть jsp страница "архив.jsp", которая отправляется на печать в ПДФ следующим образом.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
       final StringWriter buffer = new StringWriter();
      final PrintWriter pWriter = new PrintWriter(buffer);


            RequestDispatcher rd = request.getRequestDispatcher("архив.jsp");
 	    
 	    
 	     rd.forward(request, new HttpServletResponseWrapper(response)
 	     {
 	         @Override
 	         public java.io.PrintWriter getWriter() throws IOException
 	         {
 	           return pWriter;
 	         }
 	       }
 	   );

// Дальше идет вызов метода непосредственно генерации ПДФ, в который передается переменная [SRC HTML]buffer 


// Сам ПДФ генерится с помощью ITextRenderer


[/SRC]

Проблема в том, что внутри этой страницы есть скриплеты, которые вызывают методы подгрузки других страниц, и вот эти методы тоже используют аналогичный кусок кода, для получения других страниц. После каждого из этих скриплетов содержимое response и request меняется. И в итоге на печати у меня только результат *последнего* подгруженного фрагмента страницы, но никак не вся страница.

Что делать и как получить ПДФ (возможно, другими путями) я не знаю.
...
Рейтинг: 0 / 0
Вытащить содержимое страницы HTML при печати в ПДФ
    #37695682
s-dme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все.

Основную задачу уже решила самостоятельно, все-таки влезла в метод генерации ПДФ и вызываю сервлеты для получения подстраниц, далее тупо мержу ПДФ средствами рендерера.

Кривовато, наверное, но другого способа я не нашла.

Осталась последняя проблема, ПДФ рендерер ITextRenderer не может прочить в странице линки на стили и загрузить файлы стилей, хотя, по идее, должен был бы? Вроде бы все пути правильные.
...
Рейтинг: 0 / 0
Вытащить содержимое страницы HTML при печати в ПДФ
    #37696067
s-dme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуй, завершу свой монолог. :)

Решила я и задачу с отображениями стилей в ITextRenderer . Похоже, ему нужен был абсолютный путь, а не относительный, пришлось трансформировать путь уже на ходу, заменяя с помощью Матчера и регулярных выражений (чувствую, что это тоже криво.. но опять таки, это все что я надумала).

Эх, гуру джавы, я понимаю, новичок задает глупые вопросы, но может ему можно просто сказать хотя бы что сам вопрос глупый?
мы ведь не всегда можем сами догадаться даже об этом (((
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вытащить содержимое страницы HTML при печати в ПДФ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]