C#生成PDF文件流
作者:恝置 发布时间:2023-03-19 08:52:56
标签:C#,PDF,文件流
本文实例为大家分享了C#生成PDF文件流的具体代码,供大家参考,具体内容如下
1、设置字体
static BaseFont FontBase = BaseFont.CreateFont("C:\\WINDOWS\\FONTS\\STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
static iTextSharp.text.Font bodyFont = new iTextSharp.text.Font(FontBase, 12);
static iTextSharp.text.Font titleFont = new iTextSharp.text.Font(FontBase, 18);
static iTextSharp.text.Font paragraphFont = new iTextSharp.text.Font(FontBase, 15);
static iTextSharp.text.Font linkFont = new iTextSharp.text.Font(FontBase, 12, Font.UNDERLINE, BaseColor.BLUE);
2.生成PDF文件流返回byte数组
public byte[] DocCreate(System.Drawing.Image image, List<TreeNodes> list)
{
MemoryStream file = new MemoryStream();
string fileName = string.Empty;
Rectangle page = PageSize.A4;
float y = page.Height;
Document document = new Document(page, 15, 15, 30, 30);
float docWidth = page.Width - 15 * 2;
float docHeight = page.Height - document.BottomMargin - document.TopMargin;
PdfWriter writer = PdfWriter.GetInstance(document, file);
writer.CloseStream = false;
writer.Open();
PdfContentByte cb = writer.DirectContent;
document.Open();
//标题
Paragraph title = new Paragraph(new Chunk("标题", titleFont));
title.Alignment = Element.ALIGN_CENTER;
document.Add(title);
//图片
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(image, ImageFormat.Png);
float widthSzie = (page.Width - 30) / img.Width;
if (widthSzie < 1)
{
img.ScalePercent(widthSzie * 100);
}
document.Add(img);
//文献出处
Paragraph p2 = new Paragraph(new Chunk("出处", paragraphFont));
p2.IndentationLeft = indentationLeft;
document.Add(p2);
InitData(list);//初始化业务数据
CreateSteps(list, document, list.FirstOrDefault(it => it.PID == 0));//添加业务数据
////添加印章
//iTextSharp.text.Image whyz = iTextSharp.text.Image.GetInstance(whyzPath);
//whyz.ScalePercent(50);
//whyz.PaddingTop = 100;
//whyz.Alignment = Element.ALIGN_RIGHT;
//document.Add(whyz);
//添加日期
Paragraph createtime = new Paragraph(new Chunk(DateTime.Now.ToLongDateString().ToString(), bodyFont));
createtime.Alignment = Element.ALIGN_RIGHT;
//createtime.SpacingBefore = -80;
createtime.PaddingTop = 200;
document.Add(createtime);
document.Close();
file.Position = 0;
MemoryStream newfile = SetWaterMark(file, "水印内容", docWidth, docHeight);//添加水印,见另外一篇博客
newfile.Position = 0;//重置流指针位置
byte[] bytes = new byte[newfile.Length];
newfile.Read(bytes, 0, bytes.Length);
return bytes;
}


猜你喜欢
- 上文我们讨论了一种最简单的线性结构——顺序表,这节我们要讨论另一种线性结构——链表。什么是链表了,不要求逻辑上相邻的数据元素在物理存储位置上
- 软件生存周期中,涉及代码运行的环节有编码、测试和维护阶段,而一套成熟的代码,在此三个阶段,数据库、日志路径、日志级别、线程池大小等配置一般会
- 首先在pom文件里引入mqtt的依赖配置<!--mqtt--> <d
- 前面聊的最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面
- 一、对AOP的初印象首先先给出一段比较专业的术语(来自百度):在软件业,AOP为Aspect Oriented Programming的缩写
- 正确使用并行流,避免共享可变状态错用并行流而产生错误的首要原因,就是使用的算法改变了某些共享状态。下面是另一种实现对前n个自然数求和的方法,
- 这篇文章主要介绍了简单了解java标识符的作用和命名规则,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 一、程序的三种结构顺序结构分支结构循环结构二、条件语句if 语句是最有用的控制结构之一。 if … else …语句的语法:if (布尔表达
- 前言C#本身提供了很强大的控件库,但是很多控件库的功能只是一些基本的功能,就比如最简单的按钮,C#提供了最基础的按钮使用方法,但是如果要增加
- 原则:1、垃圾回收机制,维护引用信息不维护指针信息2、引用类型的实例化对象在生存期内由垃圾回收机制处理,可能移动内存3、当一个类的实例化对象
- 题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb&qu
- Assets文件介绍assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。 1. 先在A
- 在logback.xml中加上该配置,包名如:com.xxx<logger name="packageName"
- 一:需求详情:OpenOffice.org 是一套跨平台的办公室软件套件,能在 Windows、Linux、MacOS X (X11)、和
- 效果图在开发APP中,经常要实现圆形头像,那么该如何实现呢?要裁剪吗,要重写draw函数吗?不用,只用一行代码就可以实现Glide实现圆形图
- 这篇文章主要介绍了SpringBoot加载外部依赖过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 一 数据库操作框架的历程1.1 JDBCJDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQ
- 1.生成自己的注解(为了确定在哪些位置使用)/** * 关闭patch delete的model处理,否则会报错 */@Target({El
- 按行读取文件package test; import java.io.*; import java.util.*; public class
- 学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择。废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤1、创