2011-01-17 4 views
4

У меня есть HTML-контент (включая теги форматирования, такие как strong, изображения и т. Д.). В моем коде Java я хочу преобразовать этот HTML-контент в PDF-документ, не теряя форматирования HTML.Java - Как конвертировать HTML-контент в PDF без потери форматирования?

Есть ли способ сделать это на Java (используя iText или любую другую библиотеку)?

+1

возможно дубликат [Использование IText для преобразования HTML в PDF] (http://stackoverflow.com/questions/235851/using-itext-to-convert-html-to-pdf) – dogbane

ответ

0

Я бы попробовал DocRaptor.com. Он преобразует html в pdf или html в xls на любой язык, и поскольку он использует Prince XML (не заставляя платить дорогостоящую лицензионную плату), качество намного лучше, чем другие варианты. Это также веб-приложение, поэтому загружать нечего. Легкий способ обойти длинное, разочаровывающее кодирование.

Вот некоторые примеры: https://docraptor.com/documentation#coding_examples

0

Преобразование HTML в PDF не совсем прямолинейно, но если вы контролируете то, что входит в HTML, вы можете попробовать использовать реализацию XSL-FO, например Apache FOP.

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

+0

Я слышал ужасные вещи о FO P;) Но XSL все равно пугает людей. – Jules

+1

FOP не очень хорош (преуменьшение года :)), но все зависит от того, для чего вы хотите его использовать. Если это всего лишь простой один или два документа на странице для загрузки ваших пользователей, FOP в порядке. Если вы хотите производить качество печати, даже не рассматривайте его, вам лучше купить лицензию XEP. – biziclop

4

Я использовал ITextRenderer из проекта Flying Saucer.

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

Итак, в примере я пишу его в файл исключительно ради демонстрации этого вопроса. Это Java 8.

import com.lowagie.text.DocumentException; 
import org.apache.commons.io.FileUtils; 
import org.xhtmlrenderer.pdf.ITextRenderer; 

import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.IOException; 

public class So4712641 { 

    public static void main(String... args) throws DocumentException, IOException { 
    FileUtils.writeByteArrayToFile(new File("So4712641.pdf"), toPdf("<b>You gotta walk and don't look back</b>")); 
    } 

    /** 
    * Generate a PDF document 
    * @param html HTML as a string 
    * @return bytes of PDF document 
    */ 
    private static byte[] toPdf(String html) throws DocumentException, IOException { 
    final ITextRenderer renderer = new ITextRenderer(); 
    renderer.setDocumentFromString(html); 
    renderer.layout(); 
    try (ByteArrayOutputStream fos = new ByteArrayOutputStream(html.length())) { 
     renderer.createPDF(fos); 
     return fos.toByteArray(); 
    } 
    } 
} 

Это дает мне

enter image description here

Для полноты, вот соответствующие части для моей Maven pom.xml

<dependencies> 
    <dependency> 
     <groupId>org.xhtmlrenderer</groupId> 
     <artifactId>flying-saucer-pdf</artifactId> 
     <version>9.0.8</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>2.4</version> 
    </dependency> 
</dependencies> 
+1

Ты спас мой день! Спасибо за ваш вклад!! :) – shirkkan

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