dotnet获取PDF文件的页数
#region 获取PDF文件的页数
private int BytesLastIndexOf(Byte[] buffer, int length, string Search)
{
if (buffer == null)
return -;
if (buffer.Length <= )
return -;
byte[] SearchBytes = Encoding.Default.GetBytes(Search.ToUpper());
for (int i = length - SearchBytes.Length; i >= ; i--)
{
bool bFound = true;
for (int j = ; j < SearchBytes.Length; j++)
{
if (ByteUpper(buffer[i + j]) != SearchBytes[j])
{
bFound = false;
break;
}
}
if (bFound)
return i;
}
return -;
}
private byte ByteUpper(byte byteValue)
{
char charValue = Convert.ToChar(byteValue);
if (charValue < 'a' || charValue > 'z')
return byteValue;
else
return Convert.ToByte(byteValue - );
}
/// <summary>
/// 获取pdf文件的页数
/// </summary>
public int GetPDFPageCount(string path) //获取pdf文件的页数
{
path = HttpContext.Current.Server.MapPath(path);
byte[] buffer = File.ReadAllBytes(path);
int length = buffer.Length;
if (buffer == null)
return -;
if (buffer.Length <= )
return -;
try
{
//Sample
// 29 0 obj
// <</Count 9
// Type /Pages
int i = ;
int nPos = BytesLastIndexOf(buffer, length, "/Type/Pages");
if (nPos == -)
return -;
string pageCount = null;
for (i = nPos; i < length - ; i++)
{
if (buffer[i] == '/' && buffer[i + ] == 'C' && buffer[i + ] == 'o' && buffer[i + ] == 'u' && buffer[i + ] == 'n' && buffer[i + ] == 't')
{
int j = i + ;
while (buffer[j] != '/' && buffer[j] != '>')
j++;
pageCount = Encoding.Default.GetString(buffer, i, j - i);
break;
}
}
if (pageCount == null)
return -;
int n = pageCount.IndexOf("Count");
if (n > )
{
pageCount = pageCount.Substring(n + ).Trim();
for (i = pageCount.Length - ; i >= ; i--)
{
if (pageCount[i] >= '' && pageCount[i] <= '')
{
return int.Parse(pageCount.Substring(, i + ));
}
}
}
return -;
}
catch (Exception ex)
{
return -;
}
}
#endregion
dotnet获取PDF文件的页数的更多相关文章
- SNF开发平台WinForm之十三-单独从服务器上获取PDF文件进行显示-SNF快速开发平台3.3-Spring.Net.Framework
1运行效果: 2开发实现: 如果需要单独显示PDF文件时用下面代码去实现,指定url地址. 地址: . 获取附件管理的实体对象: List<KeyValuePair<string, obj ...
- c#获取pdf文件页数
引用命名空间:using iTextSharp.text.pdf; string filePath = Server.MapPath("/upload/123.pdf"); //文 ...
- itext 生成pdf文件添加页眉页脚
原文来自:https://www.cnblogs.com/joann/p/5511905.html 我只是记录所有jar版本,由于版本冲突及不兼容很让人头疼的,一共需要5个jar, 其中itextpd ...
- OpenOffice将MS docx转换成pdf文件偶数页眉不显示问题解决办法
OpenOffice版本:4.0(Windows.Linux下测试都出现问题) MS Office版本:2007 问题描述 使用OpenOffice将MS的docx文件转换为pdf文件时,docx文件 ...
- java如何实现批量删除pdf指定的页数
依赖: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-app ...
- java从远程服务器获取PDF文件并后台打印(使用pdfFox)
一.java原生方式打印PDF文件 正反面都打印,还未研究出只打印单面的方法,待解决 public static void printFile(String path) throws Exceptio ...
- Vue PDF文件预览vue-pdf
最近做项目,遇到预览PDF这个功能,在网上找了找,大多推荐的是pdf.js,不过在Vue中还是想偷懒直接npm组件,最后找到了一个还不错的Vue-pdf 组件,GitHub地址:https:// ...
- Python | 实现pdf文件分页
不知道大家有没有遇到过这么一种情况,就比如一个pdf格式的电子书,我们经常浏览的是其中的一部分,而这电子书的页数很大,每当需要浏览时,就需要翻到对应的页码,就有点儿繁琐. 还有一些情况,比如,我们想分 ...
- 将PDF文件中按页截取,并以流的形势返回给客户端
#需要用到pyPdf库 from pyPdf import PdfFileWriter,PdfFileReader from django.http import HttpResponse try: ...
随机推荐
- 交易系统使用storm,在消息高可靠情况下,如何避免消息重复
概要:在使用storm分布式计算框架进行数据处理时,如何保证进入storm的消息的一定会被处理,且不会被重复处理.这个时候仅仅开启storm的ack机制并不能解决上述问题.那么该如何设计出一个好的方案 ...
- android okvolley框架搭建
最近新出了很多好东西都没时间去好好看看,现在得好好复习下了,记下笔记 记得以前用的框架是android-async-http,volley啊,或者其它的,然后后面接着又出了okhttp,retrofi ...
- 数据库管理工具GUI - PremiumSoft Navicat Premium Enterprise 11.2.15 x86/x64 KEY
转载自: 数据库管理工具GUI - PremiumSoft Navicat Premium Enterprise 11.2.15 x86/x64 KEY Navicat Premium(数据库管理工具 ...
- SQL Server快速查询某张表的当前行数
传统做法可能是select count(1) 但是往往会比较慢.推荐如下做法: ) CurrentRowCount FROM sys.sysindexes WHERE id = OBJECT_ID(' ...
- DXGI 1.4的新特性
其实到写这篇文章的时候,DXGI已经出1.5版了,但很多朋友实际上还在用1.2甚至1.1,所以现在谈1.4一点也不过时,而且1.4又是一次非常重大的更新,很值得仔细谈谈. 为了支持Direct3D 1 ...
- 看看C# 6.0中那些语法糖都干了些什么(中篇)
接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲. 一:字符串嵌入值 我想 ...
- 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal
什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...
- Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现
回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis ...
- Linux初识二
1. Linux上常用的文件管理命令及使用 (1) CP命令:复制文件或文件夹语法格式 cp [OPTION]... [-T] SOURCE DEST // 单源复制 cp [OPTION]... S ...
- windows中,端口查看&关闭进程及Kill使用
测试过程中遇到的问题,杂记一: 1.netstat -ano | findstr "8001" 查看端口8001被哪个进程占用:由下图可以看出,被进程为3736的占用 2.查 ...