RowSpan 在 iTextSharp 中不起作用?

2024-05-26

我正在尝试将 Html 转换为 PDF。我正在使用 iTextSharp。我发现iTextSharp对CSS的支持不太好。事实上我认为 HtmlWorker 线程并不支持这一切。让我的问题更加复杂的是,iTextSharp 似乎也不支持 RowSpan。

这就是我想要生成的:http://jsbin.com/jovugohuju/1/edit?html,输出 http://jsbin.com/jovugohuju/1/edit?html,output

<table border="1" width="700">
    <tr>
            <td colspan="5" align="center" bgcolor="lightblue">INVOICE</td>
    </tr>
    <tr>
            <td colspan="2" rowspan="4" bgcolor="white"><b>AIRNET NETWORKS</b>
                    <br>asdadadadaada asd asd a ads adsadsadsadasd</td>
            <td>INVOICE</td>
            <td>DATE</td>
            <td>aDATEsd</td>
    </tr>
    <tr>
            <td>Order</td>
            <td>XXXX</td>
            <td>Ref XXXXXX</td>
    </tr>
    <tr>
            <td>Delivery</td>
            <td>XXXX</td>
            <td>Ref XXXXXX</td>
    </tr>
    <tr>
            <td>Due Date</td>
            <td>XXXX</td>
            <td>Ref XXXXXX</td>
    </tr>
    <tr>
            <td colspan="2" rowspan="4" bgcolor="white">
                    <p><b>CUSTOMER NAME</b>
                    </p>asd asd adadaadadadada adadaadsasdad ada asd adad</td>
    </tr>
    <tr>
            <td>Customer Care No:</td>
            <td colspan="2">544646454,88877978975</td>
    </tr>
    <tr>
            <td>Email Id</td>
            <td colspan="2">[email protected] /cdn-cgi/l/email-protection</td>
    </tr>
    <tr>
            <td>Account Details</td>
            <td colspan="2">5522245125545455 IFSC 323hasd</br>SBI India</td>
    </tr>
</table>

<table border="1" width="700">
    <tr>
            <td bgcolor="lightblue" height="15">Srno</td>
            <td bgcolor="lightblue">Particulars</td>
            <td bgcolor="lightblue">Quantity</td>
            <td bgcolor="lightblue">Rate/Month</td>
            <td bgcolor="lightblue">Total Rupees</td>
            <tr>
                    <td valign="top">1</td>
                    <td valign="top">1 MBPS Plan</td>
                    <td valign="top">1</td>
                    <td valign="top">600</td>
                    <td valign="top">692</td>
            </tr>
    </tr>
    <tr>
            <td height="300" valign="top">1</td>
            <td valign="top">1 MBPS Plan</td>
            <td valign="top">1</td>
            <td valign="top">600</td>
            <td valign="top">692</td>
    </tr>
    <tr>
            <td colspan="3" rowspan="3" valign="top">asdasdasd</td>
            <td colspan="1">Total</td>
            <td colspan="1">692</td>
    </tr>
    <tr>
            <td>Service Tax</td>
            <td>692</td>
    </tr>
    <tr>
            <td>Grand Total</td>
            <td>692</td>
    </tr>
</table>

C# CODE:

Document document = new Document();
document.SetPageSize(iTextSharp.text.PageSize.A4);
iTextSharp.text.pdf.draw.LineSeparator line1 = new iTextSharp.text.pdf.draw.LineSeparator(0f, 100f, iTextSharp.text.Color.BLACK, Element.ALIGN_LEFT, 1);    
string NEWhtmlText="<table border='1' width='500' > <tr> <td bgcolor='lightblue' height='15' >Srno</td><td bgcolor='lightblue'>Particulars</td><td bgcolor='lightblue' >Quantity</td><td bgcolor='lightblue'>Rate/Month</td><td bgcolor='lightblue'>Total Rupees</td> </tr> <tr> <td valign='top' >1</td><td valign='top' >1 MBPS Plan</td><td valign='top'>1</td><td valign='top'>600</td><td valign='top'>692</td> </tr> <tr> <td height='300' valign='top' >1</td><td valign='top' >1 MBPS Plan</td><td valign='top'>1</td><td valign='top'>600</td><td valign='top'>692</td> </tr> <tr><td colspan='3' rowspan='3' valign='top'>asdasdasd</td><td colspan='1'>Total</td><td colspan='1'>692</td></tr> <tr><td>Service Tax</td><td>692</td></tr> <tr><td>Grand Total</td><td>692</td></tr> </table>";
PdfWriter.GetInstance(document, new FileStream(saveFileDialog1.FileName, FileMode.Create));
document.Open();
iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document);
hw.Parse(new StringReader(NEWhtmlText));
document.Close();

输出(不需要):


请看下面的屏幕截图:

在左侧,您可以看到浏览器中呈现的 HTML 文件。在右侧,您可以看到使用 iText(Java 版本)将 HTML 文件呈现为 PDF。请注意,iTextSharp 关于 HTML 到 PDF 的功能与 Java 相同,因此您不应该发布问题说“在 iTextSharp 中不起作用”因为这听起来好像 iTextSharp 无法实现您想要做的事情(这是一个不正确的指控),而实际问题是由您在编写代码时犯的一些个人错误引起的。将自己的错误归咎于工具是不友好的;-)

您的应用程序无法运行的原因有以下三个:

  1. 你的 HTML 没有意义。我必须清理它(改变<br> into <br />,引入正确的CSS,更正某些行的列数,...)并在浏览器中正确呈现之前将其设置为XHTML。您可以在此处找到屏幕截图中使用的 HTML:表2_css.html http://itextpdf.com/sites/default/files/table2_css.html
  2. 您正在使用HTMLWorker而不是 XML Worker,你是对的:HTMLWorker不支持 CSS。说 CSS 在 iTextSharp 中不起作用是错误的。使用时不起作用HTMLWorker,但这是有记录的:您需要的 CSS 在 XML Worker 中工作。
  3. 您可能使用的是旧版本的 iTextSharp,您是对的:与最新版本相比,CSS 和表格支持不如旧版本的 iTextSharp 那么好。

See the XML工作者 http://itextpdf.com/product/xml_worker欲了解更多信息,请访问 iText 官方网站。除了iTextSharp之外,您还需要下载XML工作者 http://sourceforge.net/projects/itextsharp/files/xmlworker/。例子是用Java编写的 http://itextpdf.com/sandbox/xmlworker,但是将它们转换为 C# 应该没有问题。我用来在屏幕截图中制作 PDF 的示例(html_table_4.pdf http://itextpdf.com/sites/default/files/html_table_4.pdf)可以在这里找到:解析HtmlTable4 http://itextpdf.com/sandbox/xmlworker/ParseHtmlTable4

public void createPdf(String file) throws IOException, DocumentException {
    // step 1
    Document document = new Document();
    // step 2
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
    // step 3
    document.open();
    // step 4
    XMLWorkerHelper.getInstance().parseXHtml(writer, document,
            new FileInputStream(HTML));
    // step 5
    document.close();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RowSpan 在 iTextSharp 中不起作用? 的相关文章

  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 不可勾选的单选按钮与专有的复选框

    从 UI 角度来看 是拥有一组具有取消选中功能的单选按钮更好 还是拥有一组独占的复选框 意味着一次只能选中一个 更好 Update 我没想到对此会有如此负面的反应 如果我给出一个更接近其使用方式的示例 也许会有所帮助 我有一个充满数据绑定内
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • USB 上的 Autorun.inf 可以让它运行 pdf 吗?

    我在网上做了一些研究 我想我只是在寻找构象 由于 Microsoft 如何在 Vista 及更高版本中对自动运行设置安全性 从 USB 自动运行不再起作用 正确的 看起来它仍然会显示运行 exe 的选项 但由于某些奇怪的原因我无法让它运行
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • CSS溢出文本显示在几行中,没有断字

    我有一些长文本显示在 div 中 该 div 具有固定的宽度和高度 我希望文本显示在几行上 作为 div 高度 并且句子单词不会中断 一行中的单词前缀和下一行中的继续 此外 我想在末尾添加省略号最后一句话 CSS white space n

随机推荐

  • Android 版 OpenGL ES 中的透明纹理

    我试图在 opengl 中设置四边形上纹理的透明度 使用混合函数没有帮助 谷歌上也没有任何帮助 有什么建议么 我遇到了类似的问题 一段代码可以正常工作 而另一段则不能 经过大量的日志记录和调试 我发现差异只是一行代码 在具有工作 Alpha
  • Python - 对象 MagicMock 不能在“await”表达式中使用

    当我尝试使用 MagicMock 在单元测试中模拟异步函数时 出现以下异常 类型错误 对象 MagicMock 不能在 await 表达式中使用 示例代码如下 source code class Service async def comp
  • 为什么 Django on_delete 规则不起作用?

    我有两个模型通过外键连接 如下所示 class Album models Model name models CharField max length 128 class Track models Model name models Cha
  • 提取数据框中值前后的 n 行

    我有一个数据框 其中包含某些值Mark柱子 我想提取n标记出现之前和之后的值 包括带有标记的行 我通过使用找到我需要的值indices lt which df Mark 1 where 1是我正在寻找的价值 现在我需要例如之前 5 行和之后
  • 使用输入按钮处理网站上的分页

    试图使用硒抓取这个网站 我的代码可以工作 但目前它只抓取第一页 该页面使用输入按钮作为浏览页面的一种方式 因此我想逐个单击每个按钮 但它不起作用 有没有人有任何其他方法来处理此类分页的导航 import requests from sele
  • Angular RouteReuseStrategy 后退按钮/跨模块

    有关我的应用程序的信息 Angular 12 由 3 个模块组成 每个模块都有一个带有列表的概述页面和一些详细信息页面 每条路线都有一个区域标签 因此我知道用户正在哪个模块中导航 所以我想实现 Angular 的 RouteReuseStr
  • JaxB2Marshaller 未将 XML 绑定到 Kotlin 数据类

    我正在编写一个批处理作业来解析 XML 提取字段并将它们保存在数据库中 解析 XML 时 它会选取 2 个根元素 但将所有字段保留为空 因此在我的数据库中 我有 2 条记录将为空字段 似乎无法弄清楚为什么它无法读取元素 TIA Bean f
  • WPF DataGrid - 将 TimeSeries 与 MultiBinding 相结合,丢失更改通知。为什么?

    我有一个具有两个 ObservableCollection 的类 其中 TimeValue 是带有更改通知的自定义日期时间 值配对 通过 INotifyPropertyChanged 我将这些称为 目标 和 实际值 当我将它们绑定到图表时
  • 如何为带有未确定的“?”的Java通用Map添加值值类型?

    我在 JDK 8 示例中看到过这种声明 Map
  • 表单未将帖子值绑定到实体

    我有一个学说实体 一个表单和 2 个字段集 当我用值填充实体时 值会按预期合并到表单中 当我尝试从表单数据创建实体时 它保持为空 我一定是忘记了什么 但就是找不到它 我还有其他几种没有字段集的表单 它们按预期工作 有任何想法吗 下面发布了我
  • 如何证明2条sql语句是等价的

    我开始用连接和子语句重写一个复杂的 SQL 语句 并获得一个看起来更简单的语句 我通过在相同的数据集上运行并获得相同的结果集来测试它 一般来说 我如何 概念上 证明这两个陈述在任何给定数据集中都是相同的 我建议学习关系代数 正如 Mchl
  • 连接池

    我有以下代码 如果我在最后使用 conn null 我仍然使用连接池吗 我知道关闭连接是一个很好的做法 但是如何处理整个连接对象呢 public void ExecuteNonQuery SqlCommand Cmd Connection
  • 涉及数学的方法给出与计算器不同的答案

    我是java新手 所以请耐心等待 我试图从比赛总数中获得胜利的百分比 但我正在做的事情还很遥远 我获取百分比的方法如下 public double winPercentage int wins int total return wins t
  • glVertexAttribDivisor 和 glVertexBindingDivisor 有什么区别?

    我一直在寻找将属性与任意顶点分组关联起来的方法 起初似乎是我实现这一目标的唯一方法 但后来我偶然发现了这个问题 https stackoverflow com questions 14169228 opengl single vertex
  • SVN:如何解决“文件已被替换”状态

    我正在修改文件 重命名它们并切换它们 我正在测试替代主页 现在我收到一条状态消息 上面写着 文件已被替换 和一个 R 我不知道该怎么做才能解决这个问题 我正在使用Coda 但它没有解决这个问题 所以我想这是命令行时间 我关心的版本是我的本地
  • 在网络上使用多种颜色的背景

    抱歉 如果标题有点误导 我想做的是用真正的浅灰色覆盖索引页面的背景 除了显示我的内容的部分 div class col sm 1 div div class col sm 8 div div class col sm 3 div 我希望 c
  • MVC3:设置下拉列表选定值

    我正在使用 mvc3 我的视图中有一个下拉列表 Html DropDownListFor m gt m State new SelectList Model StateList Value Text 有没有办法在视图中设置选定的值 扩展 R
  • 正常运行时间 iOS Objective-C - 毫秒精度

    我正在努力争取 iOS 的正常运行时间 我正在使用 mach absolute time 但我发现它在睡眠期间暂停 我找到了这个片段 time t uptime struct timeval boottime int mib 2 CTL K
  • 影响 UINavigationBar 的后退按钮方法 (iOS)

    我有一个推送到详细视图控制器的表视图 从详细视图控制器中 当我按下 后退 按钮时 我希望更改一个整数值 如何以编程方式编辑导航栏后退按钮的操作 后退按钮会自动放置在我的应用程序中 因为我使用的是表视图 所以我实际上没有创建按钮 所以我不知道
  • RowSpan 在 iTextSharp 中不起作用?

    我正在尝试将 Html 转换为 PDF 我正在使用 iTextSharp 我发现iTextSharp对CSS的支持不太好 事实上我认为 HtmlWorker 线程并不支持这一切 让我的问题更加复杂的是 iTextSharp 似乎也不支持 R