作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 iText 将一系列 html 文件转换为 PDF。
例如:如果有这些文件:
最佳答案
开始之前:我不是 C# 开发人员,所以我不能给你一个 C# 的例子。我写的所有 iText 示例都是用 Java 编写的。幸运的是,iText 和 iTextSharp 始终保持同步。在这个问题的上下文中,您可以放心,任何适用于 iText 的东西也适用于 iTextSharp,但您必须进行特定于 C# 的小调整。从我从 C# 开发人员那里听到的,这通常不难实现。
关于答案:有两个答案,答案#2 通常比答案#1 好,但我给出了两个选项,因为可能存在答案#1 更好的特定情况。
测试数据:我创建了 3 个简单的 HTML 文件,每个文件都包含有关美国某个州的一些信息:
public byte[] parseHtml(String html) throws DocumentException, IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, baos);
// step 3
document.open();
// step 4
XMLWorkerHelper.getInstance().parseXHtml(writer, document,
new FileInputStream(html));
// step 5
document.close();
// return the bytes of the PDF
return baos.toByteArray();
}
byte[]
的形式返回该 PDF 文件。 .由于我们想要创建单个 PDF,我们可以将此字节数组提供给
PdfCopy
实例,以便我们可以连接多个文档。
public static final String[] HTML = {
"resources/xml/page1.html",
"resources/xml/page2.html",
"resources/xml/page3.html"
};
byte[]
, 创建
PdfReader
实例与 PDF 字节,并将文档添加到
PdfCopy
使用
addDocument()
的实例方法:
public void createPdf(String file) throws IOException, DocumentException {
Document document = new Document();
PdfCopy copy = new PdfCopy(document, new FileOutputStream(file));
document.open();
PdfReader reader;
for (String html : HTML) {
reader = new PdfReader(parseHtml(html));
copy.addDocument(reader);
reader.close();
}
document.close();
}
PdfCopy
(也不是
PdfSmartCopy
)可以合并字体子集。这可能会导致臃肿的 PDF 文件包含太多相同字体的字体子集。
parseHtml()
中那样将 HTML 解析为 PDF 文件。答案#1中的方法。相反,我们将 HTML 解析为 iText
ElementList
使用
parseToElementList()
方法。这个方法需要两个
String
s。一个包含 HTML 代码,另一个包含 CSS 值。
String
.至于CSS值,我们可以通过
null
至
parseToElementList()
,但在这种情况下,默认样式将被忽略。您会注意到
<h1>
如果您不通过
default.css
,我们在 HTML 中引入的标签将看起来完全不同。随 XML Worker 一起提供。
public void createPdf(String file) throws IOException, DocumentException {
Document document = new Document();
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();
}
Document
和一个
PdfWriter
实例。我们将不同的 HTML 文件解析为
ElementList
s 一一,我们将所有元素添加到
Document
.
document.newPage()
.如果删除此行,则可以在单个页面上添加三个 HTML 页面(如果您选择答案 #1,这是不可能的)。
关于itextsharp - 如何将多个 HTML 文件解析为单个 PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27814701/
我是一名优秀的程序员,十分优秀!