請允許我從iTextSharp add (css style or a css file) and download pdf file重用代碼,並稍微改變一些值:
public static final String CSS = "th { border-top: 5px solid green; } "
+ "td { font-size: 10pt; border-color: gray; border: 3px}";
public static final String HTML = "<html><body><table class='table-bordered'>"
+ "<thead><tr><th>Customer Name</th><th>Customer's Address</th> </tr></thead>"
+ "<tbody><tr><td> XYZ </td><td> Bhubaneswar </td></tr>"
+ "<tr><td> MNP </td><td> Cuttack </td></tr></tbody>"
+ "</table></body></html>";
/**
* @param file
* @throws IOException
* @throws DocumentException
*/
public void createPdf(String file) throws IOException, DocumentException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
document.open();
CSSResolver cssResolver = new StyleAttrCSSResolver();
CssFile cssFile = XMLWorkerHelper.getCSS(new ByteArrayInputStream(CSS.getBytes()));
cssResolver.addCss(cssFile);
// HTML
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
// Pipelines
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
// XML Worker
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
p.parse(new ByteArrayInputStream(HTML.getBytes()));
document.close();
}
所生成的PDF看起來是這樣的:
如果你看CSS
,你看我們將<th>
標記的邊界定義爲border-top: 5px solid green;
,將<td>
標記的邊界定義爲font-size: 10pt; border-color: gray; border: 3px
。這證明iText支持表格邊框的CSS。
您描述的行爲對於不推薦使用的HTMLWorker是很典型的。您應該改用XML Worker。我現在正在調低這個問題,因爲你沒有顯示你正在使用的'HTMLWorker'或XML Worker。請參閱http://developers.itextpdf.com/faq/category/parsing-xml-and-xhtml並發現表格邊框可以工作。 –
是的,我正在使用HTMLWorker,這是我的錯誤,但事實是HTMLWorker不支持tb邊框和html的很多屬性。所以,你可以請建議我最好的方法來將HTML轉換爲PDF與開源庫。 –
我發佈了一個答案,證明我以前的評論是正確的。 iText的XML Worker支持CSS中的'border'。您確認使用「HTMLWorker」是一個錯誤,並且我解釋說'HTMLWorker'已經被放棄以支持XML Worker,那麼您爲什麼不使用XML Worker? –