相关文章推荐
听话的牛肉面  ·  两篇2023 ...·  1 年前    · 
独立的冲锋衣  ·  .net ...·  1 年前    · 

好东西要分享,之前一直在使用wkhtmltopdf进行pdf文件的生成,常用的方式就是先安装wkhtmltopdf,然后在程序中用命令的方式将对应的html生成pdf文件,简单而且方便;但重复的编码使得想在wkhtmltopdf基础上进行封装,偶然间发现有小伙伴已经封装的还不错啦,常用的功能都已经实现,源码地址:https://github.com/fpanaccia/Wkhtmltopdf.NetCore。

作者将其打包成Nuget包(Wkhtmltopdf.NetCore),直接引入使用即可;

既然用到了.NetCore,肯定就要考虑到跨平台兼容性,对于wkhtmltopdf之前一直是在Windows上使用,还没有在其他平台尝试;这个包封装的行不行,拉出来遛遛就知道啦,接下来就试试:

1. 建个API项目,引入包和兼容对应平台的wkhtmltopdf执行文件

注:默认依赖的wkhtmltopdf执行文件需要存放在Rotativa目录下,可以自定义名称,如果自定义,需要再注册服务时指定对应的文件名;这里的wkhtmltopdf已经根据不同平台进行编译打包了,无需安装,这些文件在源码那就有;

2.创建PDFTestController控制器,添加如下接口进行测试

首先把生成pdf的服务注入进来,后续直接使用就可以啦:

接下来就开始写接口啦,这里只是测试,代码冗余没有考虑,在实际项目中小伙伴可以根据自己需求进行封装;

  • ExportPDFByHtml 接口,用html直接生成pdf文件,但这里没有保存,以文件流的形式访问,通过浏览器查看文件,可以自行下载;html模板在实际开发过程中可以单独用文件存储;

    如上基本的使用演示就说那么多,使用还是很简单,小伙伴后续可以根据自己的需要进行相关扩展;当然还有其他功能,比如设置页眉/页脚等,作者提供有对应的案例;这里不说那么多,不然又是长文。

  • 3. 小伙伴用的时候可能会遇到的问题

  • 在开发调试运行项目时,会报找不到wkhtmltopdf文件,那是因为运行时的确找不到对应的文件,将对应Rotativa下的文件设置为始终复制即可:

    安装缺少的依赖库

    可执行权限开启之后,别急着去访问页面,这样可能还是错误。因为可能缺少依赖库,那咋知道缺少呢,我是直接执行wkhtmltopdf,执行成功就没啥,不成功就会报缺少相关依赖,然后直接安装就行啦;执行 ./wkhtmltopdf https://www.baidu.com ./test.pdf 试试就知道啦,因为wkhtmltopdf本身是可以单独运行的,并不依赖我们写的程序。

  • 当执行成功之后,然后开始访问接口导出功能,如果不出意外,遇到中文就产生乱码啦,那是因为Linux环境下缺少相关的字体文件,将对应的字体文件拷贝到Linux上即可,字体我找好了,下载地址如下:

    链接: https://pan.baidu.com/s/1jikC0DUkpEzpXL5ysjEQPA 提取码: tn4j

    将下载下来的字体解压,然后拷贝到Linux下的   /usr/share/fonts目录下即可

  • 最后这样应该就没啥问题啦,剩下的就交给小伙伴自己摸索搞实践吧;

    此文源码地址:https://github.com/zyq025/DotNetCoreStudyDemo

    wkhtmltopdf官网地址:https://wkhtmltopdf.org/

    使用还是很简单的,常规的需求没啥问题,如果需要功能定制化,小伙伴可以参考源码,自己封装一个(封装思路不难的);如果小伙伴有比较好的导出库,免费开源的那种,一起分享出来玩玩。

    一个被程序搞丑的帅小伙,关注"Code综艺圈",跟我一起学~

    ARCHIVED - MRF8S9232NR3 865-960 MHz, 63 W Avg., 28 V Single W-CDMA Lateral N-Channel RF Power MOSFET 2023 开放原子全球开源峰会高峰论坛成功举办 官宣!菁英实习生计划启动,百度大模型团队诚邀你的加入 MRF7S18170HR3, MRF7S18170HSR3 1805-1880 MHz, 50 W Avg., 28 V Single W-CDMA Lateral N-Channel RF P... BLDC Motor with Speed Closed Loop and DC-Bus Break Controller, driven by eTPU on MCF523x EB00875, Considerations for Avoiding Stuck-In-Reset Scenarios Caused by Non-Correctable ECC Error... 【案例展示】计算力学降维方法推荐分享 AFT09MS031NR1, AFT09MS031GNR1 764-941 MHz, 31 W, 13.6 V Wideband RF Power LDMOS Transistors - Dat... Mainstream contactless smart card IC for fast and easy solution development 今日推荐 | Oracle GoldenGate 架构和日常运维 ARCHIVED - MRF8S26060H, MRF8S26060HS 2620-2690 MHz, 15.5 W Avg., 28 V W-CDMA, LTE Lateral N-Chann... 飞桨AI4S污染物扩散快速预测模型,亮相全国数据驱动计算力学研讨会 SPEC 公平使用规则 浅析 Jetty 中的线程优化思路 BLDC Motor with Speed Closed Loop and DC-Bus Break Controller, driven by eTPU on MPC5554 Django 基金会筹款活动:新购 PyCharm 限时 7 折进行中! ARCHIVED - MD7IC2050NR1, MD7IC2050GNR1, MD7IC2050NBR1 1880-2100 MHz, 10 W Avg., 28 V Single W-CDM... AN4813, Encoder Position and Speed Sensing Utilizing the Quad Timer on the MC56F827xx DSCs - Appl... SeaTunnel 发布成为 Apache 顶级项目后首个版本 2.3.2,进一步提高 Zeta 引擎稳定性和易用性 Oracle数据库存储过程技术文档 ARCHIVED - AFT26P100-4WSR3, AFT26P100-4WGSR3 2496-2690 MHz, 22 W Avg., 28 V Airfast ® R... AB实验遇到用户不均匀怎么办?—— vivo游戏中心业务实践经验分享 MHL18926N 1805-1880 MHz, 10 W, 28.6 dB RF Linear LDMOS Amplifier - Archived 如何清理并刷新 DNS 燧原科技与飞桨完成 I 级兼容性测试,可用于文字识别等多个场景 GD3160, Advanced gate driver for SiC MOSFETs and IGBTs - Product Brief TiDB v7.1.0:精准资源分配,实现数据流畅运行! 逛开发者集市啦,ShardingSphere 在亚马逊云科技中国峰会等你! MRF5S9070NR1, 880 MHz, 70 W, 26 V Single N-CDMA Lateral N-Channel Broadband RF Power MOSFETs 【我和openGauss的故事】在vm中安装openEuler及使用yum安装openGauss 如何建设指标管理平台,实现企业运营效率提升 AN4771, Integrating FreeMASTER-Time Debugging Tool with CodeWarrior ® for Microcon... MC68HC11ED0 Technical Summary HCMOS Microcontroller Unit - Data Sheet RSAC创新沙盒十强出炉,这家SCA公司火了 A2T07D160W04SR3 716-960 MHz, 30 W Avg., 28 V Airfast ® RF Power LDMOS Transistor - Data... MRF5P21045NR1 2110-2170 MHz, 10 W Avg., 28 V, 2 x W-CDMA, Dual Path Lateral N-Channel RF Power M... ARCHIVED - AFT09H310-03SR6, AFT09H310-04GSR6 920-960 MHz, 56 W Avg., 28 V RF Power LDMOS Transist... MRF9100LR3, MRF9100LSR3 900 MHz, 110 W, 26 V GSM/EDGE Lateral N-Channel RF Power MOSFETs 深入分析如何为亿级 GPS 数据处理进行数据库选型,实现高效存储和查询 TiDB 7.1资源管控和Oceanbase 4.0多租户使用对比 分布式任务调度框架之开山鼻祖:Quartz MRF5S19130HR3 1930-1990 MHz, 26 W Avg., 28 V, 2 x N-CDMA Lateral N-Channel RF Power MOSFET 用 Generative AI 构建企业专属的用户助手机器人 MRF18085BLR3, MRF18085BLSR3 1930-1990 MHz, 85 W, 26 V, GSM/GSM EDGE Lateral N-Channel RF Power MO... MRF6522-5R1 960 MHz, 5.0 W, 26 V Lateral N-Channel RF Power MOSFET - Archived “短期结果需要和长期规划结合”| 技术人金句系列 MRF6V12250HR3, MRF6V12250HSR3 960-1215 MHz, 275 W, 50 V Pulsed Lateral N-Channel RF Power MOSFETs ARCHIVED - MRF8S7170NR3 618-803 MHz, 50 W Avg., 28 V Single W-CDMA Lateral N-Channel RF Power MOS... 高度集成的1.75GHz CMOS发射机设计教程 清微智能TX5368A与飞桨完成Ⅱ级兼容性测试,助力全行业智能化升级 升级安装 Windows 11 22H2 时绕过 TPM 检测 利用一个CMOS升压型DCDC开关稳压器就能给液晶显示器供电 ARCHIVED 2006 DSP56000 Fractional and Integer Arithmetic using the DSP56000 Family of General-Pur... openEuler 开源汇智赢未来|2023开放原子全球开源峰会OpenAtom openEuler 论坛成功召开 《开源工业软件白皮书—CAE软件集成框架》正式发布! vivo 获评中国信通院铸基计划企业级平台工程综合能力要求标准 突出贡献单位 MRF6P21190HR6 2110-2170 MHz, 44 W Avg., 28 V, 2 x W-CDMA Lateral N-Channel RF Power MOSFET MRF7S19120NR1 1930-1990 MHz, 36 W Avg., 28 V Single W-CDMA Lateral N-Channel RF Power MOSFET MMRF1304NR1, MMRF1304GNR1 1.8-2000 MHz, 25 W, 50 V Wideband RF Power LDMOS Transistors - Data Sheet 【SOP】最佳实践之 TiDB 业务写变慢分析 某用户想从表A选择行对表B的数据进行更新或插入,则可以使用哪种语法? 实现一个简单Database13 体验 TDengine 3.0 高性能的第一步,请学会控制建表策略 SDS31300 Smart Defrost RF Module Reference Design Fact Sheet MHL9838N 800-925 MHz, 8.0 W, 31 dB RF Linear LDMOS Amplifier - Archived 实战案例 | GreatSQL数据库服务梅州客商银行 支撑全栈信创平台上线 ARCHIVED - MRF6S21190HR3, MRF6S21190HSR3 2110-2170 MHz, 54 W Avg., 28 V Single W-CDMA Lateral N-C... 重磅国赛来了!2023中国高校计算机大赛-人工智能创意赛启动报名 Running NXP ® IEEE™ 802.15.4 Boards on MAC OS X Based Computers 大咖来啦!6月30日ACDU 中国行 · 深圳站不见不散 MW4IC2020MBR1, MW4IC2020GMBR1 1805-1990 MHz, 20 W, 26 V, GSM/GSM EDGE, CDMA, RF LDMOS Wideband In... 定档!WAVE SUMMIT 2023@全球开发者,8月16日北京见! PERFORMANCE ANALYSIS USING NXP’S I.MX RT1050 CROSSOVER PROCESSOR AND THE ZEPHYR OS 【自主推荐】电磁噪声优化软件(ENOS) Microsoft, NXP Semiconductors, IAV and Auto Mobility Partners Showcase Innovations for Safe, Secu... 上分秘籍 :如何用大模型跨模态能力核查网络谣言? 如何用大模型 Prompt 解决行业场景问题?大厂中文教程来了! 版本升级 | v1.0.12发布,许可证风险早知道