iTextSharp 提取签名图像
原文
本文使用 iTextSharp 5.5.13.2,记录使用 iTextSharp 提取图片时,获得的知识点。
pdf 中的签名并不是单纯的一张图片,它是由一张基础的底色图和一张蒙版图片组成。需要提取底图和Mask。
下面是提取签名的底图和Mask的方法
public class ExtImageRenderListener : IRenderListener
{
public List<System.Drawing.Image> Images = new List<System.Drawing.Image>();
public List<System.Drawing.Image> Masks = new List<System.Drawing.Image>();
public void BeginTextBlock()
{ }
public void EndTextBlock()
{ }
public void RenderText(TextRenderInfo renderInfo)
{ }
public void RenderImage(ImageRenderInfo renderInfo)
{
PdfImageObject imageObject = renderInfo.GetImage();
if (imageObject == null)
{
Console.WriteLine("Image {0} could not be read.", renderInfo.GetRef().Number);
}
else
{
Images.Add(imageObject.GetDrawingImage());
PRStream maskStream = (PRStream)imageObject.GetDictionary().GetAsStream(PdfName.SMASK);
if (maskStream != null)
{
PdfImageObject maskImageObject = new PdfImageObject(maskStream);
Masks.Add(maskImageObject.GetDrawingImage());
}
else
{
Masks.Add(null);
}
}
}
}
String source = @"E:\1.pdf";
int count = 0;
using (PdfReader sourceReader = new PdfReader(source))
{
AcroFields acroFields = sourceReader.AcroFields;
foreach (string name in acroFields.GetSignatureNames())
{
PdfStream xObject = (PdfStream)PdfReader.GetPdfObjectRelease(sourceReader.AcroFields.GetNormalAppearance(name));
PdfDictionary resources = xObject.GetAsDict(PdfName.RESOURCES);
ExtImageRenderListener strategy = new ExtImageRenderListener();
PdfContentStreamProcessor processor = new PdfContentStreamProcessor(strategy);
processor.ProcessContent(ContentByteUtils.GetContentBytesFromContentObject(xObject), resources);
System.Drawing.Image drawingImage = strategy.Images[0];
System.Drawing.Image drawingMask = strategy.Masks[0];
if (drawingImage != null)
{
drawingImage.Save(count++ + @".png");
}
if (drawingMask != null)
{
drawingMask.Save(count++ + @"Mask.png");
}
}
}
iTextSharp 提取签名图像的更多相关文章
- opencv提取截获图像(总结摘来)
opencv提取截获图像(总结摘来) http://blog.csdn.net/wuxiaoyao12/article/details/7305865 版权声明:本文为博主原创文章,未经博主允许不得转 ...
- 提取出图像中感兴趣的部分,cvSetImageRoi,Rect
在做人脸检测的时候,需要从摄像头拍摄视频中把检测到的人脸区域提取出来,网上找了很多博客,发现多数都是在用cvSetImageRoi函数,该函数声明如下:void cvSetImageROI(IplIm ...
- 记 iTextSharp 提取中文的问题
原文 问题 下面的代码中 currentText 能提取到大部分汉字 但是字体为 Non-Embedded Font: AdobeSongStd-Light(Horizontal) 的汉字提取不到 P ...
- 使用GrabCut提取前景图像的示范代码
#include<opencv2/opencv.hpp> bool selectObject = false; cv::Point origin; cv::Rect selection; ...
- Ubuntu使用dense_flow提取视频图像的光流图像
使用dense_flow求取图像的光流图像,原项目地址: https://github.com/wanglimin/dense_flow 该方法使用的是opecnv最基本的光流图像计算方法,输出为 f ...
- opencv批处理提取图像的特征
____________________________________________________________________________________________________ ...
- 利用matlab写一个简单的拉普拉斯变换提取图像边缘
可以证明,最简单的各向同性微分算子是拉普拉斯算子.一个二维图像函数 f(x,y) 的拉普拉斯算子定义为 其中,在 x 方向可近似为 同理,在 y 方向上可近似为 于是 我们得到满足以上三个 ...
- 利用matlab自带函数快速提取二值图像的图像边缘 bwperim函数
clear all;close all;clc; I = imread('rice.png'); I = im2bw(I); J = bwperim(I); % 提取二值图像图像边缘 figure ...
- OpenCV成长之路(8):直线、轮廓的提取与描述
基于内容的图像分析的重点是提取出图像中具有代表性的特征,而线条.轮廓.块往往是最能体现特征的几个元素,这篇文章就针对于这几个重要的图像特征,研究它们在OpenCV中的用法,以及做一些简单的基础应用. ...
随机推荐
- C++大作业——教职工管理系统
教职工信息管理系统 1.问题描述: 设计一个学校职工管理系统,要求实现如下功能:建立职工信息数据, 包括职工编号.姓名. 性别.工资.出生时间.岗位.参加工作时间和年 龄(必须计算得到),初始模拟数据 ...
- element el-tree、el-table组件加载数据前闪现 暂无数据 清除
相信很多人在使用element el-tree.el-table组件加载数据前会显示一个" 暂无数据 ",体验很不友好,有没有办法处理不显示呢?答案是:有的.废话不多说直接上代码 ...
- 基于HTML5的网络拓扑图(1)
什么是网络拓扑 网络拓扑,指构成网络的成员间特定的排列方式.分为物理的,即真实的.或者逻辑的,即虚拟的两种.如果两个网络的连接结构相同,我们就説它们的网络拓扑相同,尽管它们各自内部的物理接线.节点间距 ...
- Tomcat安装(安装版)
安装Tomcat(安装版) 下载地址https://tomcat.apache.org/ 下载成功,双击进行安装(一路Next). 等待安装结束. 然后打开浏览器输入地址:http://localho ...
- node安装和环境配置
参考链接: https://www.cnblogs.com/zwjphp/p/14123746.html 一.安装环境 1.本机:Windows 10 (64位) 2.Node.js:v12.13.0 ...
- java多线程的状态转换以及基本操作
1. 新建线程 一个java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上java程序天生就是一个多线程程序,包含了:(1)分发处理发送给给JVM信号的线程 ...
- 多条命令同时执行的包concurrently
npm i concurrently use "script":{ "client:build": "webpack --config build/w ...
- java实现MD5文件加密
package me.zhengjie.modules.logdump.util; import java.io.FileInputStream; import java.io.IOException ...
- Redux基础必知必会 reducer拆分 中间件 单向数据流
什么是 redux? 三大原则? 什么是 redux Redux 是一个基于 js 的全局可预测状态容器,主要用于现代前端框架中进行全局状态管理,能够在不同组件之间进行状态共享 Redux 常与 Re ...
- 论文翻译:2018_LSTM剪枝_Learning intrinsic sparse structures within long short-term memory
论文地址:在长短时记忆中学习内在的稀疏结构 论文代码:https://github.com/wenwei202/iss-rnns 引用格式:Wen W, He Y, Rajbhandari S, et ...