XML (XSL) Ошибка преобразования HTML в PDF (Java)

Я почти закончил работу над программой для преобразования HTML в формат PDF. Моя проблема более конкретна, чем эта программа. У меня есть XSL-файл, который доставляет мне неудобства, когда я пытаюсь использовать его в своей программе.

При использовании javax.xml.transform.Transformer.transform(source, result) я получаю следующие предупреждения и сообщения об ошибках из-за моей таблицы стилей XSL:

Предупреждения компилятора: атрибут 'leader-length' вне элемента.
ОШИБКА: 'Ошибка (неизвестное местоположение): fo:list-item не является допустимым дочерним элементом fo:block.'

Соответствующий файл XSL можно найти здесь: http://webcoder.info/downloads/xhtml2fo.html

В этом руководстве рекомендуется: https://blogs.oracle.com/chrisf/entry/converting_html_to_pdf_using< /а>

Любая помощь в том, что/откуда поступают эти сообщения об ошибках, будет очень полезна! Я совершенно не знаком с файлами XSL.

Большое спасибо.

РЕДАКТИРОВАТЬ: Я полагаю, что возможно, что что-то еще виновато. Используя другие файлы XSL, я получаю: «Документ пуст (возможно, что-то не так с вашей таблицей стилей XSLT)». У него ошибка в коде? (По ссылке выше.)

EDIT2: я должен был опубликовать это в первую очередь: http://webcoder.info/downloads/xhtml2fo.xsl

Если эта ссылка не работает, я вставлю сюда точный код. Спасибо!

EDIT3: это часть HTML, который я пытаюсь использовать в качестве примера: http://docs.oracle.com/javase/1.4.2/docs/tooldocs/solaris/classpath.html


person BlackVegetable    schedule 22.05.2012    source источник
comment
Фактическая ошибка (не предупреждение) является ошибкой XSL-FO. Элементы списка пытаются вывести в файле fo:block. Можете ли вы опубликовать свой входной HTML?   -  person Daniel Haley    schedule 22.05.2012
comment
Все, кроме самых простых HTML-страниц, имеют проблемы со списками. Что мне нужно изменить в файле XSL? Это кажется очень сложным и немного выше моей головы.   -  person BlackVegetable    schedule 23.05.2012
comment
Я не могу сказать, что нужно изменить, пока не воспроизведу ошибку. classpath.html в EDIT3 даже близко не соответствует правильному формату, поэтому его нельзя рассматривать как XML, который должен обрабатывать XSLT. У вас есть другой пример, который можно обработать с помощью XSLT?   -  person Daniel Haley    schedule 23.05.2012
comment
В коде я использую HTMLCleaner (2.2), который должен принимать ввод HTML и очищать его до правильно сформированного XML. Теперь в примере используется версия 2.1, которая может быть источником ошибки, но я не могу найти место для загрузки версии 2.1. Я не думаю, что это работает в данный момент.   -  person BlackVegetable    schedule 23.05.2012
comment
Я не могу помочь напрямую, но настоятельно рекомендую проверить технологии CSS+XHTML в PDF в вашей будущей работе, см. Зачем использовать XSL -FO вместо CSS2, для преобразования HTML в хороший PDF?. Я изучал XSL-FO и CSS с момента публикации и пришел к выводу, что в ближайшем будущем CSS2 для постраничных медиа будет лучшим решением для любого конвейера публикации XML. Все XML-инструменты (от инструментов для авторов и редакторов до инструментов массового производства) совместимы со стандартами XHTML и CSS, и существует множество зрелых инструментов и людей, работающих с ними.   -  person Peter Krauss    schedule 26.07.2012


Ответы (1)


В строке перед <fo:leader ... /> не должно быть косой черты /.

person Joop Eggen    schedule 22.05.2012
comment
Знаете, на самом деле я не вижу строки с косой чертой перед ‹fo:leader (etc...)› Не могли бы вы дать мне номер этой строки? Спасибо за вашу помощь. - person BlackVegetable; 22.05.2012
comment
Найдите leader-length, а затем предыдущую строку. - person Joop Eggen; 22.05.2012
comment
Это исправляет предупреждение, но не ошибку. Спасибо за вашу помощь. - person BlackVegetable; 22.05.2012
comment
Опубликуйте свой XML, и я смогу вам помочь. Просто для понимания: таблица стилей XSLT была написана кем-то другим? - person Dabbler; 22.05.2012
comment
Правильный. Вместо того, чтобы загромождать вопрос, не будет ли вам проще перейти по первой ссылке, которую я разместил? Он ведет на html-страницу, содержащую XML. Я могу удалить небольшой фрагмент и удалить предупреждение компилятора, но это не повлияет на ОШИБКУ, которая приводит к сбою моей программы. - person BlackVegetable; 22.05.2012
comment
Хм, вы имели в виду XML-представление HTML-страницы, с которой я работаю? Если это так, я просто использую любую старую страницу. Но я думаю, вы имели в виду XSL (который является своего рода XML?) - person BlackVegetable; 22.05.2012
comment
Я имел в виду входной XML для преобразования (который, я полагаю, XHTML). Технически проблема в том, что list-item должен находиться внутри list-block. Но эта ошибка может быть связана либо с ошибкой в ​​XSLT, либо с вашим XHTML, поэтому мне нужен фактический XHTML, чтобы выяснить это. - person Dabbler; 23.05.2012
comment
До сих пор я пытался заставить этот код работать на любой HTML-странице. Мой код в основном такой же, как и во второй ссылке, которую я предоставил. Если у вас есть пример страницы HTML (XHTML?), которую, по вашему мнению, было бы хорошо и просто попробовать, я бы хотел ее увидеть. Я очень запутался с этим проектом. - person BlackVegetable; 23.05.2012
comment
Ладно, теперь я чувствую себя глупо. Мой (его) код работает, но не для каждого файла HTML. Как узнать, не будет ли HTML-файл совместим с моим XSL-документом (и нужно ли для этого открывать новый вопрос?) - person BlackVegetable; 23.05.2012
comment
Что ж, проблема возникает со списками, поэтому любой XHTML, не содержащий списков, не будет иметь этой проблемы. Но вам действительно нужно предоставить XHTML. Ссылка, которую вы разместили, не содержит ничего. По-видимому, он построен динамически из некоторого HTML, но HTML также не отображается. - person Dabbler; 23.05.2012
comment
давайте продолжим это обсуждение в чате - person Dabbler; 23.05.2012