【问题标题】:How could I define the chunk's length in a PDF generated from an HTML?如何在从 HTML 生成的 PDF 中定义块的长度?
【发布时间】:2019-06-08 09:43:43
【问题描述】:

我正在设法从电子邮件中生成 PDF 文件,我实际上是通过 MailKit 检索该文件。

生成 pdf 文件本身没有实际问题(我正在向 PdfWriter 实例提供由 HtmlAgilityPack 提供的干净、经过改进和准备就绪的 html)。

我只想将每个单词指定为单个 TextChunk 而不是每个短语,这就是实际编写的内容。我猜这是“特定”的东西,因为取决于 pdf 打印机/生成器,它适用于某些文档,TextChunk 组合只是变化,有时是短语、单词甚至单个字符。

有没有办法将要插入到文档中的每个新块指定为一个单词?

这是我的代码,但到目前为止我还没有弄清楚如何指定“块细节”级别。

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 中的 TextChunk 类与文本提取有关,而您的代码与 PDF 生成有关。我是否正确地假设您的用例不仅包括 PDF 生成,还包括这些 PDF 的内容受文本提取的后续步骤?您想以某种方式生成 PDF,在文本提取步骤中导致 LocationTextExtractionStrategy 中的 TextChunk 实例始终包含一个完整的单词?
  • 是的@mkl 你是对的!这正是我所指的!
  • ;) 非常感谢!
  • @mkl 感谢您分享您的 PDF 知识!

标签: c# .net itext pdf-generation pdf-writer


【解决方案1】:

iText 中的 TextChunk 类与文本提取有关,而您的代码与 PDF 生成有关。在评论中,您澄清说,您的用例不仅包括 PDF 生成,还包括这些 PDF 的内容受文本提取的后续步骤,并且您希望以某种方式以文本提取的方式生成 PDF step 导致LocationTextExtractionStrategy 中的TextChunk 实例始终包含一个完整的单词。

首先,提取文本的 chunkiness 不仅仅是相关 PDF 生成器的自定义怪癖,一个块有一个最大长度,它必须在第一个字符处停止当前设置发生了一些变化,例如颜色、字体、字体大小……,或者与前一个字符的距离不是由前一个字符的宽度单独决定的。

虽然前一种设置很少会在一个单词中发生变化(但即使它们偶尔会发生变化),但如果 PDF 生成器通过应用字距调整美化书面文本,后一种异常可能会经常发生。

因此,对于支持字距调整的 PDF 生成器,您通常会得到比单词小的块,除非您拒绝支持字距调整,否则您无法阻止这种情况。

但在这些限制允许的范围内,通常是 PDF 生成器的实现细节,它通常是不可配置的。

在手头的情况下:iText,对于要求绘制的每个连续文本,创建尽可能长的块,您无法通过配置进行更改。

但是,您可以做的是根据您的要求减少您绘制的连续文本片段!例如。对于

<html><body><p>Header material</p></body></html>

你会得到一个单独的块“标题材料”,但对于

<html><body><p><span>Header</span> <span>material</span></p></body></html>

你会得到块“标题”、“”和“材料”!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2015-04-11
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多