iTextSharp 绘制pdf

一、新建项目:pdfdemo

<ItemGroup>
   <PackageReference Include="iTextSharp.LGPLv2.Core" Version="3.4.20" />
</ItemGroup>

二、HomeController.cs

using iTextSharp.text;
using iTextSharp.text.pdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using pdfdemo.Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace pdfdemo.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            var path = $"{AppDomain.CurrentDomain.BaseDirectory}/{DateTime.Now.ToFileTime()}.pdf";
            var document = new Document(PageSize.A4.Rotate());
            document.SetMargins(10, 10, 50, 10);
            using (var fileStream = new FileStream(path, FileMode.Create))
            {
                var writer = PdfWriter.GetInstance(document, fileStream);
                document.Open();
                var rowHeight = 25;
                var table = new PdfPTable(6);
                table.WidthPercentage = 100;
                var cellTdDes = new PdfPCell(new Phrase("A"));
                cellTdDes.Colspan = 3;
                cellTdDes.HorizontalAlignment = Element.ALIGN_LEFT;
                cellTdDes.VerticalAlignment = Element.ALIGN_MIDDLE;
                cellTdDes.FixedHeight = rowHeight;
                table.AddCell(cellTdDes);

                var cellQuantityHeader = new PdfPCell(new Phrase("B"));
                WrapCell(rowHeight, cellQuantityHeader);
                var cellPriceHeader = new PdfPCell(new Phrase("C"));
                WrapCell(rowHeight, cellPriceHeader);
                var cellAmountHeader = new PdfPCell(new Phrase("D"));
                WrapCell(rowHeight, cellAmountHeader);
                table.AddCell(cellQuantityHeader);
                table.AddCell(cellPriceHeader);
                table.AddCell(cellAmountHeader);

                var baseFont = BaseFont.CreateFont(@"c:/windows/fonts/SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                var font = new iTextSharp.text.Font(baseFont, 10, iTextSharp.text.Font.NORMAL);
                var fixedHeight = 40;
                for (int i = 0; i < 8; i++)
                {
                    var cellTd = new PdfPCell(new Phrase("你好", font));
                    cellTd.Colspan = 3;
                    cellTd.FixedHeight = fixedHeight;
                    cellTd.VerticalAlignment = Element.ALIGN_MIDDLE;
                    table.AddCell(cellTd);

                    var cellQuantity = new PdfPCell(new Phrase("66"));
                    WrapCell(fixedHeight, cellQuantity);

                    var cellPrice = new PdfPCell(new Phrase("666"));
                    WrapCell(fixedHeight, cellPrice);

                    var cellAmount = new PdfPCell(new Phrase("666"));
                    WrapCell(fixedHeight, cellAmount);
                    table.AddCell(cellQuantity);
                    table.AddCell(cellPrice);
                    table.AddCell(cellAmount);
                }

                document.Add(table);
                writer.Flush();
                document.Close();
                document.Dispose();
            }
            return View();
        }
        private static void WrapCell(int fixedHeight, PdfPCell cell)
        {
            cell.HorizontalAlignment = Element.ALIGN_RIGHT;
            cell.VerticalAlignment = Element.ALIGN_MIDDLE;
            cell.FixedHeight = fixedHeight;
        }

         
    }
}

运行效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/732095.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

性能工具之 MySQL OLTP Sysbench BenchMark 测试示例

文章目录 一、前言二、测试环境1、服务器配置2、测试拓扑 三、测试工具安装四、测试步骤1、导入数据2、压测数据3、清理数据 五、结果解析六、最后 一、前言 做为一名性能工程师掌握对 MySQL 的性能测试是非常必要的&#xff0c;本文基于 Sysbench 对MySQL OLTP&#xff08;联…

Python应用开发——30天学习Streamlit Python包进行APP的构建(7)

st.data_editor 显示数据编辑器 widget。 数据编辑器 widget 可让你在类似表格的用户界面中编辑数据框和许多其他数据结构。 警告 When going from st.experimental_data_editor to st.data_editor in 1.23.0, the data editors representation in st.session_state was ch…

展厅装修时候需要注意哪些细节

1、视觉方面 展厅应该具有很强的视觉冲击力。只有这样不论是领导视察还是合作的客户进行参观的时候才会对展厅产生浓厚的兴趣&#xff0c;同时产生一种亲和力&#xff0c;并直接加深对企业的识别度和记忆度。而个性化设计要跟企业文化相符合。这里&#xff0c;企业标志为寻求个…

Stable Diffusion vs DALL·E3

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

六、(正点原子)pinctrl子系统和gpio子系统

前面我们使用设备树来驱动LED灯&#xff0c;其实就是将LED寄存器地址写入到设备树的属性reg中&#xff0c;通过OF函数 &#xff0c;读取到LED灯的寄存器信息&#xff0c;从而操作寄存器来控制LED灯。在操作LED灯时候&#xff0c;我们使用到GPIO这个引脚&#xff0c;通过对这个G…

RabbitMQ实践——最大长度队列

大纲 抛弃消息创建最大长度队列绑定实验 转存死信创建死信队列创建可重写Routing key的最大长度队列创建绑定关系实验 在一些业务场景中&#xff0c;我们只需要保存最近的若干条消息&#xff0c;这个时候我们就可以使用“最大长度队列”来满足这个需求。该队列在收到消息后&…

leetCode40组合总和(回溯)

题目 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次示例 : 输入: candidates [2,5,2,1,2], target 5, 输出: [ [1,2,2], [5] ]回溯一般模…

3.XSS-DOM型(基础和进阶)

DOM XSS&#xff08;基础&#xff09; 不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞。 进行测试一下&#xff0c;输入111&#xff0c;会显示what do you see 查看元素代码&#xff0c;看到What do you see 根据前端页面语句进行编写弹窗攻击代码 <a hr…

# 消息中间件 RocketMQ 高级功能和源码分析(十)

消息中间件 RocketMQ 高级功能和源码分析&#xff08;十&#xff09; 一、消息中间件 RocketMQ 源码分析&#xff1a; 消息消费概述 1、集群模式和广播模式 消息消费以组的模式开展&#xff0c;一个消费组内可以包含多个消费者&#xff0c;每一个消费者组可订阅多个主题&…

萨科微slkor宋仕强论道华强北假货之六

萨科微slkor宋仕强论道华强北假货之六&#xff0c;华强北的假货这么多&#xff0c;搞得客户害怕、同行焦虑&#xff0c;话说“在华强北没有被坑过的&#xff0c;就不是华强北人”。我们金航标Kinghelm&#xff08;www.kinghelm.com.cn&#xff09;公司以前有一个贸易部&#xf…

【单片机】MSP430G2553单片机 Could not find MSP-FET430UIF on specified COM port 解决方案

文章目录 MSP430G2553开发板基础知识解决办法如何实施解决办法4步骤一步骤二步骤三 MSP430G2553开发板基础知识 MSP430G2553开发板如下图&#xff0c;上半部分就是UIF程序下载调试区域的硬件。个人觉得MSP430G2553开发板的这个部分没有做好硬件设计&#xff0c;导致很多系统兼…

三相光伏逆变并网电流电压双闭环仿真

三相并网发电系统的拓扑结构图展示了系统的基本构成和连接方式。图中&#xff0c;&#x1d456;&#x1d451;&#x1d450;1为直流输入电源&#xff0c;&#x1d436;1为输入直流母线滤波电容&#xff0c;&#x1d447;1~&#x1d447;6为三相逆变桥的6个IGBT开关管。这些开关…

MyBatis系列六: 映射关系多对一

动态SQL语句-更复杂的查询业务需求 官方文档基本介绍映射方式配置Mapper.xml的方式-应用实例注解的方式实现-应用实例课后练习 官方文档 文档地址: https://mybatis.org/mybatis-3/zh_CN/sqlmap-xml.html 基本介绍 ●基本介绍 1.项目中多对1的关系是一个基本的映射关系, 也可…

搜索python包的说明

当我发现bug时&#xff0c;就怀疑是sns包的版本问题了&#xff08;原代码是原作者以前成功运行的代码&#xff09;&#xff0c;于是直接到网上搜&#xff0c;找到对应的说明文档 根据该示例代码进行改写&#xff1a; 达成目的。

Harbor本地仓库搭建003_Harbor常见错误解决_以及各功能使用介绍_镜像推送和拉取---分布式云原生部署架构搭建003

首先我们去登录一下harbor,但是可以看到,用户名密码没有错,但是登录不上去 是因为,我们用了负债均衡,nginx会把,负载均衡进行,随机分配,访问的 是harbora,还是harborb机器. loadbalancer中 解决方案,去loadbalance那个机器中,然后 这里就是25机器,我们登录25机器 然后去配置…

【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)

【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理&#xff08;完结&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理&#xff08;完结&#xff09;1、业务说明2、接口开发2.1、预约看房管理2.1.1.保存或更新看房预约2.1.2. 查询个人预约…

首个AI高考全卷评测结果出分,大模型“考生”表现如何?

内容提要 大部分大模型“考生”语文、英语科目表现良好&#xff0c;但在数学方面还有待加强。阅卷老师点评&#xff0c;在语文科目上&#xff0c;对于语言中的一些“潜台词”&#xff0c;大模型尚无法完全理解。在数学科目上&#xff0c;大模型的主观题回答相对凌乱&#xff0…

2005年上半年软件设计师【下午题】试题及答案

文章目录 2005年上半年软件设计师下午题--试题2005年上半年软件设计师下午题--答案2005年上半年软件设计师下午题–试题

力扣每日一题 6/22 字符串/贪心

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2663.字典序最小的美丽字符串【困难】 题目&#xff1a; 如果一个字符串满…

NLP大语言模型的缩放定律

一、简述 ​论文《神经语言模型的缩放定律》包含对交叉熵损失的语言模型性能的经验缩放定律的研究&#xff0c;重点关注Transformer架构。 https://arxiv.org/pdf/2001.08361.pdfhttps://arxiv.org/pdf/2001.08361.pdf 实验表明&#xff0c;测试损失与模型大小、数据集…