CSharp: itext7.* create pdf file

2023-11-06

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using iText.Kernel;
using iText.IO;
using iText.Html2pdf;
using com.itextpdf.layout;
using Common.Logging;
using Common.Logging.Factory;
using Org.BouncyCastle;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.X509;
using iText.Kernel.Font;
using iText.Kernel.Pdf.Filespec;
using iText.Kernel.Utils;
using iText.Kernel.XMP;
using iText.Kernel.XMP.Properties;
using iText.IO.Font.Constants;
using iText.Layout;
using System.IO;
using iText.Kernel.Pdf;		    //PdfWriter, PdfDocument
using iText.Kernel.Geom;	    //PageSize
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.IO.Font;
using iText.IO.Image;
using iText.Kernel.Pdf.Action;
using iText.Kernel.Pdf.Annot;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Events;

namespace DuItexDemo
{


    /// <summary>
    /// geovindu Geovin Du
    /// 涂聚文
    /// iText7.1.11
    /// 
    /// </summary>
    public partial class _Default : System.Web.UI.Page
    {

        string path = "Styles/SIMLI.TTF";
        public PdfFont getPdfFont()
        {
            PdfFont pdfFont = null;
            try
            {
                pdfFont = PdfFontFactory.CreateFont(Server.MapPath(path), PdfEncodings.IDENTITY_H);

               // pdfFont = PdfFontFactory.CreateFont("STSong-Light", "UniGB-UCS2-H");
            }
            catch (Exception e)
            {
                e.Message.ToString();
            }
            return pdfFont;
        }
        /// <summary>
        /// geovindu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            byte[] USER_PASSWORD = Encoding.ASCII.GetBytes("geovindu");
            byte[] OWNER_PASSWORD = Encoding.ASCII.GetBytes("geovindu");
            if (!IsPostBack)
            {
                PdfFont sysFont = PdfFontFactory.CreateRegisteredFont("C:/Windows/Fonts/simhei.ttf");

                String mytimes = DateTime.Now.ToString("yyyyMMdd_HH_mm_ss");
                string file = Server.MapPath("geovindu" + mytimes + ".pdf");
                

               // PdfWriter writer = new PdfWriter(file);
                WriterProperties w = new WriterProperties().SetStandardEncryption(USER_PASSWORD, OWNER_PASSWORD, EncryptionConstants.ALLOW_PRINTING, EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA);
                PdfWriter writer = new PdfWriter(file,w);     

                PdfDocument pdf = new PdfDocument(writer);

                //string password = "geovindu@123";
                //PdfReader reader = new PdfReader(input);
                //PdfEncryptor.Encrypt(reader, output, true, password, password, PdfWriter.ALLOW_SCREENREADERS);

                Document document = new Document(pdf, PageSize.A4.Rotate());


                //注册事件监听
                pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, new DuEventHandler());


                document.SetFont(sysFont).SetFontSize(12);//设置字体大小
                //设置文档属性
                pdf.GetDocumentInfo().SetAuthor("涂聚文 C#");
                pdf.GetDocumentInfo().SetTitle("IText7 dotnet测试PDF CSharp ");
                pdf.GetDocumentInfo().SetSubject("涂聚文公司");
                pdf.GetDocumentInfo().SetMoreInfo("涂聚文", "111");
                pdf.GetDocumentInfo().SetCreator("geovindu CSharp");
                pdf.GetDocumentInfo().SetKeywords("IText涂聚文 Gevoin Du");

                //页边距
                document.SetMargins(20, 20, 20, 20);

                //简单文字
                document.Add(new Paragraph("简单文字").SetFont(getPdfFont()));
                document.Add(new Paragraph("Hello Word!").SetFont(getPdfFont()).Add(new Tab()).Add(new Text("你好!").AddStyle(new iText.Layout.Style().SetFontSize(24))));

                //简单图片
                document.Add(new Paragraph("简单图片").SetFont(getPdfFont()));

                document.Add(new iText.Layout.Element.Image(ImageDataFactory.Create(Server.MapPath("resource/geovindulogo.jpg"))));

                //简单表格
                document.Add(new Paragraph("简单表格").SetFont(getPdfFont()));
                iText.Layout.Element.Table table = new iText.Layout.Element.Table(new float[] { 3, 3, 4 });
                PdfFont font = getPdfFont();
                //标题、内容
                process(table, "姓名;年龄;电话号码", font, true);
                for (int i = 0; i < 5; i++)
                {
                    process(table, "涂聚文" + i + ";" + (18 + i) + ";1500000000" + i, font, false);
                }
                document.Add(table);

                //超链接
                document.Add(new Paragraph("超链接").SetFont(getPdfFont()));
                PdfLinkAnnotation annotation = new PdfLinkAnnotation(new Rectangle(0, 0));
                annotation.SetAction(PdfAction.CreateURI("https://itextpdf.com/"));
                Paragraph p = new Paragraph("更多精彩内容,猛戳:").SetFont(getPdfFont()).Add(new Link("这里", annotation));
                document.Add(p);

                pdf.AddNewPage();
                //换一页
                document.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
                pdf.AddNewPage();
                document.Close();
                Response.Write("Ok!");
            }

        }
        /// <summary>
        /// geovindu
        /// </summary>
        /// <param name="table"></param>
        /// <param name="line"></param>
        /// <param name="font"></param>
        /// <param name="isHeader"></param>
        public void process(iText.Layout.Element.Table table, String line, PdfFont font, bool isHeader)
        {
            String[] split = line.Split(';');
            foreach (String s in split) {
            Cell cell = new Cell().Add(new Paragraph(s).SetFont(font));
                if (isHeader) 
                {
                    table.AddHeaderCell(cell);
                } 
                else
                {
                    table.AddCell(cell);
              }
           }
        }
        /// <summary>
        /// geoivndu
        /// </summary>
        /// <param name="pdfBase64"></param>
        /// <param name="passwordUser"></param>
        /// <param name="passwordOwner"></param>
        /// <returns></returns>
        public static string EncryptPDFwithPassword(string pdfBase64, string passwordUser, string passwordOwner)
        {
            var encryptedBase64 = string.Empty;
            var srcBytes = Convert.FromBase64String(pdfBase64);
            var userPassword = Encoding.ASCII.GetBytes(passwordUser);
            var ownerPassword = Encoding.ASCII.GetBytes(passwordOwner);

            PdfReader reader = new PdfReader(new MemoryStream(srcBytes));
            WriterProperties props = new WriterProperties()
                    .SetStandardEncryption(userPassword, ownerPassword, EncryptionConstants.ALLOW_PRINTING,
                            EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA);

            using (var memoryStream = new MemoryStream())
            {
                PdfWriter writer = new PdfWriter(memoryStream, props);
                PdfDocument pdfDoc = new PdfDocument(reader, writer);
                pdfDoc.Close();
                encryptedBase64 = Convert.ToBase64String(memoryStream.ToArray());
            }

            return encryptedBase64;
        }

        /// <summary>
        /// geovindu
        /// </summary>
        /// <param name="outFile"></param>
        /// <param name="htmlDoc"></param>
        private void HTML2PDF(string outFile, string htmlDoc) {
            System.IO.FileInfo fi = new FileInfo( outFile );	
            PdfWriter writer = new PdfWriter( fi );
            
            //用法1 -- 使用默认参数直接转换(A4,)
            //HtmlConverter.ConvertToPdf(htmlDoc, writer);
             
            //用法2 -- 自定义页面大小、留白尺寸
            PdfDocument pdf = new PdfDocument( writer );
            PageSize a6 = PageSize.A6;
            a6.ApplyMargins(20, 20, 20, 20, false);		//if true the rectangle will expand, otherwise it will shrink
            pdf.SetDefaultPageSize( a6 );
            ConverterProperties prop= new ConverterProperties();	
            HtmlConverter.ConvertToPdf(htmlDoc, pdf, prop);
            
        }


    }
}

 

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

CSharp: itext7.* create pdf file 的相关文章

  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern

随机推荐

  • MATLAB自动读取文件夹中的所有文件,并处理文件内容

    读取示波器文件中的数据 并记录其峰值 clc clear all 获取文件夹下某类型数据的所有文件名 Path E 单光子 设置数据存放的文件夹路径 File dir fullfile Path csv 显示文件夹下所有符合后缀名为 csv
  • 量化择时——SVM机器学习量化择时(第1部分—因子测算)

    文章目录 机器学习在量化模型上的应用 机器学习量化应用场景 量化模型有效性的思考 机器学习模型在量化择时中的应用 训练与预测流程 训练数据特征构造 SVM模型与测算 SVM训练与预测 效果测算 效果分析 最近ChatGPT比较火 NLP的同
  • vscode更改快捷键

    对我来说使用vscode必须要修改的一些快捷键 ctrl f修改后居然不能键盘选择上下搜索 太无语 按如下方式改掉 1 首先打开vscode编辑器 点击首页 首选项 键盘快捷方式 2 之后就是右键需要修改的那些快捷键 然后改成自己熟悉的就可
  • 利用GitHub搭建一个酷炫免费的个人博客

    转载自公众号 python shequ 由于公众号的文章不易后续整理阅读 于是小吴昨天上午花了半个小时使用 GitHub Hexo 搭建了一下个人博客 打算将公众号的文章搬过去 支持关键字搜索 分类标签功能 效果是下面这样子的 image
  • 微信小程序和web开发使用过程中的相似与不同

    思考 微信小程序和web开发使用过程中的相似与不同 相似之处 1 二者在构造时都用到了JavaScript语言 2 在设计小程序和网页时 都不可避免的要用到图片文字去丰富内容 使其变得更加充实 因而也就需要设计框架和页面样式 从而达到耐看
  • FuzzBuzz算法问题

    java实现输入一个字符串 5 hogera 3 piyo 2 huga 30 按空格分隔为map 例如 key为数字5 value为字符串hogera 当最后的数字满足 30 532时 按照key的从小到达的顺序拼接字符串输出hugapi
  • scrapy框架的安装与基本使用,scrapy分页数据的抓取

    文章目录 一 scrapy框架简介 二 scrapy的安装 三 scrapy的基本使用 四 scrapy架构流程图 五 汽车之家案例抓取 六extract 和extract first 区别和用法 七 当当网数据抓取 scrapy的分页抓案
  • Redis学习总结

    文章目录 Redis入门 概述 Linux安装 1 下载安装包 redis 6 0 6 tar gz 2 将安装包安装在OPT目录下 3 进入解压后的文件 4 基本的环境安装 5 redis默认安装路径 usr local bin 6 将o
  • ST单片机使用ST Visual Programmer软件烧录程序简易教程

    文章原始地址 http feotech com p 100 ST单片机使用ST Visual Programmer软件烧录程序简易教程 ST Visual Programmer 是ST公司为自家单片机开发的一款程序烧录读取工具软件 该软件简
  • 【DBN分类】基于粒子群算法优化深度置信网络PSO-DBN实现数据分类附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 信号处理 图像
  • CWnd与HWND的区别以、转换以及如何获取本窗体对象

    一 CWnd与HWND的区别 HWND是句柄 是Windows系统中对所有窗口的一种标识 即窗口句柄 它是指针的指针 是由操作环境定义的一个唯一的整数值 它被程序用来标识或者切换到对象 如窗体或控件等 CWnd是MFC中所有与窗口有关的基类
  • yarn 错误There appears to be trouble with your network connection. Retrying...

    原因 yarn超时 解决途径 1 安装好后更换淘宝镜像 yarn config set registry https registry npm taobao org 转载于 https www cnblogs com yanglang p
  • 回顾|Streaming Lakehouse Meetup · 北京站(附问题解答 & PPT 下载)

    更多活动现场照片 https live photoplus cn live pc 53265145 7 月 29 日 Streaming Lakehouse Meetup 邀请了来自阿里巴巴 字节跳动的七位技术专家 围绕 CDC 数据入湖实
  • 【Stable Diffusion】lora的基础使用技巧

    1 用lora配套的大模型效果更好 lora训练是根据大模型作为参考 lora是根据那个大模型来训练参数的 例如 这里以墨心lora为例 点击示例图片的中的 在Model中就显示出了作者用于训练墨心lora的底模了 2 最好使用和作者相同的
  • JavaScript第二个分水岭——对象

    个人简介 个人主页 微风洋洋 博客领域 编程基础 后端 写作风格 干货 干货 还是tmd的干货 精选专栏 JavaScript 支持洋锅 点赞 收藏 留言 好久不见 甚是想念 大家好 我是微风洋洋 芜湖 起飞 上次情人节 我帮没有对象的大兄
  • opcv数玉米案例

    OPCV数玉米案例 对于我们传统的数玉米 我看了网上的案例 大家都和贾志刚老师描述的一样 即二值分割 形态学操作 距离变换 连通域计算 但是这个方法的偶然性太多 对于距离变换来说 我们需要不断的调参 换一张图就不适合 按照人眼的思维 还是把
  • 【论文阅读】AdaptFormer: Adapting Vision Transformers forScalable Visual Recognition

    paper AdaptFormer Adapting Vision Transformers forScalable Visual Recognition code https github com ShoufaChen AdaptForm
  • nginx配置例子-反向代理实现

    4 1 反向代理实现 实例1 4 1 1需要实现的效果 1 打开浏览器 在浏览器地址栏输入地址 www 123 com 跳转到liunx 系统tomat主页面中 4 1 2 准备工作 1 在liunx 系统安装 tomcat 使用默认端口8
  • 解决MongoDB读数据报异常readEndDocument can only be called when State is END_OF_DOCUMENT

    org bson BsonInvalidOperationException readEndDocument can only be called when State is END OF DOCUMENT not when State i
  • CSharp: itext7.* create pdf file

    using System using System Collections Generic using System Linq using System Web using System Web UI using System Web UI