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. HDU4767_Sum Of Gcd

    通过一个题目,学到了很多. 题意为给你n个数,每次询问i,j,答案为i,j间任取两数所有的取法gcd的和. 假设我们当前要看看这个区间有多少个数的gcd为x,最最原始的想法都是查询这个区间有多少个数为 ...

  2. 【JavaScript&jQuery】轮展图

    用bootstrap实现轮展图和用Jquery自定义轮展图两种   1.使用bootstrap插件 效果图: 用一个超简单的方法,那就是用bootstrap的插件,什么?不懂bootstrap?没关系 ...

  3. 【刷题】洛谷 P4143 采集矿石

    题目背景 ZRQ成功从坍塌的洞穴中逃了出来.终于,他看到了要研究的矿石.他想挑一些带回去完成任务. 题目来源:Zhang_RQ哦对了ZRQ就他,嗯 题目描述 ZRQ发现这里有 \(N\) 块排成一排的 ...

  4. 【BZOJ4361】isn(动态规划,容斥)

    [BZOJ4361]isn(动态规划,容斥) 题面 BZOJ 题解 首先我们如果确定了一个不降序列,假设它的长度为\(i\), 那么可行的方案数为\(i*(n-i)!\),但是这样有一些非法的情况,即 ...

  5. 洛谷 P4721 【模板】分治 FFT 解题报告

    P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 \(n−1\) 的数组 \(g[1],g[2],\dots,g[n-1]\),求 \(f[0],f[1],\d ...

  6. 解题:BZOJ 4808 马

    题面 以前写过的题,翻出来学习网络流写二分图匹配,因为复杂度更优秀,$Dinic$是$O(sqrt(n)m)$哒~ 原点向左部点连流量为$1$的边,左部点向对应右部点连流量为$1$的边,右部点向汇点连 ...

  7. Java高级应用之泛型与反射20170627

    /*************************************************************************************************** ...

  8. 根据数据库连接的java.sql.Connection获取数据库名称

    // 获取数据库的元数据信息 DatabaseMetaData metaData = conn.getMetaData(); // 获取数据库名称的方法 System.out.println(meta ...

  9. STL源码分析-function

    http://note.youdao.com/noteshare?id=269e16541b43095eaf97636d4e046b1d

  10. nginx 前后分离,地址重写,url匹配中遇到的问题

    我遇到的问题: 前端用vue的路由做页面路由,后台用spring mvc做数据接口,但是遇到路由地址和接口地址无法区分的问题,导致nginx无法正确准发比如: 1)http://127.0.0.1/i ...