iTextSharp 创建带有空白页的 PDF
iTextSharp creates PDF with blank pages
我刚刚将 iTextSharp XMLWorker nuget 包(及其依赖项)添加到我的项目中,我正在尝试将 HTML 从字符串转换为 PDF 文件,即使没有例外抛出,正在生成带有两个空白页的 PDF 文件。为什么?
以前版本的代码只使用 iTextSharp 5.5.8.0 和 HTMLWorker 和 ParseList 方法,然后我切换到
这是我使用的代码:
public void ExportToPdf() {
string htmlString = "";
Document document = new Document(PageSize.A4, 40, 40, 40, 40);
var memoryStream = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
document.Open();
htmlString = sbBodyMail.ToString();
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, new StringReader(htmlString));
document.Close();
DownloadFile(memoryStream);
}
public void DownloadFile(MemoryStream memoryStream) {
//Clears all content output from Buffer Stream
Response.ClearContent();
//Clears all headers from Buffer Stream
Response.ClearHeaders();
//Adds an HTTP header to the output stream
Response.AddHeader("Content-Disposition", "attachment;filename=Report_Diagnosis.pdf");
//Gets or Sets the HTTP MIME type of the output stream
Response.ContentType = "application/pdf";
//Writes the content of the specified file directory to an HTTP response output stream as a file block
Response.BinaryWrite(memoryStream.ToArray());
//Response.Write(doc);
//sends all currently buffered output to the client
Response.Flush();
//Clears all content output from Buffer Stream
Response.Clear();
}
如果我将 document.Add(new Paragraph("Just a test"));
放在 document.Close();
之前,该段落将呈现在第二页中,但文档的其余部分仍然是空白。
更新
我已将 htmlString
变量中的 HTML 更改为 DIV
和 TABLE
,它起作用了。所以,现在问题变成了:我怎么知道 HTML 的哪一部分导致了 XMLWorker 中的某些错误?
我发现 XMLWorkerHelper 在 DIV
宽度属性(甚至在样式属性上设置)方面遇到了问题,不幸的是它没有抛出任何异常来帮助您。
我从 iTextSharp 的开发人员那里找到了这个答案,它说目前还不支持 table 居中,所以我假设这也不支持。
我刚刚将 iTextSharp XMLWorker nuget 包(及其依赖项)添加到我的项目中,我正在尝试将 HTML 从字符串转换为 PDF 文件,即使没有例外抛出,正在生成带有两个空白页的 PDF 文件。为什么?
以前版本的代码只使用 iTextSharp 5.5.8.0 和 HTMLWorker 和 ParseList 方法,然后我切换到
这是我使用的代码:
public void ExportToPdf() {
string htmlString = "";
Document document = new Document(PageSize.A4, 40, 40, 40, 40);
var memoryStream = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
document.Open();
htmlString = sbBodyMail.ToString();
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, new StringReader(htmlString));
document.Close();
DownloadFile(memoryStream);
}
public void DownloadFile(MemoryStream memoryStream) {
//Clears all content output from Buffer Stream
Response.ClearContent();
//Clears all headers from Buffer Stream
Response.ClearHeaders();
//Adds an HTTP header to the output stream
Response.AddHeader("Content-Disposition", "attachment;filename=Report_Diagnosis.pdf");
//Gets or Sets the HTTP MIME type of the output stream
Response.ContentType = "application/pdf";
//Writes the content of the specified file directory to an HTTP response output stream as a file block
Response.BinaryWrite(memoryStream.ToArray());
//Response.Write(doc);
//sends all currently buffered output to the client
Response.Flush();
//Clears all content output from Buffer Stream
Response.Clear();
}
如果我将 document.Add(new Paragraph("Just a test"));
放在 document.Close();
之前,该段落将呈现在第二页中,但文档的其余部分仍然是空白。
更新
我已将 htmlString
变量中的 HTML 更改为 DIV
和 TABLE
,它起作用了。所以,现在问题变成了:我怎么知道 HTML 的哪一部分导致了 XMLWorker 中的某些错误?
我发现 XMLWorkerHelper 在 DIV
宽度属性(甚至在样式属性上设置)方面遇到了问题,不幸的是它没有抛出任何异常来帮助您。
我从 iTextSharp 的开发人员那里找到了这个答案,它说目前还不支持 table 居中,所以我假设这也不支持。