我正在尝试将HTML转换为PDF。首先,我从以下链接将我的HTML代码转换为XHTML。 http://www.cruto.com/resources/code-generators/code-converters/html-to-xhtml.asp
然后,为了测试它,我创建了一个带有生成的XHTML代码的HTML文件,并在浏览器上成功显示。之后,我尝试使用以下java代码将HTML文件转换为PDF。
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标签中有一个样式标签,如下所示。
<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文件?谢谢你的建议。
答案 0 :(得分:0)
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();
这就是我的方式。