当前位置: 首页 > 知识库问答 >
问题:

如何向表格单元格添加富文本框(HTML)?

梅逸清
2023-03-14

我有一个名为“DocumentContent”的富文本框,我将使用以下代码将其内容添加到pdf中:

iTextSharp.text.Font font = FontFactory.GetFont(@"C:\Windows\Fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12f, Font.NORMAL, BaseColor.BLACK);
            DocumentContent = System.Web.HttpUtility.HtmlDecode(DocumentContent);
            Chunk chunkContent = new Chunk(DocumentContent);
            chunkContent.Font = font;            

            Phrase PhraseContent = new Phrase(chunkContent);
            PhraseContent.Font = font;


            PdfPTable table = new PdfPTable(2);
            table.WidthPercentage = 100;
            PdfPCell cell;

            cell = new PdfPCell(new Phrase(PhraseContent));
            cell.Border = Rectangle.NO_BORDER;
            table.AddCell(cell);

问题是,当我打开PDF文件时,内容显示为HTML,而不是如下所示的文本:

<p>Overview&#160; line1 </p><p>Overview&#160; line2
</p><p>Overview&#160; line3 </p><p>Overview&#160;
line4</p><p>Overview&#160; line4</p><p>Overview&#160;
line5&#160;</p>

但它应该如下所示

Overview line1
Overview line2
Overview line3
Overview line4
Overview line4
Overview line5

我要做的是保留用户应用于富文本的所有样式,并将字体系列更改为Arial。

我可以更改字体系列,但我需要将此内容从超文本标记语言解码为文本。

你能给个建议吗?谢谢

共有2个答案

欧阳永宁
2023-03-14

最后,我用c#编写了这段代码,这段代码运行得非常好,感谢布鲁诺帮助我理解了XMLWorker。

下面是一个在C#中使用XMLWorker的示例。

我使用了一个示例HTML,如下所示:

public static string HTML = "<p>Overview&#160;line1âââŵẅẃŷûâàêÿýỳîïíìôöóòêëéèẁẃẅŵùúúüûàáäâ</p>"
            + "<p>Overview&#160;line2</p><p>Overview&#160;line3</p>"
            + "<p>Overview&#160;line4</p><p>Overview&#160;line4</p>"
            + "<p>Overview&#160;line5&#160;</p>";

我已经创建了测试。css文件,并将其保存在SharePoint样式库中。(对于这个测试,我将其保存在D驱动器中以保持简单)以下是我的测试css文件的内容:p{font-family:arial;}

然后用下面的c代码将PDF文件保存在D驱动器中。(在SharePoint中,我使用了Memorystream。我让这个例子非常简单易懂)

string fileName = @"D:\Test.pdf";                     
var css = @"D:\Test.css";
using (var ActionStream = new MemoryStream(UTF8Encoding.UTF8.GetBytes(HTML)))
{
    using (FileStream cssFile = new FileStream(css, FileMode.Open))
    {
        var document = new Document(PageSize.A4, 30, 30, 10, 10);                    
        var worker = XMLWorkerHelper.GetInstance();
        var writer = PdfWriter.GetInstance(document, new FileStream(fileName, FileMode.Create));
        document.Open();
        worker.ParseXHtml(writer, document, ActionStream, cssFile);
        writer.CloseStream = false;
        document.Close();

    }
}

它创造了测试。pdf文件添加我的HTML字体系列:Arial。所以所有的威尔士字符都可以保存在PDF文件中。

注意:我已经将iTextSharp.dllv: 5.5.3和XMLworker.dllv: 5.5.3添加到我的项目中。

using iTextSharp.text;
using iTextSharp.text.html;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;
using iTextSharp.tool.xml.css;
using iTextSharp.tool.xml.html;
using iTextSharp.tool.xml.parser;
using iTextSharp.tool.xml.pipeline;

希望这能有用。

凯特

吴哲
2023-03-14

请看一下HtmlContentForCell示例。

在本例中,我们有您提到的HTML:

public static final String HTML = "<p>Overview&#160;line1</p>"
        + "<p>Overview&#160;line2</p><p>Overview&#160;line3</p>"
        + "<p>Overview&#160;line4</p><p>Overview&#160;line4</p>"
        + "<p>Overview&#160;line5&#160;</p>";

我们还为

public static final String CSS = "p { font-family: Cardo; }";

在您的情况下,您可能希望将Cardo替换为Arial

请注意,我们注册了Cardo字体的常规版本:

FontFactory.register("resources/fonts/Cardo-Regular.ttf");

如果您需要粗体、斜体字和粗体斜体字,您还需要注册相同Cardo系列的字体。(对于arial,您需要注册arial.ttf、arialbd.ttf、ariali.ttf和arialbi.ttf)。

现在,我们可以使用parseToElementList()方法将超文本标记语言和CSS解析为Element对象列表。我们可以在单元格中使用这些对象

PdfPTable table = new PdfPTable(2);
table.addCell("Some rich text:");
PdfPCell cell = new PdfPCell();
for (Element e : XMLWorkerHelper.parseToElementList(HTML, CSS)) {
    cell.addElement(e);
}
table.addCell(cell);
document.add(table);

请参见单元格中的html_。pdf获取生成的pdf。

我没有时间/技能在iTextSharp中提供这个例子,但将其移植到C#应该很容易。

 类似资料:
  • 问题内容: 什么是空指针异常(),什么原因导致它们? 可以使用哪些方法/工具确定原因,以阻止异常导致程序过早终止? 问题答案: 声明引用变量(即对象)时,实际上是在创建指向对象的指针。考虑以下代码,您在其中声明基本类型的变量: 在此示例中,变量是an ,Java会为您初始化它。在第二行为其分配值时,您的值将写入所指的存储位置。 但是,当您尝试声明引用 类型时 ,会发生一些不同的事情。采取以下代码:

  • 我希望我的swift代码在每次按下按钮时都添加一个新的tableview单元格。你可以在下面的gif中看到我想要的东西。这段代码应该在func-tableView(_tableView:UITableView,cellForRowAt-indexPath:indexPath)中添加按钮- 在此输入图像描述

  • 问题内容: 在Selenium 2.0中,我不知道如何遍历网页中的HTML表。在selenium2.0 javadoc中,我找到了两个类“ TableFinder”和“ TableCellFinder”,但找不到任何示例。 我想做这样的事情: 如何从每个表格单元格中获取文本? 问题答案: 感谢您的早日答复。 我找出了使用硒2.0类的解决方案。

  • 对于某些表格单元格,我希望有一个多色的上边框或下边框。 基于如何创建多色边框与css和css-多色边框,我能够创建多色边框。 问题是,我想将其组合为一个表格单元格,其中一些单元格具有普通边框,而另一些单元格具有多色边框。 下面的代码设置单元格的多色,但只要我想为“普通”单元格添加黑色边框,它就会覆盖多色边框(请参见代码笔) 这似乎使它部分起作用,必须为表格设置背景颜色。但这会导致粗边框线。 能做些

  • 问题内容: 我正在尝试根据以下代码在使用itext的表格单元格中添加一些带有条形码的文本,但它不会显示在pdf文件中。我尝试添加块和段落。任何帮助,将不胜感激。 问题答案: 您可能对 文本 模式与 复合 模式感到困惑。 使用构造函数时,可以在 文本 模式下创建一个单元格。随后,对的任何后续调用都会将单元格切换到 复合 模式,从而删除先前在构造函数中输入的所有内容。 您必须以这种方式更改代码: