亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? pdf.cpp

?? 解析pdf文件并提取出文本。 請(qǐng)不要用于商業(yè)用途。
?? CPP
字號(hào):
//This file contains extremely crude C source code to extract plain text
//from a PDF file. It is only intended to show some of the basics involved
//in the process and by no means good enough for commercial use.
//But it can be easily modified to suit your purpose. Code is by no means
//warranted to be bug free or suitable for any purpose.
//
//Adobe has a web site that converts PDF files to text for free,
//so why would you need something like this? Several reasons:
//
//1) This code is entirely free including for commericcial use. It only
//   requires ZLIB (from www.zlib.org) which is entirely free as well.
//
//2) This code tries to put tabs into appropriate places in the text,
//   which means that if your PDF file contains mostly one large table,
//   you can easily take the output of this program and directly read it
//   into Excel! Otherwise if you select and copy the text and paste it into
//   Excel there is no way to extract the various columns again.
//
//This code assumes that the PDF file has text objects compressed
//using FlateDecode (which seems to be standard).
//
//This code is free. Use it for any purpose.
//The author assumes no liability whatsoever for the use of this code.
//Use it at your own risk!


//PDF file strings (based on PDFReference15_v5.pdf from www.adobve.com:
//
//BT = Beginning of a text object, ET = end of a text object
//5 Ts = superscript
//-5 Ts = subscript
//Td move to start next line

//No precompiled headers, but uncomment if need be:
#include "stdafx.h"

#include <stdio.h>
#include <windows.h>

//YOur project must also include zdll.lib (ZLIB) as a dependency.
//ZLIB can be freely downloaded from the internet, www.zlib.org
//Use 4 byte struct alignment in your project!

#include "zlib.h"

//Find a string in a buffer:
size_t FindStringInBuffer (char* buffer, char* search, size_t buffersize)
{
	char* buffer0 = buffer;

	size_t len = strlen(search);
	bool fnd = false;
	while (!fnd)
	{
		fnd = true;
		for (size_t i=0; i<len; i++)
		{
			if (buffer[i]!=search[i])
			{
				fnd = false;
				break;
			}
		}
		if (fnd) return buffer - buffer0;
		buffer = buffer + 1;
		if (buffer - buffer0 + len >= buffersize) return -1;
	}
	return -1;
}

//Keep this many previous recent characters for back reference:
#define oldchar 15

//Convert a recent set of characters into a number if there is one.
//Otherwise return -1:
float ExtractNumber(const char* search, int lastcharoffset)
{
	int i = lastcharoffset;
	while (i>0 && search[i]==' ') i--;
	while (i>0 && (isdigit(search[i]) || search[i]=='.')) i--;
	float flt=-1.0;
	char buffer[oldchar+5]; ZeroMemory(buffer,sizeof(buffer));
	strncpy(buffer, search+i+1, lastcharoffset-i);
	if (buffer[0] && sscanf(buffer, "%f", &flt))
	{
		return flt;
	}
	return -1.0;
}

//Check if a certain 2 character token just came along (e.g. BT):
bool seen2(const char* search, char* recent)
{
if (    recent[oldchar-3]==search[0] 
     && recent[oldchar-2]==search[1] 
	 && (recent[oldchar-1]==' ' || recent[oldchar-1]==0x0d || recent[oldchar-1]==0x0a) 
	 && (recent[oldchar-4]==' ' || recent[oldchar-4]==0x0d || recent[oldchar-4]==0x0a)
	 )
	{
		return true;
	}
	return false;
}

//This method processes an uncompressed Adobe (text) object and extracts text.
void ProcessOutput(FILE* file, char* output, size_t len)
{
	//Are we currently inside a text object?
	bool intextobject = false;

	//Is the next character literal (e.g. \\ to get a \ character or \( to get ( ):
	bool nextliteral = false;
	
	//() Bracket nesting level. Text appears inside ()
	int rbdepth = 0;

	//Keep previous chars to get extract numbers etc.:
	char oc[oldchar];
	int j=0;
	for (j=0; j<oldchar; j++) oc[j]=' ';

	for (size_t i=0; i<len; i++)
	{
		char c = output[i];
		if (intextobject)
		{
			if (rbdepth==0 && seen2("TD", oc))
			{
				//Positioning.
				//See if a new line has to start or just a tab:
				float num = ExtractNumber(oc,oldchar-5);
				if (num>1.0)
				{
					fputc(0x0d, file);
					fputc(0x0a, file);
				}
				if (num<1.0)
				{
					fputc('\t', file);
				}
			}
			if (rbdepth==0 && seen2("ET", oc))
			{
				//End of a text object, also go to a new line.
				intextobject = false;
				fputc(0x0d, file);
				fputc(0x0a, file);
			}
			else if (c=='(' && rbdepth==0 && !nextliteral) 
			{
				//Start outputting text!
				rbdepth=1;
				//See if a space or tab (>1000) is called for by looking
				//at the number in front of (
				int num = ExtractNumber(oc,oldchar-1);
				if (num>0)
				{
					if (num>1000.0)
					{
						fputc('\t', file);
					}
					else if (num>100.0)
					{
						fputc(' ', file);
					}
				}
			}
			else if (c==')' && rbdepth==1 && !nextliteral) 
			{
				//Stop outputting text
				rbdepth=0;
			}
			else if (rbdepth==1) 
			{
				//Just a normal text character:
				if (c=='\\' && !nextliteral)
				{
					//Only print out next character no matter what. Do not interpret.
					nextliteral = true;
				}
				else
				{
					nextliteral = false;
					if ( ((c>=' ') && (c<='~')) || ((c>=128) && (c<255)) )
					{
						fputc(c, file);
					}
				}
			}
		}
		//Store the recent characters for when we have to go back for a number:
		for (j=0; j<oldchar-1; j++) oc[j]=oc[j+1];
		oc[oldchar-1]=c;
		if (!intextobject)
		{
			if (seen2("BT", oc))
			{
				//Start of a text object:
				intextobject = true;
			}
		}
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	//Discard existing output:
	FILE* fileo = fopen("c:\\pdf\\output2.txt", "w");
	if (fileo) fclose(fileo);
	fileo = fopen("c:\\pdf\\output2.txt", "a");

	//Open the PDF source file:
	FILE* filei = fopen("c:\\pdf\\somepdf.pdf", "rb");

	if (filei && fileo)
	{
		//Get the file length:
		int fseekres = fseek(filei,0, SEEK_END);   //fseek==0 if ok
		long filelen = ftell(filei);
		fseekres = fseek(filei,0, SEEK_SET);

		//Read ethe ntire file into memory (!):
		char* buffer = new char [filelen]; ZeroMemory(buffer, filelen);
		size_t actualread = fread(buffer, filelen, 1 ,filei);  //must return 1

		bool morestreams = true;

		//Now search the buffer repeated for streams of data:
		while (morestreams)
		{
			//Search for stream, endstream. We ought to first check the filter
			//of the object to make sure it if FlateDecode, but skip that for now!
			size_t streamstart = FindStringInBuffer (buffer, "stream", filelen);
			size_t streamend   = FindStringInBuffer (buffer, "endstream", filelen);
			if (streamstart>0 && streamend>streamstart)
			{
				//Skip to beginning and end of the data stream:
				streamstart += 6;

				if (buffer[streamstart]==0x0d && buffer[streamstart+1]==0x0a) streamstart+=2;
				else if (buffer[streamstart]==0x0a) streamstart++;

				if (buffer[streamend-2]==0x0d && buffer[streamend-1]==0x0a) streamend-=2;
				else if (buffer[streamend-1]==0x0a) streamend--;

				//Assume output will fit into 10 times input buffer:
				size_t outsize = (streamend - streamstart)*10;
				char* output = new char [outsize]; ZeroMemory(output, outsize);

				//Now use zlib to inflate:
				z_stream zstrm; ZeroMemory(&zstrm, sizeof(zstrm));

				zstrm.avail_in = streamend - streamstart + 1;
				zstrm.avail_out = outsize;
				zstrm.next_in = (Bytef*)(buffer + streamstart);
				zstrm.next_out = (Bytef*)output;

				int rsti = inflateInit(&zstrm);
				if (rsti == Z_OK)
				{
					int rst2 = inflate (&zstrm, Z_FINISH);
					if (rst2 >= 0)
					{
						//Ok, got something, extract the text:
						size_t totout = zstrm.total_out;
						ProcessOutput(fileo, output, totout);
					}
				}
				delete[] output; output=0;
				buffer+= streamend + 7;
				filelen = filelen - (streamend+7);
			}
			else
			{
				morestreams = false;
			}
		}
		fclose(filei);
	}
	if (fileo) fclose(fileo);
	return 0;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产女人18水真多18精品一级做 | 欧美成人综合网站| 欧美一区二区久久久| 久久综合五月天婷婷伊人| 中文字幕乱码久久午夜不卡 | 欧美中文字幕不卡| 日韩精品资源二区在线| 国产精品午夜春色av| 一区二区三区波多野结衣在线观看| 日韩精品一区第一页| 奇米777欧美一区二区| 成人开心网精品视频| 欧美性xxxxx极品少妇| 久久亚区不卡日本| 亚洲精品ww久久久久久p站| 日韩电影免费在线看| 成人国产电影网| 91麻豆精品国产91久久久资源速度| 欧美激情资源网| 日韩黄色片在线观看| 成人午夜精品在线| 7777精品伊人久久久大香线蕉 | 97se狠狠狠综合亚洲狠狠| 欧美日韩免费电影| 国产欧美一区二区精品仙草咪| 一区二区三区高清在线| 国产精品亚洲视频| 91精品国产综合久久久久久久 | 成人美女在线观看| 欧美一级在线观看| 亚洲乱码国产乱码精品精小说| 久久国产欧美日韩精品| 色综合一个色综合| 久久久亚洲国产美女国产盗摄 | 91精品国产麻豆国产自产在线| 中文字幕亚洲电影| 国产综合成人久久大片91| 欧美三级在线看| 一色屋精品亚洲香蕉网站| 国产在线日韩欧美| 91精品国产综合久久久蜜臀图片| 亚洲精品成人少妇| 成人激情av网| 久久久久久久久久久久电影| 日韩电影在线一区二区三区| 91久久精品午夜一区二区| 欧美国产精品一区| 91精品国产一区二区| 亚洲自拍偷拍欧美| 99国产精品国产精品久久| 久久精品视频免费观看| 久久99精品一区二区三区| 欧美精品aⅴ在线视频| 亚洲精品日日夜夜| 91视视频在线观看入口直接观看www | 欧美xingq一区二区| 亚洲高清免费一级二级三级| 91老师片黄在线观看| 中文字幕视频一区二区三区久| 国产精品一区二区久久不卡 | 狠狠久久亚洲欧美| 欧美一区二区三区啪啪| 图片区小说区国产精品视频 | 裸体健美xxxx欧美裸体表演| 欧美日韩精品高清| 一区二区三区精品在线观看| 99国产欧美另类久久久精品| 国产精品美日韩| 成人动漫视频在线| 亚洲欧洲日产国码二区| 北岛玲一区二区三区四区| 日本一区二区成人在线| 国产91露脸合集magnet| 久久久国产精品不卡| 国产成人精品综合在线观看| 国产亚洲综合av| 国产.精品.日韩.另类.中文.在线.播放| 久久美女艺术照精彩视频福利播放 | 欧美专区在线观看一区| 一区二区三区波多野结衣在线观看| 91猫先生在线| 亚洲国产视频一区二区| 欧美日韩国产首页在线观看| 午夜精品aaa| 日韩欧美国产小视频| 国产一区二区三区高清播放| 国产欧美日韩三级| 99久久综合狠狠综合久久| 亚洲精品少妇30p| 欧美乱妇20p| 久久99国内精品| 国产欧美视频一区二区三区| 成人午夜视频网站| 亚洲精品视频在线| 欧美狂野另类xxxxoooo| 麻豆免费精品视频| 欧美激情在线一区二区三区| 成人禁用看黄a在线| 亚洲精品国产一区二区精华液 | 天天操天天干天天综合网| 欧美日韩精品一区二区| 美女精品自拍一二三四| 欧美国产一区二区| 欧美私模裸体表演在线观看| 免费一级欧美片在线观看| 久久精品一区蜜桃臀影院| 99精品一区二区| 午夜精品福利在线| 2021中文字幕一区亚洲| 91免费国产在线| 青青草国产精品亚洲专区无| 国产日韩av一区| 色狠狠色噜噜噜综合网| 日本亚洲天堂网| 国产精品视频免费| 欧美性猛交xxxxxxxx| 亚洲综合丁香婷婷六月香| 精品乱人伦小说| 99免费精品在线| 亚洲私人影院在线观看| 欧美图片一区二区三区| 免费一级片91| 精品欧美乱码久久久久久1区2区| 国产精品一级片在线观看| 亚洲一区二区精品视频| 久久综合给合久久狠狠狠97色69| 91热门视频在线观看| 经典三级一区二区| 一级日本不卡的影视| 久久久久国产精品厨房| 欧美午夜精品久久久| 国产大陆a不卡| 日韩高清国产一区在线| ...av二区三区久久精品| 日韩欧美国产一区二区三区| 色婷婷av一区二区三区软件| 国产一区二区三区免费看| 亚洲成人av一区| 日韩理论片网站| 久久久99精品免费观看不卡| 欧美猛男gaygay网站| 91视频91自| 国产成人小视频| 九色综合狠狠综合久久| 亚洲bt欧美bt精品777| 日韩理论片一区二区| 久久婷婷国产综合精品青草| 欧美精品日韩精品| 色综合久久综合网| 大尺度一区二区| 精品一区二区三区视频| 三级精品在线观看| 一区二区三区四区亚洲| 中文字幕欧美区| 久久久影视传媒| 欧美一级视频精品观看| 欧美亚洲禁片免费| 91首页免费视频| av一区二区久久| 粉嫩av一区二区三区粉嫩| 狠狠色伊人亚洲综合成人| 日本不卡一二三| 亚洲二区在线视频| 一区二区成人在线观看| 中文字幕亚洲电影| 中文字幕一区三区| 国产蜜臀av在线一区二区三区| 精品99一区二区| 欧美r级电影在线观看| 制服.丝袜.亚洲.中文.综合| 欧美日韩国产片| 欧美三级日韩三级| 欧美主播一区二区三区美女| 97久久久精品综合88久久| 不卡av电影在线播放| voyeur盗摄精品| 91视视频在线直接观看在线看网页在线看| 国产精品资源网站| 国产精品一区二区在线看| 国产精品一区在线观看你懂的| 国产综合久久久久久鬼色| 国产乱理伦片在线观看夜一区| 激情六月婷婷综合| 国产精品一区在线观看乱码| 丰满亚洲少妇av| 粉嫩一区二区三区性色av| 成人av在线资源网站| 91亚洲大成网污www| 一本久久a久久免费精品不卡| av成人免费在线观看| 91理论电影在线观看| 欧美伊人久久大香线蕉综合69| 欧美日韩性生活| 在线播放中文字幕一区| 日韩无一区二区| 久久综合久色欧美综合狠狠| 日本一区二区三区久久久久久久久不| 中文一区二区完整视频在线观看| 亚洲视频在线观看一区| 亚洲黄色片在线观看|