首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iText:将html和css转换为iText

iText:将html和css转换为iText
EN

Stack Overflow用户
提问于 2017-01-12 16:26:37
回答 1查看 8.5K关注 0票数 3

我正在尝试将HTML转换为PDF。首先,我通过以下链接将HTML代码转换为XHTML。http://www.cruto.com/resources/code-generators/code-converters/html-to-xhtml.asp

然后,为了测试它,我用生成的XHTML代码创建了一个HTML文件,并在浏览器上成功显示。在那之后,我尝试用下面的java代码将HTML文件转换成PDF。

代码语言:javascript
复制
public static final String DEST = "C:/Users/Turgut/Desktop/test12.pdf";
public static final String[] HTML = { "C:/Users/Turgut/Desktop/New Text Document (5).html", "C:/Users/Turgut/Desktop/New Text Document (5).html" };

public static void main(String[] args) {

    File file = new File(DEST);
    file.getParentFile().mkdirs();
    new TestHtmlToPdf().createPdf(DEST);
}

public void createPdf(String file) {
    Document document = new Document();
    try {
        //String HTML = "C:/Users/Turgut/Desktop/test12.html";
        PdfWriter.getInstance(document, new FileOutputStream(file));
        document.open();
        String css = readCSS();
        for (String htmlfile : HTML) {
            String html = Utilities.readFileToString(htmlfile);
            ElementList list = XMLWorkerHelper.parseToElementList(html, css);
            for (Element e : list) {
                document.add(e);
            }
            document.newPage();
        }
        document.close();
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    catch(DocumentException ex) {
        ex.printStackTrace();
    }
}

private String readCSS() throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int length;
    InputStream is = XMLWorkerHelper.class.getResourceAsStream("/default.css");
    while ((length = is.read(buffer)) != -1) {
        baos.write(buffer, 0, length);
    }
    return new String(baos.toByteArray());
}

我在head标签中有一个样式标签,如下所示。

代码语言:javascript
复制
<style type="text/css">
                body {
                background-color: #FFFFFF;
                font-family: 'Tahoma', "Times New Roman", Times, serif;
                font-size: 11px;
                color: #666666;
                }
                h1, h2 {
                padding-bottom: 3px;
                padding-top: 3px;
                margin-bottom: 5px;
                color : #000000;
                text-transform: uppercase;
                font-family: Arial, Helvetica, sans-serif;
                }
                h5 {
                padding-bottom: 0px;
                padding-top: 0px;
                margin-top: 0px;
                margin-bottom: 0px;
                color : #000000;
                font-style: normal;
                font-family: Arial, Helvetica, sans-serif;
                font-size: 1em;
                text-transform:none;
                }
                h5x {
                padding-bottom: 0px;
                padding-top: 0px;
                margin-top: 0px;
                margin-bottom: 0px;
                color : #000000;
                font-style: bold;
                font-family: Arial, Helvetica, sans-serif;
                font-size: 1em;
                text-transform:none;
                }                   
                h6 {
                padding-bottom: 0px;
                padding-top: 0px;
                margin-top: 0px;
                margin-bottom: 0px;
                color : #666666;
                font-style: normal;
                font-family: Arial, Helvetica, sans-serif;
                font-size: 1em;
                text-transform:none;
                }

                h1 {
                font-size: 1.4em;
                text-transform:none;
                }
                h2 {
                font-size: 1em;
                color: brown;
                }
                h3 {
                font-size: 1em;
                color: #333333;
                text-align: justify;
                margin: 0;
                padding: 0;
                }
                h4 {
                font-size: 1.4em;
                font-style: bold;
                font-family: Arial, Helvetica, sans-serif;
                color: #000000;
                margin: 0;
                padding: 0;
                }
                h4x {
                font-size: 1.4em;
                font-style: bold;
                font-family: Arial, Helvetica, sans-serif;
                color: #666666;
                margin: 0;
                padding: 0;
                }
                hr {
                height:2px;
                color: #000000;
                background-color: #000000;
                border-bottom: 1px solid #000000;
                }
                p, ul, ol {
                margin-top: 1.5em;
                }
                ul, ol {
                margin-left: 3em;
                }
                blockquote {
                margin-left: 3em;
                margin-right: 3em;
                font-style: italic;
                }
                a {
                text-decoration: none;
                color: #70A300;
                }
                h7 {
                font-size: 1.1em;
                font-style: bold;
                font-family: Arial, Helvetica, sans-serif;
                color: #000000;
                margin: 0;
                padding: 0;
                }
                a:hover {
                border: none;
                color: #70A300;
                }
                #customerPartyTable {
                border-width: 1px;
                border-spacing: 0px;
                border-style: solid;
                border-color: #FFFFFF; 
                border-collapse: collapse;
                background-color: #FFFFFF
                }
                #lineTable {
                border-width:2px;
                border-spacing:;
                border-style: solid;
                border-color: #000000; 
                border-collapse: collapse;
                background-color:;
                }
                #lineTableTd {
                border-width: 1px; 
                padding: 1px;
                border-style:  none solid none none;
                border-color: black;
                background-color: white;
                }
                #lineTableTh {
                border-width: 1px; 
                padding: 1px;
                border-style:  none solid none none;
                background-color: white;
                }
                #lineTableTrx {
                border-width: 0px; 
                padding: 0px;
                border-style: solid;
                border-color: #000000;
                background-color: white;
                -moz-border-radius:;
                }
                #lineTableThx {
                border-width: 1px; 
                padding: 1px;
                border-style:  none solid solid none;
                background-color: white;
                }
                #lineTableTr {
                border-width: 0px; 
                padding: 0px;
                border-style: solid;
                border-color: #000000;
                background-color: white;
                -moz-border-radius:;
                }
                #lineTableBudgetTd {
                border-width: 0px;  
                border-spacing:0px;
                padding: 1px;
                border-style: solid;
                border-color: #000000; 
                background-color: white;
                -moz-border-radius:;
                }                    
                table {
                border-spacing:0px;
                }
                td {
                border-color:#000000; 
                }</style>

有没有从HTML文件生成PDF文件的问题,但我不能读取css块我猜。因为,PDF文件和HTML文件是不一样的。在PDF文件中,某些文本的颜色与HTML文件不同。

如何使用css生成PDF文件?谢谢你的建议。

EN

回答 1

Stack Overflow用户

发布于 2017-04-23 20:10:12

代码语言:javascript
复制
    ByteArrayInputStream html = new ByteArrayInputStream(FileUtils.readFileToByteArray(new File(htmlSource)));
    ByteArrayInputStream css = new ByteArrayInputStream(FileUtils.readFileToByteArray(new File(cssSource)));
    html = getHtmlByteArrayStream(); //this is only for my picture not neccessary 
    // step 1
    Document document = new Document();
    // step 2
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destPdf));
    writer.setInitialLeading(12);
    // step 3
    document.open();

    // step 4
    XMLWorkerHelper.getInstance().parseXHtml(writer, document, html, css);

    // step 5
    document.close();

我就是这么做的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41608259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档