如何在 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"!