如何在 HTML 生成的 PDF 中定义块的长度?
How could I define the chunk's length in a PDF generated from an HTML?
我正在设法从一封电子邮件中生成一个 PDF 文件,我实际上是通过 MailKit
检索的。
生成 pdf 文件本身没有实际问题(我正在向 PdfWriter
实例提供由 HtmlAgilityPack
).
我只是想将每个单词指定为单个 TextChunk
而不是每个单独的短语,这就是实际写的内容。我猜是 "specificable" 因为取决于 pdf printer/generator 它适用于某些文档,TextChunk
组成只是变化,有时是短语、单词甚至单个字符。
有什么方法可以将每个新块指定为单个单词插入到文档中吗?
这是我的代码,但到目前为止我还没有想出如何指定 "chunk detailness" 的级别。
using (var ms = new MemoryStream())
{
using (var doc = new Document())
{
using (var writer = PdfWriter.GetInstance(doc, ms))
{
doc.Open();
using (var srHtml = new StringReader(message.Body.HtmlBody))
{
XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, srHtml);
}
doc.Close();
}
}
File.WriteAllBytes(_outputPath, ms.ToArray());
}
iText中的classTextChunk
是文本提取相关,而你的代码是PDF生成。在一条评论中,您阐明了您的用例不仅包含 PDF 生成,还包含后续步骤,其中这些 PDF 的内容受文本提取的影响,并且您希望以某种方式以文本提取中的方式生成 PDF步骤导致 LocationTextExtractionStrategy
中的 TextChunk
个实例始终包含一个完整的单词。
首先,提取文本的 块度 不仅仅是所讨论的 PDF 生成器的自定义怪癖,一个块有最大长度,它必须停止当前设置发生变化的第一个字符,例如颜色、字体、字体大小...,或者到前一个字符的距离不是由前一个字符的宽度单独决定的。
虽然前者的设置很少在一个字内发生变化(但即使偶尔会发生变化),但如果 PDF 生成器通过应用字距调整来美化书面文本,则后者的异常情况可能会经常发生。
因此,对于支持字距调整的 PDF 生成器,您通常会得到比单词更小的块,除非您拒绝支持字距调整,否则您无法阻止这种情况。
但是,在这些限制允许的范围内,块的长度通常是 PDF 生成器的实现细节,通常是不可配置的。
在手头的例子中:iText,对于要求绘制的每个连续文本片段,创建尽可能长的块,您不能通过配置更改它。
不过,你可以把你画的连续的文字按照你的要求剪下来!例如。对于
<html><body><p>Header material</p></body></html>
你得到一个块 "Header material" 但是
<html><body><p><span>Header</span> <span>material</span></p></body></html>
你得到了区块 "Header"、“ ”和 "material"!
我正在设法从一封电子邮件中生成一个 PDF 文件,我实际上是通过 MailKit
检索的。
生成 pdf 文件本身没有实际问题(我正在向 PdfWriter
实例提供由 HtmlAgilityPack
).
我只是想将每个单词指定为单个 TextChunk
而不是每个单独的短语,这就是实际写的内容。我猜是 "specificable" 因为取决于 pdf printer/generator 它适用于某些文档,TextChunk
组成只是变化,有时是短语、单词甚至单个字符。
有什么方法可以将每个新块指定为单个单词插入到文档中吗?
这是我的代码,但到目前为止我还没有想出如何指定 "chunk detailness" 的级别。
using (var ms = new MemoryStream())
{
using (var doc = new Document())
{
using (var writer = PdfWriter.GetInstance(doc, ms))
{
doc.Open();
using (var srHtml = new StringReader(message.Body.HtmlBody))
{
XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, srHtml);
}
doc.Close();
}
}
File.WriteAllBytes(_outputPath, ms.ToArray());
}
iText中的classTextChunk
是文本提取相关,而你的代码是PDF生成。在一条评论中,您阐明了您的用例不仅包含 PDF 生成,还包含后续步骤,其中这些 PDF 的内容受文本提取的影响,并且您希望以某种方式以文本提取中的方式生成 PDF步骤导致 LocationTextExtractionStrategy
中的 TextChunk
个实例始终包含一个完整的单词。
首先,提取文本的 块度 不仅仅是所讨论的 PDF 生成器的自定义怪癖,一个块有最大长度,它必须停止当前设置发生变化的第一个字符,例如颜色、字体、字体大小...,或者到前一个字符的距离不是由前一个字符的宽度单独决定的。
虽然前者的设置很少在一个字内发生变化(但即使偶尔会发生变化),但如果 PDF 生成器通过应用字距调整来美化书面文本,则后者的异常情况可能会经常发生。
因此,对于支持字距调整的 PDF 生成器,您通常会得到比单词更小的块,除非您拒绝支持字距调整,否则您无法阻止这种情况。
但是,在这些限制允许的范围内,块的长度通常是 PDF 生成器的实现细节,通常是不可配置的。
在手头的例子中:iText,对于要求绘制的每个连续文本片段,创建尽可能长的块,您不能通过配置更改它。
不过,你可以把你画的连续的文字按照你的要求剪下来!例如。对于
<html><body><p>Header material</p></body></html>
你得到一个块 "Header material" 但是
<html><body><p><span>Header</span> <span>material</span></p></body></html>
你得到了区块 "Header"、“ ”和 "material"!