在 ITextSharp 免费许可证下动态创建 .pdf

2024-04-16

在 ASP.NET C# 网站/服务器中,我使用名为 ITextSharp 的 .pdf 创建器库来创建包含有关产品的文本和一些图像的 .pdf。

像往常一样,老板不想购买许可证。我知道如果我使用 ITextSharp 版本 4.1.6 或更低版本,我可以在免费许可证下使用该库(我不能吗?)

我的问题:旧版本(4.1.6-)/免费版本是否可以满足我生成顶部图像、中间文本内容(某些段落)和底部图像的 pdf 的需求?我是否会发现某些 API 功能因我使用的是旧版本而无法使用?

您是否建议我使用另一个开源 ASP.NET C# .pdf 生成器?


是的,您可以做到这一点,旧版本也可以。我已附上使用字符串生成器通过 itext Sharp 生成 html 的代码。

Document doc = new Document(PageSize.LETTER, 10, 10, 42, 35);
                iTextSharp.text.pdf.PdfWriter wri = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new FileStream("D:\\PurchaseOrderDetails.pdf", FileMode.Create));
                doc.Open();//
                StringBuilder builder = new StringBuilder();
                builder.Append("<html>");
                builder.Append("<head>");
                builder.Append("</head>");
                builder.Append("<body>");
                builder.Append("<img src=\"D:\\Images\\logo_left.png\" align=\"right\"/>");
                builder.Append("<br/><br/><br/><br>");
                builder.Append("");
                builder.Append("<h1 style=\"font-weight: bold\">Purchase Order Details</h1> ");
                builder.Append("");
                builder.Append("<br /><br /> ");
                builder.Append("<h2 style=\"font-weight: bold\">Purchase Order Information</h2> ");
                builder.Append("<table> ");
                builder.Append("   <tr> ");
                builder.Append("      <td style=\"font-weight: bold\">P.O.Number:</td> ");
                builder.Append("      <td>" + txtPONumber.Text + "</td> ");
                builder.Append("   </tr> ");
                builder.Append("   <tr> ");
                builder.Append("      <td style=\"font-weight: bold\">Vendor:</td> ");
                builder.Append("      <td>" + txtVendorName.Text + "</td> ");
                builder.Append("   </tr> ");
                builder.Append("   <tr> ");
                builder.Append("      <td style=\"font-weight: bold\">Entry Date:</td> ");
                builder.Append("      <td>" + dtpickerEntryDate.SelectedDate + "</td> ");
                builder.Append("   </tr> ");
                builder.Append("   <tr> ");
                builder.Append("      <td style=\"font-weight: bold\">Description:</td> ");
                builder.Append("      <td>" + txtDescription.Text + "</td> ");
                builder.Append("   </tr> ");
                builder.Append("   <tr> ");
                builder.Append("      <td style=\"font-weight: bold\">Ship Method:</td> ");
                builder.Append("      <td>" + drpShipMethod.SelectedItem.Text + "</td> ");
                builder.Append("   </tr> ");
                builder.Append("   <tr> ");
                builder.Append("      <td style=\"font-weight: bold\">Ship Carrier:</td> ");
                builder.Append("      <td>" + drpShipCarrier.SelectedItem.Text + "</td> ");
                builder.Append("   </tr> ");
                builder.Append("   <tr> ");
                builder.Append("      <td style=\"font-weight: bold\">Price:</td> ");
                builder.Append("      <td>" + txtPrice.Text + "</td> ");
                builder.Append("   </tr> ");
                builder.Append("   <tr> ");
                builder.Append("      <td style=\"font-weight: bold\">Shipping Cost:</td> ");
                builder.Append("      <td>" + txtShippingCost.Text + "</td> ");
                builder.Append("   </tr> ");
                builder.Append("   <tr> ");
                builder.Append("      <td style=\"font-weight: bold\">Warranty Status:</td> ");
                builder.Append("      <td>" + txtWarrantyStatus.Text + "</td> ");
                builder.Append("   </tr> ");
                builder.Append("   <tr> ");
                builder.Append("      <td style=\"font-weight: bold\">Part Requirement:</td> ");
                builder.Append("      <td>" + drpPartRequirement.SelectedItem.Text + "</td> ");
                builder.Append("   </tr> ");
                builder.Append("</table> ");
                builder.Append("<br /><br /> ");
                builder.Append(" ");
                builder.Append("<p style=\"text-align: center; font-style: italic; font-size: 10pt\"> ");
                builder.Append("   Thank you for your business! If you have any questions about your order, please contact us at ");
                builder.Append("   800-555-. ");
                builder.Append("</p> ");
                builder.Append("</body>");
                builder.Append("</html>");

                var parsedHtmlElements = HTMLWorker.ParseToList(new StringReader(builder.ToString()), null);
                foreach (var htmlElement in parsedHtmlElements)
                    doc.Add(htmlElement as IElement);

                doc.Close();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ITextSharp 免费许可证下动态创建 .pdf 的相关文章

  • 如何向 SDL 线程发送附加参数?

    是的 我知道如何创建 SDL 线程 int myfunc void data my code SDL CreateThread mythread SDL CreateThread myfunc NULL 但如果我想做类似的事情怎么办 int
  • C++ 中的类型作为返回类型

    是否有可能从函数返回一个类型作为返回类型 并将其用作成员变量 如下所示 constexpr type myFunction int a int b if a b 8 return int 8t if a b 16 return int 16
  • 警告:从不兼容的指针类型为链接列表数组赋值

    我正在执行一个 C 程序 但收到警告 警告 来自不兼容指针类型的赋值 我在这里复制相关代码 Structure I am using typedef struct graph node int id int weight struct no
  • 如何在类的 Dispose 方法中取消订阅匿名函数?

    我有一个 A 类 在它的构造函数中 我正在为 Object B 的 eventHandler 分配一个匿名函数 如何从 A 类的 Dispose 方法中删除 取消订阅 它 任何帮助 将不胜感激 谢谢 Public Class A publi
  • 在 C++ 中将惰性生成器实现为forward_iterator

    MyGenerator 表示 可能 有限的整数序列 计算成本很高 所以我不想预先生成它们并将它们放入容器中 struct MyGenerator bool HasNext int Next 要打印全部 MyGenerator generat
  • ld:文件是针对 Mac OS X 上不受支持的文件格式构建的

    我必须使用在其他 x64 86 计算机上编译的共享对象来构建一个项目 我有这个错误 cc std c11 Wall Werror Wextra pedantic I include src server c obj tftp o o bin
  • 如何使用 C 将带有 2 个变量的 IF 语句转换为 switch 函数?

    我有一个 IF 语句 我想将其转换为 Switch 语句 但它有 2 个变量 在C上可以实现吗 这是一个石头 剪刀 布的游戏 R代表石头 P代表布 S代表剪刀 char play1 play2 printf nPlayer 1 Enter
  • 删除行时 QModelIndex 变得无效

    我正在子类化QAbstractItemModel显示项目QTreeView 并且在这个子类中 projectModel 我有一个功能可以删除树视图中当前选定的索引 Component是用于表示模型所有成员的类 void projectMod
  • 方法参数数组默认值[重复]

    这个问题在这里已经有答案了 在 C 中 可以在方法中使用默认参数值 例如 public void SomeMethod String someString string value Debug WriteLine someString 但现
  • Visual Studio const_iterator 赋值错误

    默认构造的赋值vector
  • 读取 filebuf 的等效项?

    typedef struct char c 20 int i header void foo std string s std ifstream ifs s c str std ios base binary std ios base in
  • 如何对多重映射中的键和值进行排序?

    建议使用任何方法对多重映射的键及其值进行排序 例如 输入 5 1 1 9 1 1 5 2 1 2 输出必须是 1 1 1 2 1 9 5 1 5 2 答案是emplace hint 伪代码如下所示 insert with hint M mm
  • 如何在asp.net core中以强类型方式获取资源字符串?

    在下面的程序中 为了获取资源字符串 我使用 localizer About Title 其中 About Title 是一个魔术字符串 如何避免使用这样的字符串 有没有强类型的方法 using Microsoft AspNetCore Mv
  • DateTimeOffset解析和自定义时区

    我们将 XML DateTime 值解析为 DateTimeOffset 值 根据DateTime 的 W3C XSD 文档 http www w3 org TR 2012 REC xmlschema11 2 20120405 dataty
  • 高效快速的线程参数方法

    创建带参数的线程最有效的方法是什么 参数是一个结构体 如果该结构体不能保留在父线程堆栈上 有两种解决方案 具有动态内存分配 struct Arg int x int y void my thread void v arg Arg arg A
  • 我可以使用什么 C++ 库在 Windows 上将 PDF 转换为图像?

    我正在开展一个需要分析图像的项目 这些图像的主要来源是网络摄像头 但最近我们被要求添加对上传文件和扫描仪的支持 这在大多数情况下都很好 只是他们希望我们能够使用 PDF 格式的文档 我需要一个原始像素位图进行处理 在 Mac 上 我可以使用
  • 从 Linux 内核模块的文件描述符获取文件名/路径?

    在Linux内核模块中 有没有一种方法可以从文件名 路径中获取文件名 路径 unsigned int fd 我知道这个答案 如何从内核模块内的文件描述符获取文件名 https stackoverflow com questions 8250
  • 在 ASP.net 中使用 NVP API 时 Paypal SetExpressCheckout 出现问题

    Hi 我正在实现 Facebook 游戏和 Paypal 快速结账支付服务之间的集成 我的网站是在 ASP net 中开发的 我使用 NVP API 进行集成 我的问题是我不断收到 10400 错误 订单总计丢失 我的代码是 Set the
  • 无限循环消耗 100% CPU

    我陷入了需要生成某个 Hz 的定义频率的情况 我尝试过多媒体计时器和互联网上提供的所有其他东西 但到目前为止 带有一些 if else 条件的无限循环给了我最好的结果 但这种方法的问题是它消耗了几乎所有的CPU 没有空间让其他应用程序正常工
  • 列出所有会话信息

    我想在页面中显示我的asp net页面 aspx 的所有会话信息 我怎样才能做到这一点 编程语言是C 这两种方法对我有用 稍微改进和纠正了大卫的答案 第一种方法 for int i 0 i lt Session Count i var cr

随机推荐

  • Actionscript 内存管理、垃圾收集

    这个博客 http blogagic com 163 flex memory management and memory leaks varref 和其他人 指出 在清理对象时 您应该在 dispose 方法中将对象引用设置为 null 但
  • 人们可以放心地忽略宏和内置宏之间的区别吗?

    我从 Clojure 开始 这也是我的第一个 lisp 显然有很多东西需要吸收 为了减轻认知负担 我尝试找到我可以安全地忽略的部分 目前 人们能否安全地以相同的方式处理带有宏的表单和带有内置函数的表单 或者是否会出现以后出现的陷阱 换句话说
  • 修改现有表单值 - GetChoices() 不起作用

    为什么 getChoices https developers google com apps script reference forms list item getChoices 不适用于现有列表项 我有以下代码 它通过 ID 获取表单
  • Excel:如何使用数组连接 criteread 部分旁边的字符串(If 函数)

    今天是个好日子 我有一个 Excel 工作表 分为两列 如下所示 我知道如何使用带有 sum 的数组 if 函数来将满足条件的列旁边的所有值相加 如下所示 sum if A1 A5 YES B1 B5 但如何使用字符串进行操作并连接 以便它
  • AdMob 刷新请求

    我有几个令我困惑的问题 谁最负责广告刷新 加载请求后bannerView load GADRequest 让开发者或 Google 进行监控是最佳做法吗 刷新时间应该短至 30 秒还是至少 60 秒 他们建议 60 秒 但给你选择 30 秒
  • Azure 部署错误:找不到 ClientPerfCountersInstaller.exe

    我最近尝试在现有站点和部署上设置 Azure 预览缓存 但由于错误而不得不中止 但是从那时起 当我尝试部署到 Azure 时 我会收到以下错误 找不到名为的文件approot bin Microsoft WindowsAzure Cachi
  • 逆向工程的汇编语言[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • AWS Kubernetes 集群中出现“创建 pod 沙盒失败”pod 错误

    问题摘要我们曾多次观察到 我们的集群运行时遇到这样的问题 一个或多个节点上的一个或多个 Pod 无法启动 Pod 内的一个或多个容器未启动 Pod 显示 创建 Pod 沙箱失败 错误 在 受影响的 节点上重新启动 docker 或 kube
  • spring boot @controller @transactional 不起作用

    I have Transactional控制器类中的方法如下 主要问题是每个服务调用根据日志在其自己的事务中运行 控制器是否忽略了事务功能 我希望学生记录不会被保存 因为我在使用另一个服务之后抛出异常 但更新仍然发生在数据库中 我什至有 E
  • sklearn 中的 SVM 支持增量(在线)学习吗?

    我目前正在设计一个文本文章推荐系统 有趣 或 不有趣 的二元情况 我的要求之一是它应该不断更新以适应不断变化的趋势 据我所知 最好的方法是利用支持增量 在线学习 http en wikipedia org wiki Online 5fmac
  • HQL 子字符串最后 x 个字符

    我对 Hibernate 很陌生 我想获取字符串的最后 N 个字符 我找到了 substring 方法 但这并没有真正帮助 有人有什么主意吗 TIA 我实际上使用子字符串修复了它 我忘了我可以使用参数 我做了类似的事情 Query q wh
  • 在闪亮选项卡中使用多个 R Markdown 文件

    我正在构建一个闪亮的应用程序 我想要有多个选项卡集 到目前为止我得到的代码告诉我 shinyUI navbarPage OEI Grant tabPanel Part 1 Organization tabsetPanel 1 x tabPa
  • 如何在Swagger open api 3.0中定义常量字符串[重复]

    这个问题在这里已经有答案了 如何在 swagger open api 3 0 中定义常量字符串变量 如果我定义枚举 它将如下所示 StatusCode title StatusCode enum success fail type stri
  • 使用Golang登录私有站点并提取信息

    我尝试使用 golang 登录网站的私人区域并提取一些信息 但我似乎不太正确 我设法获取登录页面以获取 csrf 令牌 然后将 csrf 令牌与登录信息一起发布到登录页面 然后我就可以正常登录了 如果我在此时停止 我可以看到我被重定向的页面
  • 当尝试使用 Webdriver 通过 linkText 查找链接时,有没有办法忽略大写字母?

    我正在使用 Selenium 2 Webdriver 我想单击一个链接 但链接文本可以是 Linktext 或 LINKTEXT 还有比这更好的方法吗 List
  • 具有大量输入数据的 REST 端点 (GET)

    我正在开发一个应用程序 我需要将对象列表传递到 REST 端点 该端点将执行一些计算并将结果返回给调用者 问题更多的是一个哲学问题 即如何处理这种情况 在 GET 请求中传递巨大的负载是一个坏主意 同时 它并不是真正的 POST PUT 请
  • 在表单提交上显示 Twitter Bootstrap 模式

    我试图在提交表单时显示模式 并满足某些条件 例如 表单有两个文本字段 如果其中一个已填写 则模式将向用户显示一些信息 如果两个字段均未填写 则表单将不会提交 为此我这样做了但没有成功 jsfiddle jsFiddle 链接 http js
  • 创建二叉树的时间复杂度

    我正在尝试从提供的源创建一棵树 要添加到树中的 2 个节点 以及应添加这 2 个新闻节点的节点 为了找到该节点在树中的位置 我使用了中序遍历 该遍历的时间复杂度为 O n 因此 如果要在树中添加 n 个节点 则创建整个树的时间复杂度为 O
  • 如何在 R 数据库中将相似的字符串分组在一起

    我的小标题只有 1 列 称为 标题 gt dat A tibble 13 x 1 title
  • 在 ITextSharp 免费许可证下动态创建 .pdf

    在 ASP NET C 网站 服务器中 我使用名为 ITextSharp 的 pdf 创建器库来创建包含有关产品的文本和一些图像的 pdf 像往常一样 老板不想购买许可证 我知道如果我使用 ITextSharp 版本 4 1 6 或更低版本