Позвольте мне повторно использовать код из 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 с библиотекой с открытым исходным кодом. –
Я отправил ответ, который доказывает, что мой предыдущий комментарий верен. XML Worker iText поддерживает 'border' в CSS. Вы подтверждаете, что использование «HTMLWorker» является ошибкой, и я объяснил, что «HTMLWorker» был оставлен в пользу XML Worker, поэтому почему вы не используете XML Worker? –