使用 itextsharp 使用数据库中的图像创建 pdf

2024-04-07

我有一个过程,其中 html 与图像链接存储在数据库中。图像也存储在数据库中。我创建了一个从数据库读取图像的控制器操作。我生成的路径是这样的/File/Image?path=Root/test.jpg。 该图像路径嵌入在 html 的 img 标签中,例如<img alt="logo" src="/File/Image?path=Root/001.jpg" />

我正在尝试使用 itextsharp 从数据库中读取 html 并创建一个 pdf 文档

string _html = GenerateDocumentHelpers.CommissioningSheet(fleetId);
string _html = GenerateDocumentHelpers.CommissioningSheet(fleetId);
Document _document = new Document(PageSize.A4, 80, 50, 30, 65);
MemoryStream _memStream = new MemoryStream();
PdfWriter _writer = PdfWriter.GetInstance(_document, _memStream);
StringReader _reader = new StringReader(_html);            
HTMLWorker _worker = new HTMLWorker(_document);
_document.Open();            
_worker.Parse(_reader);
_document.Close();
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=Commissioning.pdf");
Response.ContentType = "application/pdf";
Response.Buffer = true;
Response.OutputStream.Write(_memStream.GetBuffer(), 0, _memStream.GetBuffer().Length);
Response.OutputStream.Flush();
Response.End();
return new FileStreamResult(Response.OutputStream, "application/pdf");

这段代码给了我一个非法字符错误。这是来自图像标签,它无法识别?和 = 字符,有没有办法可以用 img 标签渲染这个 html,这样当我创建 pdf 时,它会渲染数据库中的 html 和图像并创建 pdf,或者如果 itextsharp 无法做到这一点,你能为我提供还有其他第三方开源工具可以完成此任务吗?


如果图像源不是包含协议的完全限定 URL,则 iTextSharp 假定它是基于文件的 URL。解决方案是将所有图像链接转换为绝对形式http://YOUR_DOMAIN/File/Image?path=Root/001.jpg.

您还可以在解析器上设置一个全局属性,其工作方式与 HTML 几乎相同<BASE> tag:

//Create a provider collection to set various processing properties
System.Collections.Generic.Dictionary<string, object> providers = new System.Collections.Generic.Dictionary<string, object>();
//Set the image base. This will be prepended to the SRC so watch your forward slashes
providers.Add(HTMLWorker.IMG_BASEURL, "http://YOUR_DOMAIN");
//Bind the providers to the worker
worker.SetProviders(providers);
worker.Parse(reader);

下面是一个针对 iTextSharp 5.1.2.0 的完整工作 C# 2010 WinForms 应用程序,它展示了如何使用相对图像并使用全局提供程序设置其基础。一切都与你的代码几乎相同,尽管我通过了一堆using声明以确保正确清理。确保观察所有内容的前导和尾随正斜杠,基本 URL 仅直接添加到前面SRC属性,如果做得不正确,你可能会得到双斜杠。我在这里硬性地设置了一个域,但您应该能够轻松使用System.Web.HttpContext.Current.Request object.

using System;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            string html = @"<img src=""/images/home_mississippi.jpg"" />";
            string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "HtmlTest.pdf");
            using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
                using (Document doc = new Document(PageSize.TABLOID)) {
                    using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) {
                        doc.Open();

                        using (StringReader reader = new StringReader(html)) {
                            using (HTMLWorker worker = new HTMLWorker(doc)) {
                                //Create a provider collection to set various processing properties
                                System.Collections.Generic.Dictionary<string, object> providers = new System.Collections.Generic.Dictionary<string, object>();
                                //Set the image base. This will be prepended to the SRC so watch your forward slashes
                                providers.Add(HTMLWorker.IMG_BASEURL, "http://www.vendiadvertising.com");
                                //Bind the providers to the worker
                                worker.SetProviders(providers);
                                worker.Parse(reader);
                            }
                        }

                        doc.Close();
                    }
                }
            }

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

使用 itextsharp 使用数据库中的图像创建 pdf 的相关文章

  • 从 JSON 文件注入的编译指令 AngularJS

    希望有人能帮助我应对这一挑战 我使用以下命令从服务器请求 JSON 数据 http get 来自服务器的数据返回一个对象 对象中的一个值包含 HTML 标记 该标记使用以下方式注入到页面中 div div 在标记内 有一个名为的自定义指令
  • 通过 SQLAlchemy 获取随机行

    如何使用 SQLAlchemy 从表中选择一个或多个随机行 这在很大程度上是一个特定于数据库的问题 我知道 PostgreSQL SQLite MySQL 和 Oracle 具有通过随机函数排序的能力 因此您可以在 SQLAlchemy 中
  • 选中复选框时如何向文本区域添加值

    我正在使用我刚刚在 SO 上找到的以下函数 该函数可以解决我的问题 只有一个问题是 我有一长串选择列表 当用户选中超过 3 4 个复选框时 某些文本或添加到文本区域的值不再可见 有没有什么方法可以让每次选中一个框时添加到文本区域的文本始终可
  • 简单的html css块结构,不能对内容div使用-headerHeight底部边距来避免滚动条吗?

    以下是我的简单 html css 结构
  • html 空格引起的非常奇怪的错误

    我在 Firefox 中遇到了一个非常奇怪的错误 我在外部文件中有一个 javascript 函数 可以在常规复杂性网站上完美运行 然而 我一直在整理一些演示示例并遇到一些奇怪的事情 html 格式如下 在编辑器中 div p Q Wher
  • Flexbox 的行之间可以有一条线吗?

    我有一个水平导航 它有点长 需要重新排列以适应狭窄的显示 我使用 flexbox 使其重排成多行 但行数较多时 导航项之间的划分就不那么明显了 我尝试在顶部给它们一个边框 它有点有效 但当然 边框仅在各个导航选项上可见 而不是在所有 Fle
  • Chrome 浏览器不显示 HTTP 处理程序生成的图像

    基本上我有一个网站 可以呈现一些文档 主要是办公室 的 HTML 预览 生成的 HTML 片段包含在同一网站返回的页面中 但图像由 HTTP 处理程序从具有以下链接的另一个网站返回 img width 50 height 50 src ht
  • django AuditTrail 与还原

    我正在开发一个新的网络应用程序 我需要将数据库中的任何更改存储到审核表中 此类审计表的目的是 稍后在真正的物理审计中 我们可以确定在某种情况下发生了什么 谁编辑了什么以及数据库当时的状态是什么 复杂的计算 所以大多数审计表将被写入而不是读取
  • 自动调整Google网站嵌入代码的高度(html)

    我正在使用 Google 协作平台嵌入 HTML 代码 将代码粘贴到 从网络嵌入 窗口中 输出的长度是可变的 我希望有一种方法可以动态调整父级的高度iframeGoogle 协作平台用于托管我的 HTML 我知道我可以使用 Google 协
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • 有没有办法禁用网站上表单的自动填写? [复制]

    这个问题在这里已经有答案了 我最近才学会使用创建网站HTML and PHP 我创建了一个网站 其中有一个测验 要求人们随机翻译单词 用户将他们的答案输入到表格中 网站评估答案是否正确 现在 当一个问题在一个会话中被问两次时 就会出现自动填
  • HTML 属性不带引号?

    我一直认为html的属性中需要引号 div class service definition or div class service definition 但最近我注意到 w3 验证器不会将以下内容识别为错误 div class serv
  • 如何在 font Awesome 图标链接下方添加添加文本?

    我正在尝试在我的 Blogger 模板中的 font awesome Icons 下添加一些文本 这是我想要实现的目标的图像 我想要实现的外观图片 https i stack imgur com BVYlh png 但到目前为止我已经做到了
  • 如何仅在 css/html 中强制在单词之间换行?

    我只有一段普通的文本 p 标签内的 p div 标签 但只有 Firefox 可以正确显示 Firefox 打破了单词之间的界限 所有其他浏览器都会在单词中间断行 这使得阅读变得困难 这是我的意思的一个例子 火狐浏览器 工作中 This w
  • 淘汰赛绑定,每个都可进行自定义

    我这里有一个情况 用于淘汰每个带有定制的绑定 这是我的代码 div div table tbody tr td td td td tr tbody table div div
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • Jquery 在 DIV 中进行多重加载

    这是我的代码 right load textes html nicolas right load textes html antoine 问题是内容divantoine覆盖了右边div nicolas加载的内容div div right l
  • 元素和 svg 形状之间的白线

    大家好 我正在使用由 shapedivider 生成的 svg 整形器 您可以看到 有一条白线 我不知道为什么它在那里以及如何删除它 请你帮助我好吗 有形状分隔符的代码 custom shape divider bottom 1640714
  • 从输入类型编号获取无效值

    我正在使用输入类型数字 当它无效时 我如何从中获取值 例如 使用类型编号并仅打印 e 这本身是无效的 我正在使用 React 但我认为这个问题非常普遍 onChange event console log event target valu

随机推荐

  • NuGet 更新和条件引用

    我们的 nupkg 包包含同一 dll 的多个版本 x86 x64 AnyCPU 并且在 csproj 文件中 在引用中 我使用条件引用根据当前平台集选择特定的 dll 因此 我对同一个库有多个引用 只是不同的平台编译 这是我的 cspro
  • JavaScript 中“>>>”是什么意思? [复制]

    这个问题在这里已经有答案了 我有一段我想理解的 JavaScript 代码 return n gt gt gt 0 2 34e10 那么 gt gt gt 是什么意思呢 预先感谢 这是我的第一个问题 It s a 零填充右移 https d
  • 减去除非负数然后返回 0

    我先说 这只是为了满足我的好奇心 而不是在编码项目上需要帮助 但我想知道是否有人知道一个类似绝对值的函数 特别是在Python中 但我会接受一个有效的数学概念 给定一个数字如果为负则返回0 如果为正则返回该数字 伪代码 def myFunc
  • SvelteKit:如何通过别名(如 $routes)从组件和端点引用 /routes 文件夹?

    接下来是我的 简化的 项目结构 appname src lib routes jsconfig json 在 jsconfig js 文件中 我有一个路径键 其别名为 lib 形式的 src lib 文件夹 compilerOptions
  • 无法从客户端连接到 PostgreSQL - 错误超时

    经过很多天尝试连接到我的 PostgreSQL 实例后 我决定是时候寻求帮助了 我正在尝试从 Windows 计算机连接到我的 PostgreSQL 数据库 我正在尝试 pgAdmin 4 和 dBeaver 但都无法连接 下面是我使用 d
  • 如何在 TypeScript 中使用 Mocha 和 Jest 而不发生冲突?

    我正在尝试在一个项目上安装带有类型的 Mocha 和 Jest 我们使用严格的类型检查 因此我收到与冲突的全局类型相关的错误 我试图创建不明确的模块声明 仅定义 Mochatypes at tsconfig 我一直在尝试删除 Jest 的声
  • 如何在二维码上添加徽标

    我正在使用 zxing java 生成二维码 想知道一种向二维码添加徽标的方法 是否有任何内置方法可以为其添加徽标或任何替代方法 您可能必须使用另一个图像库添加图像覆盖 我设法找到了能够做到这一点的资源 http skrymerdev wo
  • JVM CPU 峰值故障排除

    我们在其中一台应用程序服务器上发现了一个有趣的 尽管相当严重 问题 在某个时间点 运行 Web 应用程序的 JVM 的 CPU 使用率开始上升 并持续上升 直到应用程序最终减慢到爬行 修复此问题的唯一方法是重新启动应用程序服务器软件 应用服
  • 使用 REST API 将端口绑定到主机接口

    命令行界面的文档说明如下 将容器的端口绑定到主机的特定接口 系统 使用docker run命令的 p参数 一般语法 docker run p
  • 是否可以使用 Apache 记录所有 HTTP 请求标头?

    如何将 apache 收到的 HTTP 请求标头 全部 的内容记录到日志文件中 目前我的apache组合日志格式配置是 LogFormat h l u t r gt s b Referer i User Agent i Cookie i c
  • 使用 Jquery 的模态 PDF IFRAME

    这是我的脚本 运行完美 没有问题 现在为什么我将其发布在这里 主要是为了我可以增强它并使其变得更好 我也认为这可以帮助其他人 JQUERY 这是一个工作示例http jsfiddle net cornelas 4eUgf 2 http js
  • vim 中递归搜索模式的函数

    我有一个包含简单文本行的文本文件 我想创建一个函数vim and gvim 文本编辑器 can be sent a variable number of patterns and it should find lines will all
  • CDF 累积分布函数误差

    我正在尝试为多列数据文件中的一列绘制 CDF 当数据文件中仅存在一列时 它可以很好地绘制 当我尝试从数据中获取特定列时 它给了我错误 我还尝试使用 for 循环来读取它读起来很好的特定列 如果我在 for 循环之外给出绘图语句 则绘图仅显示
  • C++ 中字符串文字的类型是什么? [复制]

    这个问题在这里已经有答案了 例如 字符串文字 Hello 的类型是什么 const char 6 or const char 字符串文字的类型 Hello 是 6 的数组const char 普通字符串文字和 UTF 8 字符串文字也称为窄
  • 使用 URL 进行简单的 Swift 文件下载

    因此 我将 URL 作为字符串 在本例中为 JPG 但如果可能的话 希望有一个适用于任何文件类型的通用过程 并将文件路径作为字符串 用于保存文件 实现这一点的最快方法是什么 请记住 这是针对 OSX 命令行应用程序的 我尝试了这里找到的一些
  • 如何一键点击链接即可实现“链接另存为”功能? [复制]

    这个问题在这里已经有答案了 因此 正如你们大多数人可能知道的那样 当您在网页上放置文件的链接时 您必须右键单击该链接 然后单击 链接另存为 才能下载该文件 我想知道是否有一种方法可以单击链接并自动下载文件 有一个方法 使用header 调用
  • 在 C# 中追加两个或多个字节数组

    在 C 中是否有最好的 见下文 方法来附加两个字节数组 假装我拥有完全的控制权 我可以使第一个字节数组足够大以在末尾保存第二个字节数组并使用数组 复制到 https msdn microsoft com en us library syst
  • 当返回自定义对象列表时,RxJava 突出显示错误但编译

    我正在进行 RxJava 调用 我订阅的最终结果是预订列表 代码工作正常 但我得到了这个恼人的亮点 演员阵容在这里不起作用 因为我无法演员阵容List
  • 为什么 Linux 重定向会截断文件?

    我有一个名为 test txt 的文件 如下所示 hello world 它只是一个 hello world 字符串 如果我使用 perl 正则表达式 perl pe s hello bye g test txt it says bye w
  • 使用 itextsharp 使用数据库中的图像创建 pdf

    我有一个过程 其中 html 与图像链接存储在数据库中 图像也存储在数据库中 我创建了一个从数据库读取图像的控制器操作 我生成的路径是这样的 File Image path Root test jpg 该图像路径嵌入在 html 的 img