WKHTMLTOPDF 不渲染 Base64 图像

2024-04-09

我有以下简单的 HTML 页面:

<html>
<head>
    <title></title>
</head>
<body>
    <div>
        <img id="image" src="data:image/gif;base64,R0lGODlhFwAPAKEAAP///wAAAMzMzLi3tywAAAAAFwAPAAACQIyPqQjtD98RIVpJ66g3hgEYDdVhjThyXSA4aLq2rgp78hxlyY0/ICAIBhu/HrEEKIZUyk4R1Sz9RFEkaIHNFgAAOw==" />
    </div>
</body>
</html>

我正在尝试使用以下命令让 PDF 呈现 Base64 编码的 GIF:

  public static byte[] HTMLToPDF(string htmlText)
        {
            Process p;
            ProcessStartInfo psi = new ProcessStartInfo();
            psi.FileName = HttpContext.Current.Server.MapPath("~/App_Data/wkhtmltopdf/wkhtmltopdf.exe");

            // run the conversion utility
            psi.UseShellExecute = false;
            psi.CreateNoWindow = true;
            psi.RedirectStandardInput = true;
            psi.RedirectStandardOutput = true;
            psi.RedirectStandardError = true;

            // note: that we tell wkhtmltopdf to be quiet and not run scripts
            string args = "-q -n ";
            args += "--disable-smart-shrinking ";
            //args += "--orientation Landscape ";
            args += "--outline-depth 0 ";
            args += "--page-size A4 ";
            args += " - -";

            psi.Arguments = args;

            p = Process.Start(psi);

            try
            {
                using (StreamWriter stdin = p.StandardInput)
                {
                    stdin.AutoFlush = true;
                    stdin.Write(htmlText);
                }

                //read output
                byte[] buffer = new byte[32768];
                byte[] file;
                using (var ms = new MemoryStream())
                {
                    while (true)
                    {
                        int read = p.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length);
                        if (read <= 0)
                            break;
                        ms.Write(buffer, 0, read);
                    }
                    file = ms.ToArray();
                }

                p.StandardOutput.Close();
                // wait or exit
                p.WaitForExit(60000);

                // read the exit code, close process
                int returnCode = p.ExitCode;
                p.Close();

                if (returnCode == 0)
                    return file;
            }
            catch (Exception ex)
            {
            }
            finally
            {
                p.Close();
                p.Dispose();
            }
            return null;
        }

然而,当 PDF 显示图像不存在(只是一个小盒子)时,我做错了什么?


我有这个问题。 html 内容可以通过 chrome 渲染得很好,但通过 wkhtmltopdf 则不行。

这是因为我在 base64 字符串的标题项之间有空格。

它应该是:

data:[<media type>][;charset=<character set>][;base64],<data>

我有

data: [<media type>][; charset=<character set>][; base64], <data>

Wkhtmltopdf 对此显然比 chrome 更严格。不要在 Base64 标头中添加空格。

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

WKHTMLTOPDF 不渲染 Base64 图像 的相关文章

  • 采用 std::vector 或 std::array 的模板函数

    我有一个函数 当前接受 2 个向量 其中可以包含任何普通的旧数据 template
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • 信号与信号2

    我的应用程序可能会受益于使用 boost 的信号库之一而不是本土解决方案 该应用程序是多线程的 但执行信号处理的部分是单线程的 如果多线程不是问题 是否有任何理由更喜欢 Boost Signals2 而不是 Boost Signal Boo
  • 头文件中实现的函数的静态与内联

    我想到的方式inline在 C 中用于链接 作用域 我把它放在同一个篮子里extern and static对于全局对象 通常 对于在头文件中实现的函数 我的首选解决方案是将其设为静态 In Foo h static void foo Do
  • 如何通过 libwebsocket 发送异步数据?

    我正在将 Warmcat 的 libwebsocket C 库用于小型 Websocket 服务器 我已经启动并运行了这些示例 并且可以发送数据以响应从 websocket 接收数据 例如回显发送的反向字节 但是 我无法弄清楚如何在不使用
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • 为什么 BinaryFormatter 可以序列化 Action<> 但 Json.net 不能

    尝试序列化 反序列化 Action 尝试我的 1天真 JsonConvert SerializeObject myAction JsonConvert Deserialize
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • 节点*链表中的下一个

    我是数据结构和算法的新手 我遇到了以下代码 typedef struct node int data node next 谁能告诉我为什么我们要声明节点 next next 不能声明为 int next 吗 因为你希望能够做到n gt ne
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • linq where 子句和 count 导致 null 异常

    除非 p School SchoolName 结果为 null 否则下面的代码将起作用 在这种情况下 它会导致 NullReferenceException if ExistingUsers Where p gt p StudentID i
  • 如何禁用基于 ValidationRule 类的按钮?

    如何禁用基于 ValidationRule 类的 WPF 按钮 下面的代码可以很好地突出显示 TextBox
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 在 C# 命令行应用程序中包含并执行 EXE

    所以我找到了一个很棒的小 EXE 命令行应用程序 我们将其称为 program exe 它输出一些我想用 C 操作的数据 我想知道是否有一种方法可以将program exe 打包 到我的Visual Studio项目文件中 这样我就可以将编
  • 如何重用具有稍微不同的 ProcessStartInfo 实例的 Process 实例?

    我有以下开始的代码robocopy https technet microsoft com en us library cc733145 aspx as a Process 我还需要进行数据库查询以确定每次需要复制哪些目录robocopy被
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN

随机推荐

  • 为旧版本的 Android 覆盖 Android-L CardView state_pressed

    在最新的 Android SDK 中 我们现在有了新的 CardView 我已经用新版本替换了旧的 CustomCardView 但是当在旧版本的 Android 上运行时 我看到state pressed state focused是显示
  • PHP升级到7版本后,为什么无法使用mongodb驱动?

    这是我发现的一个奇怪的情况 我一直在一个项目中同时使用 PHP 和 MongoDB 并更新了相关软件 升级后 我确实更新了新的conf文件 一切都很好 除了当我尝试使用MongoClient类中 我收到以下致命错误 致命错误 未捕获错误 在
  • 如何对wp_query的结果进行排序

    我正在尝试对 wp query 的结果进行排序 我想按不同的参数对其进行排序 而不再次进行查询 我有类似的东西 the query new WP Query args 我想对 the query 进行排序 WP Query 返回这样的结构
  • WPF ClickOnce DPI 感知每监视器 v2

    我将设置这个问题并自己回答 以便其他人可以更轻松地搜索并找到正确的答案 我不得不用谷歌搜索几个小时并从多个来源编译最终结果 所以问题是 如何在 ClickOnce 场景 WPF 特别是 c 中启用 Per Monitor v2 DPI 感知
  • Cordova 3.3 - fileSystem.root.fullPath 返回“/”而不是完整路径

    我有一段使用 Cordova 2 7 的代码 我将我的应用程序升级到 Cordova 3 3 并升级了我开发的所有自定义插件 我使用 Cordova 2 7 成功获取了 iOS 上 Documents 目录的完整绝对路径 但使用 Cordo
  • 如何通过在打字稿中调用函数来关闭bootstrap 4模式

    我正在使用 bootstrap 4 模式 然后是example https www w3schools com bootstrap4 bootstrap modal asp 下面是template code div class contai
  • Nhibernate:获取真实的实体类而不是代理类[重复]

    这个问题在这里已经有答案了 有没有办法让 nhibernate 返回我的类而不是它的代理类 如果不是偷懒或者不能更新我不介意 您可以使用此代码取消代理类 session PersistenceContext Unproxy proxiedI
  • iTunes风格模态视图控制器链(表单)

    有没有办法实现 iTunes 风格的模态视图控制器链 见截图 我环顾四周但找不到任何关于此的真正问题 我不是在寻找替代品或解决方法 只是想知道是否可以使用当前的 SDK 或 iOS 5 0 尽管我们不应该谈论它 简单的是 否就足够了 对于那
  • 对 Android APK 进行逆向工程以获取代码? [复制]

    这个问题在这里已经有答案了 可能的重复 Android 从 APK 文件获取源代码 https stackoverflow com questions 3593420 android getting source code from an
  • 如何使用 iOS 图表更改无数据消息?

    使用时iOS 图表 https github com danielgindi charts并且没有数据 有一条默认消息显示 没有可用的图表数据 这个默认值可以编辑和处理翻译吗 这是您在显示数据之前自定义图表外观的方法 IBOutlet pr
  • Unescape 或 html 解码

    我正在使用树枝 1 12 2 我的代码从代码隐藏生成一些元素 当使用最新版本的 twig 渲染这些元素时 它们会进行 html 编码 for item in files folders tr class td img src border
  • 为什么即使 use_transactional_fixtures = false after_commit 也没有运行

    rspec 中的事务装置会阻止调用 after commit 但即使我使用以下命令禁用它们 RSpec configure do config config use transactional fixtures false end The
  • 比较 Double 和 Int 的最佳方式是什么?

    以下 C 代码不起作用 int iValue 0 double dValue 0 0 bool isEqual iValue Equals dValue 那么问题来了 比较 Double 和 Int 的最佳方法是什么 您确实不能以天真的方式
  • 交互式闪亮全局日期选择器

    我正在一个没有良好日期选择器的环境中使用 R 并且我正在尝试使用 R 弹出一个日期选择器来填补空白 大多数 R 日期选择器都需要 GTK 等 UI 库 闪亮的没有 我想做的就是弹出一个日期选择器 让用户选择日期 然后结束闪亮的会话并将日期传
  • 如何检测 Java 系统属性是否已更改?

    我想知道系统属性何时更改 我在应用程序服务器中有一个应用程序 它以某种方式更改系统属性 System setProperty 我认为 我看了看 发现了不同的方法 JPDA https stackoverflow com questions
  • Collections.sort 方法抛出类 java.lang.Integer 无法转换为类 java.lang.Double 错误[重复]

    这个问题在这里已经有答案了 我从基于空手道的 API 自动化中的 JSON 响应获取一些运行时值 我将它们存储到 ArrayList 中 例如 def ArrayList Java type java util ArrayList def
  • 具有动态数据库连接的flask-sqlalchemy

    我有一个主数据库 其中存储每个客户端自己的数据库连接 因此每个客户端都使用 2 个数据库 主数据库和自己的数据库 必须确定其连接 对于每个 http 调用 我怎样才能使用flask sqlalchemy扩展来做到这一点 或者可能是 纯粹是s
  • Dart 中的“const”和“final”关键字有什么区别?

    两者有什么区别const and finalDart 中的关键字 dart 的网站上有一篇文章 解释得很好 https news dartlang org 2012 06 const static final oh my html Fina
  • MySQL数据类型仅存储月份和年份[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在编写一个 PHP 应用程序来存储STUDENTMySQL 关系数据库中的数据 我正在尝试找到最好的方法 数据类型来存储月份和年份而不需要日
  • WKHTMLTOPDF 不渲染 Base64 图像

    我有以下简单的 HTML 页面 div img src data image gif base64 R0lGODlhFwAPAKEAAP wAAAMzMzLi3tywAAAAAFwAPAAACQIyPqQjtD98RIVpJ66g3hgEY