2013-03-02 1 views
1

Я использую класс Java (http://pastebin.com/KhSGPmCV), который принимает HTML-документ и пытается преобразовать его в документ PDF с помощью следующих шагов:HTML в PDF с использованием XSL FO имеет проблему с разбивкой по страницам - отображает только первую страницу

  1. Использует Tidy для его анализа в XML-документе.
  2. Использует таблицу стилей (XSLT http://pastebin.com/s45gRTKy) для преобразования XML- в документ FO
  3. Использование Apache FOP для преобразования FO в PDF документе.

Проблема, с которой я столкнулся, - это только первая страница моего документа HTML, преобразуется в PDF. Предупреждающее сообщение, что я вижу -

Mar 2, 2013 2:53:06 PM org.apache.fop.events.LoggingEventListener processEvent WARNING: Content overflows the viewport of an fo:block-container in block-progression direction by 350 millipoints. Content will be clipped. (See position 51:261)

Я почти уверен, что проблема заключается в таблице стилей XSL FO, который я использую. Но даже после добавления/изменения большого количества переменных в этой таблице стилей я не могу сделать вторую страницу видимой. Может ли кто-нибудь помочь мне?

Ссылка на HTML, что я пытался преобразовать в PDF - pastebin.com/iBLw8Pbv

ответ

1

Вы используете Apache FOP для создания PDF. Прочитайте это очень важное примечание в XSL:

Поскольку этот стиль первоначально разработан Antenna House быть используется с XSL Formatter, не могут быть совместимы с другими XSL-FO процессоров.

Возможно, вы можете использовать Антенну, вы ожидаете приятного выхода. Если вы можете получить двоичный файл, сценарий ниже может помочь (Ubuntu). Если вы все равно используете xsl: <nobr> не в том, что xsl ... в вашем HTML-файле вы должны заменить его <pre>. Другая проблема заключается в том, что аккуратный, по-видимому, не фиксирует конечные кавычки и генерирует много предупреждений о плохих @ids (некоторые @ids будут содержать @class).

Я понятия не имею, как это исправить. У меня нет ФОПА на моем пути к классам, так что мне нужно это:

javac -cp .:/usr/share/java/fop.jar:/usr/share/java/jtidy.jar Html2PDF.java 
java -cp .:/usr/share/java/fop.jar:/usr/share/java/jtidy.jar Html2PDF samplehtml.txt xhtml2fo.xsl 

И я написал простой скрипт, который поможет много, как отлаживать:

# remove broken IDs 
sed "s/id=\"[^\"]* //g" samplehtml.txt > samplehtml.txt.fixedID 

# use tidy 
tidy -utf8 -w 255 -indent -quiet -asxhtml <samplehtml.txt.fixedID> samplehtml.txt.tidy 

# change 
# - &nbsp; to &$160; 
# - remove xmlns declaration 
# - <nobr to <pre ;; </nobr to </pre 
sed -e "s/nbsp/#160/g;s/<html [^>]*/<html/;s/<nobr/<pre/g;s/<\/nobr/<\/pre/g" samplehtml.txt.tidy > samplehtml.txt.tidy2 
xalan -xsl xhtml2fo.xsl -in samplehtml.txt.tidy2 -out res.fo 
fop res.fo res.pdf 

Edit: я нашел аккуратный проект что делает то, что вам нужно, и выход выглядит великолепно. https://code.google.com/p/wkhtmltopdf/

+0

Большое спасибо за ответ youre. Это помогает! – Krishna

+0

Добро пожаловать! Надеюсь, вы поняли это. Также я нашел это сегодня и фактически работал с вашим сложным html-файлом: https://code.google.com/p/wkhtmltopdf/ – ljdelight

Смежные вопросы