using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class pdfRead
{
/// <summary>
/// 读取2个pdf的内容判断文件是否相同
/// </summary>
/// <param name="filepath"></param>
/// <param name="filepath2"></param>
/// <returns></returns>
public string reading(string filepath, string filepath2)
{
try
{
PdfReader pdfReader = new PdfReader(filepath);
PdfReader pdfReader2 = new PdfReader(filepath2); int numberOfPages = pdfReader.NumberOfPages;
int numberOfPages2 = pdfReader2.NumberOfPages;
int minnum=Math.Min(numberOfPages, numberOfPages2);//为了防止文件页数不同赞成错误 找最小的那页
string text = string.Empty;
string text2 = string.Empty; if (numberOfPages != numberOfPages2)
{
Console.WriteLine("pdf页数不同所以发生变更");
}
for (int i = 1; i <= minnum; ++i)
{
text=GetTextFromPage(pdfReader, i); ///获取text内容
text2=GetTextFromPage(pdfReader2, i);
if(!text.Equals(text2))
{ changePdf(filepath2);
}
}
pdfReader.Close(); return text;
}
catch (Exception ex)
{
return ex.ToString();
} }
public static string GetTextFromPage(PdfReader reader, int pageNum)
{
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
return PdfTextExtractor.GetTextFromPage(reader, pageNum, strategy);
}
public static void changePdf(string filepath)
{
Document sourceDocument = null;
PdfCopy pdfCopyProvider = null;
PdfImportedPage importedPage = null; BaseFont simheiBase = BaseFont.CreateFont(@"C:/Windows/Fonts/SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); //设置字体
Font simheiFont = new Font(simheiBase);
simheiFont.Color = BaseColor.RED;
simheiFont.Size = 16f;
PdfReader reader = new PdfReader(@"D:\needchange.pdf");
Rectangle pagesize = reader.GetPageSize(1); #region 截取pdf的指定页
sourceDocument = new Document(reader.GetPageSizeWithRotation(1));
pdfCopyProvider = new PdfCopy(sourceDocument, new System.IO.FileStream(@"F:\NewDoc.pdf", System.IO.FileMode.Create));
sourceDocument.Open();
//截取1-3页
for (int i = 1; i <= 3; i++)
{
importedPage = pdfCopyProvider.GetImportedPage(reader, i); pdfCopyProvider.AddPage(importedPage);
}
pdfCopyProvider.AddPage(importedPage);
sourceDocument.Close();
#endregion #region 添加水印
PdfStamper stamper = new PdfStamper(reader, new FileStream(@"F:\NewDoc1.pdf", FileMode.Create));
//内容下层加水印 GetUnderContent(i)
PdfContentByte canvas = stamper.GetOverContent(1);
ColumnText.ShowTextAligned(canvas, Element.ALIGN_RIGHT, new Phrase("[HaveChanged!!!]", simheiFont), pagesize.Right-20, pagesize.Top-40, 0);
stamper.Close();
reader.Close();
#endregion 添加水印 Process.Start(@"F:\NewDoc.pdf");
Process.Start(@"F:\NewDoc1.pdf");
} /// <summary>
/// 合并pdf
/// </summary>
/// <param name="pdfList"></param>
public static void mergePDFFiles(List<string> pdfList)
{
string mergePDFFiles = @"D:\pdfhebing.pdf"; Document DOC = new Document();
//getInstance
PdfWriter writer = PdfWriter.GetInstance(DOC, new FileStream(mergePDFFiles, FileMode.Create)); DOC.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage newPage; for (int i = 0; i < pdfList.Count; i++)
{ PdfReader reader = new PdfReader(pdfList[i]);
int iPageNum = reader.NumberOfPages;
for (int j = 1; j <= iPageNum; j++)
{
DOC.NewPage();
//DOC.newPage();
newPage = writer.GetImportedPage(reader, j);
//newPage = writer.getImportedPage(reader, j); cb.AddTemplate(newPage, 0, 0);
//cb.addTemplate(newPage, 0, 0);
}
}
DOC.Close();
Process.Start(@"D:\pdfhebing.pdf");
}
}
}

  

iTextSharp之pdfRead(两个文件文本内容的比较,指定页数的pdf截取,水印的添加)的更多相关文章

  1. shell 逐行比较两个文件的内容是否一样(行数相同)

    file1="1.txt" file2="2.txt" lines=`cat $file1 | wc -l` ;i<=$lines;i++)) do li ...

  2. 使用Vim比较两个文件的内容

    原文地址:http://blog.chinaunix.net/uid-22548820-id-3477464.html 1. 使用vim的比较模式打开两个文件: vim -d file1 file2 ...

  3. [Linux] 使用awk比较两个文件的内容

    当需要比较A , B两个文件 , A文件中存在 , 并且把也在B文件中存在的行去除掉 , 可以使用这个awk的用法来 awk  '{if(ARGIND==1) {val[$0]}else{if($0 ...

  4. 如何使用UltraCompare对比两个文件夹内容差异

    http://jingyan.baidu.com/article/cb5d6105e13599005c2fe0f8.html  

  5. 向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾。

    1 import java.io.FileInputStream; 2 import java.io.IOException; 3 import java.text.SimpleDateFormat; ...

  6. shell脚本示例:批量比较多个文件的内容是否相同

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 要比较两个文件的内容是否完全一致,可以简单地使用diff命令. ...

  7. linux比较两个文件的不同(6/21)

    cmp 命令:比较任意两个类型的文件,且吧结果输出到标准输出,默认文件相同不输出,不同的文件输出差异 必要参数 -c 显示不同的信息-l 列出所有的不同信息-s 错误信息不提示 选择参数 -i< ...

  8. diff - 找出两个文件的不同点

    总览 diff [选项] 源文件 目标文件 描述 在最简单的情况是, diff 比较两个文件的内容 (源文件 和 目标文件). 文件名可以是 - 由标准输入设备读入的文本. 作为特别的情况是, dif ...

  9. Shell 命令行求两个文件每行对比的相同内容

    Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...

随机推荐

  1. C#使用 SharpSSH

    准备试一把监控Linux机器 . 附件如下 :http://files.cnblogs.com/files/lclblog/Tamir.SharpSsh.zip

  2. BZOJ 2190 仪仗队(线性筛欧拉函数)

    简化题意可知,实际上题目求得是gcd(i,j)=1(i,j<=n)的数对数目. 线性筛出n大小的欧拉表,求和*2+1即可.需要特判1. # include <cstdio> # in ...

  3. python写BMI指数菜单

    需求: # 1.创建并输出菜单, 菜单是不可变的. 所以使用元组menus = ("1, 录入", "2, 查询", "3, 删除", &q ...

  4. 口胡:[HNOI2011]数学作业

    题面 一开始看这题看了好久--觉得这题不可做. 结果是看错题了,我居然看着一段长长的C开头的单词,然后就觉得这是卡特兰数--不知道我在想些什么-- 观察到对于 i = 1~9 : f[i] = f[i ...

  5. 【WPF】GridControl的使用

    一.前言 在WPF中我们常常使用DataGrid来显示数据,在Dev中也有一个类似的控件—GridControl. 二.范例 <dxg:GridControl Grid.Row=" I ...

  6. Linux内核设计与实现第五周读书笔记

    第十八章 调试 18.1准备开始 需要的只是: 一个确定的bug.大部分bug通常都不是行为可靠而且定义明确的. 一个藏匿bug的内核版本. 相关的内核代码的知识和运气. 18.2内核中的bug 内核 ...

  7. HDU3400 三分套三分

    题意 就是给你两条线段AB , CD ,一个人在AB以速度p跑,在CD上以q跑, 在其他地方跑速度是r.问你从A到D最少的时间. 三分AB ,然后再三分CD ,模板题目,这题卡精度 eps不能少 #i ...

  8. stout代码分析之一:Duration类

    Duration类用于表示时间长度,可精确到纳秒. 代码实现在duration.hpp中,测试代码:duration_tests.cpp 相关api如下: parse, 将字符串转化成Duration ...

  9. 14.Android UiAutomator 图像处理

    一.BitMap介绍 1.图像使用场景 1)效果类截图 2)不可见的组件图像对比 3)失败与异常截图 4)利用图像判断组件 2.部分API简单说明 API 说明 compress 压缩图片 copy ...

  10. js 根据url 下载图片

    downloadIamge(imgsrc, name) {//下载图片地址和图片名 let image = new Image(); // 解决跨域 Canvas 污染问题 image.setAttr ...