A. 怎麼使用pdfbox 處理 pdf文件
PDF全稱Portable Document Format,是Adobe公司開發的電子文件格式。這種文件格式與操作系統平台無關,也就是說,PDF文件不管是在Windows,Unix還是在蘋果公司的Mac OS操作系統中都是通用的。這一特點使它成為在Internet上進行電子文檔發行和數字化信息傳播的理想文檔格式。越來越多的電子圖書、產品說明、公司文告、網路資料、電子郵件開始使用PDF格式文件。PDF格式文件目前已成為數字化信息事實上的一個工業標准。 Adobe公司設計PDF文件格式的目的是為了支持跨平台上的,多媒體集成的信息出版和發布,尤其是提供對網路信息發布的支持。為了達到此目的, PDF具有許多其他電子文檔格式無法相比的優點。PDF文件格式可以將文字、字型、格式、顏色及獨立於設備和解析度的圖形圖像等封裝在一個文件中。該格式文件還可以包含超文本鏈接、聲音和動態影像等電子信息,支持特長文件,集成度和安全可靠性都較高。 PDF文件使用了工業標準的壓縮演算法,通常比PostScript文件小,易於傳輸與儲存。它還是頁獨立的,一個PDF文件包含一個或多個「頁」,可以單獨處理各頁,特別適合多處理器系統的工作。此外,一個PDF文件還包含文件中所使用的PDF格式版本,以及文件中一些重要結構的定位信息。正是由於 PDF文件的種種優點,它逐漸成為出版業中的新寵。 對普通讀者而言,用PDF製作的電子書具有紙版書的質感和閱讀效果,可以「逼真地」展現原書的原貌,而顯示大小可任意調節,給讀者提供了個性化的閱讀方式。由於PDF文件可以不依賴操作系統的語言和字體及顯示設備,閱讀起來很方便。這些優點使讀者能很快適應電子閱讀與網上閱讀,無疑有利於計算機與網路在日常生活中的普及。Adobe公司以PDF文件技術為核心,提供了一整套電子和網路出版解決方案,其中包括用於生成和閱讀PDF文件的商業軟體Acrobat和用於編輯製作PDF文件的Illustrator等。 Adobe還提供了用於閱讀和列印亞洲文字,即中日韓文字所需的字型包。 PDF的閱讀 用Adobe公司的Arcobat Reader 7.0軟體(該軟體免費)即可閱讀PDF文件。 更多信息請訪問 Adobe 站點。www.adobe.com。 還有現在很多廠家的產品也能夠瀏覽pdf,比如windows平台下的Apabi Reader,linux平台下的kpdf等等 pdf格式是很優秀的文檔格式,我一般瀏覽都用它!
B. 如何搭建pdfbox1.80的fontbox.jar
pdfbox的ikvm版本和iTextSharp都不支持圖片的提取,如果你想要這個功能,建議使用xpdf的pdftoimage(生成的是ppm,然後再轉換成你想要的圖片格式)。
C. java讀取doc,pdf問題。
環境准備
txt利用common-io
pdf利用pdfbox
剩下的用POI
關於POI,讀取xls沒啥特別的,主要是讀取doc和ppt,
需要下載poi源代碼,然後將poi-src-3.7-20101029.zip\poi-3.7\src\scratchpad\src下的所有文件到工程,或者自己封裝個jar包
jar包依賴
code如下:
package test;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.NumberFormat;
import org.apache.commons.io.FileUtils;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.extractor.wordExtractor;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.xmlbeans.XmlException;
public class ReadFileUtils {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
ReadFileUtils rf = new ReadFileUtils();
String s = "";
// s = rf.readTXT("E:/itsm文檔的後綴名分析報告2.txt");
// s = rf.readPDF("E:/memcached全面剖析.pdf");
// s = rf.readEXCEL("E:/副本工作量及成本模板.xls");
// s = rf.readEXCEL2007("E:/功能點估算方案.xlsx");
// s = rf.readWORD("E:/pms中文.doc");
// s = rf.readWORD2007("E:/功能點估算方法.docx");
//s = rf.readPPT("E:/精細化管理信息系統項目匯報v1.0.ppt");
s = rf.readPPT2007("e:/精細化管理信息系統項目匯報v1.0.pptx");
System.out.println(s);
}
// 讀取ppt
public String readPPT(String file) throws IOException {
StringBuilder sb = new StringBuilder();
SlideShow ppt = new SlideShow(new HSLFSlideShow(file));
Slide[] slides = ppt.getSlides();
//提取文本信息
for (Slide each : slides) {
TextRun[] textRuns = each.getTextRuns();
for (int i=0 ;i< textRuns.length; i++ ) {
RichTextRun[] richTextRuns = textRuns.getRichTextRuns();
for (int j = 0; j < richTextRuns.length; j++) {
sb.append(richTextRuns[j].getText());
}
sb.append("\n");
}
sb.append("\n");
}
return sb.toString();
}
// 讀取pptx
public String readPPT2007(String file) throws IOException, XmlException, OpenXML4JException {
return new XSLFPowerPointExtractor(POIXMLDocument.openPackage(file)).getText();
}
// 讀取xls文件
public String readEXCEL(String file) throws IOException {
StringBuilder content = new StringBuilder();
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));// 創建對Excel工作簿文件的引用
for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {
if (null != workbook.getSheetAt(numSheets)) {
HSSFSheet aSheet = workbook.getSheetAt(numSheets);// 獲得一個sheet
for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet
.getLastRowNum(); rowNumOfSheet++) {
if (null != aSheet.getRow(rowNumOfSheet)) {
HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 獲得一個行
for (short cellNumOfRow = 0; cellNumOfRow <= aRow
.getLastCellNum(); cellNumOfRow++) {
if (null != aRow.getCell(cellNumOfRow)) {
HSSFCell aCell = aRow.getCell(cellNumOfRow);// 獲得列值
if (this.convertCell(aCell).length() > 0) {
content.append(this.convertCell(aCell));
}
}
content.append("\n");
}
}
}
}
}
return content.toString();
}
// 讀取xlsx文件
public String readEXCEL2007(String file) throws IOException {
StringBuilder content = new StringBuilder();
XSSFWorkbook workbook = new XSSFWorkbook(file);
for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {
if (null != workbook.getSheetAt(numSheets)) {
XSSFSheet aSheet = workbook.getSheetAt(numSheets);// 獲得一個sheet
for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet
.getLastRowNum(); rowNumOfSheet++) {
if (null != aSheet.getRow(rowNumOfSheet)) {
XSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 獲得一個行
for (short cellNumOfRow = 0; cellNumOfRow <= aRow
.getLastCellNum(); cellNumOfRow++) {
if (null != aRow.getCell(cellNumOfRow)) {
XSSFCell aCell = aRow.getCell(cellNumOfRow);// 獲得列值
if (this.convertCell(aCell).length() > 0) {
content.append(this.convertCell(aCell));
}
}
content.append("\n");
}
}
}
}
}
return content.toString();
}
private String convertCell(Cell cell) {
NumberFormat formater = NumberFormat.getInstance();
formater.setGroupingUsed(false);
String cellValue = "";
if (cell == null) {
return cellValue;
}
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
cellValue = formater.format(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
cellValue = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
cellValue = Boolean.valueOf(cell.getBooleanCellValue()).toString();
break;
case HSSFCell.CELL_TYPE_ERROR:
cellValue = String.valueOf(cell.getErrorCellValue());
break;
default:
cellValue = "";
}
return cellValue.trim();
}
// 讀取pdf文件
public String readPDF(String file) throws IOException {
String result = null;
FileInputStream is = null;
PDDocument document = null;
try {
is = new FileInputStream(file);
PDFParser parser = new PDFParser(is);
parser.parse();
document = parser.getPDDocument();
PDFTextStripper stripper = new PDFTextStripper();
result = stripper.getText(document);
} finally {
if (is != null) {
is.close();
}
if (document != null) {
document.close();
}
}
return result;
}
// 讀取doc文件
public String readWORD(String file) throws Exception {
String returnStr = "";
try {
WordExtractor wordExtractor = new WordExtractor(new FileInputStream(new File(file)));
returnStr = wordExtractor.getText();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return returnStr;
}
// 讀取docx文件
public String readWORD2007(String file) throws Exception {
return new XWPFWordExtractor(POIXMLDocument.openPackage(file)).getText();
}
// 讀取txt文件
public String readTXT(String file) throws IOException {
String encoding = ReadFileUtils.get_charset(new File(file));
if (encoding.equalsIgnoreCase("GBK")) {
return FileUtils.readFileToString(new File(file), "gbk");
} else {
return FileUtils.readFileToString(new File(file), "utf8");
}
}
private static String get_charset(File file) throws IOException {
String charset = "GBK";
byte[] first3Bytes = new byte[3];
BufferedInputStream bis = null;
try {
boolean checked = false;
bis = new BufferedInputStream(new FileInputStream(file));
bis.mark(0);
int read = bis.read(first3Bytes, 0, 3);
if (read == -1)
return charset;
if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
charset = "UTF-16LE";
checked = true;
} else if (first3Bytes[0] == (byte) 0xFE
&& first3Bytes[1] == (byte) 0xFF) {
charset = "UTF-16BE";
checked = true;
} else if (first3Bytes[0] == (byte) 0xEF
&& first3Bytes[1] == (byte) 0xBB
&& first3Bytes[2] == (byte) 0xBF) {
charset = "UTF-8";
checked = true;
}
bis.reset();
if (!checked) {
// int len = 0;
int loc = 0;
while ((read = bis.read()) != -1) {
loc++;
if (read >= 0xF0)
break;
if (0x80 <= read && read <= 0xBF) // 單獨出現BF以下的,也算是GBK
break;
if (0xC0 <= read && read <= 0xDF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) // 雙位元組 (0xC0 - 0xDF)
// (0x80
// - 0xBF),也可能在GB編碼內
continue;
else
break;
} else if (0xE0 <= read && read <= 0xEF) {// 也有可能出錯,但是幾率較小
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
charset = "UTF-8";
break;
} else
break;
} else
break;
}
}
// System.out.println( loc + " " + Integer.toHexString( read )
// );
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
bis.close();
}
}
return charset;
}
}
D. maven怎麼依賴pdfbox
所有的maven project都有一個pom.xml文件,
打開pom.xml,找到dependency tag:<dependencies></dependencies>所在的位置;
然後到 maven repository中找到你所需要的包;
進入jar包,點選相應的版本,然後頁面中就會有加入maven project的dependency,類似下面的內容:
[html] view plain
<dependency>
<groupId>org.broadleafcommerce</groupId>
<artifactId>broadleaf-framework</artifactId>
<version>3.0.12-GA</version>
</dependency>
將這個語句片拷下來,放到你的project中的pom.xml文件的<dependencies></dependencies>中。
保存pom.xml文件,project就會自動build,將所需要的jar包導入到項目中,在Maven Dependencies目錄下。
E. c#讀取pdf文件裡面數據!!
你可以試一下 Grapecity Documents For PDF。這是一款.NET PDF 文檔API,適用於所有 .NET Standard 2.0 及以上標準的平台,以編碼的方式,無需 Adobe Acrobat 組件 ,超快批量處理 PDF 文件,滿足關於 PDF 文檔的一切需求。網頁鏈接
這里是Grapecity Documents For PDF 的使用指南,裡面有關於載入、分析、修改現有 PDF 文檔的具體方法網頁鏈接
Grapecity Documents For PDF 最大的特色總結如下:
產品架構靈活、輕量
輕量級產品架構可節省系統處理 PDF 時佔用的內存和時間。與同類產品相比,GrapeCity Documents for PDF 可用於生成更高質量的 PDF 文檔。
完全兼容 Adobe PDF
GrapeCity Documents for PDF 符合 Adobe PDF 1.7 規范,可在不影響 PDF 文檔功能和設計的情況下,完成創建、編輯、存儲、合並、拆分等多種功能。
全文本支持
GrapeCity Documents for PDF 支持 PDF 文檔的所有文本和段落格式,同時還支持特殊字元、多種語言(包括中文)、RTL 格式、垂直拆分和旋轉文本。
100 種以上的 PDF 功能
使用 GrapeCity Documents for PDF,您可以隨意添加、刪除、拷貝、移動、保護、更改頁面大小、方向、轉換為線性化 PDF 以及壓縮 PDF 文件。
全面支持 .NET 平台
GrapeCity Documents for PDF 支持所有 .NET 平台,並允許您在應用程序中與 .NET Core 2.0 +、.NET Framework、Mono、Xamarin.iOS 和 Xamarin.Android 一起使用。
將應用程序部署到雲端
GrapeCity Documents 可用於雲應用程序開發,使用 NuGet 和 GrapeCity Documents for PDF,您可直接部署到網路雲、阿里雲、騰訊雲、Azure 和 AWS 中。
簡單來說,使用 GrapeCity Documents for PDF 可以輕松實現:
可生成線性化 PDF 文檔,通過 Internet 更快地進行查看
用代碼生成、載入、編輯、合並/拆分大型 PDF 文檔
支持多種語言(如中文)、特殊字元以及 RTL 格式
支持 100 種以上的 PDF 功能
其他核心功能網頁鏈接
F. java中讀取Pdf格式文件出現錯誤
缺包吧? 找不到類呀
G. 如何建立PDFBox的對於.NET
用VS2010建立空白解決方案 三層結構,會有多個項目。為了讓各項目之間的關系反映在目錄結構上所以要建立一個解決方案。 1.建立解決方案: 文件->新建項目->其它項目類型->Visual Studio解決方案->空白解決方案。
H. 資料庫及pdf文件輸出
【C++庫】
PDF類庫 PoDoFo
http://podofo.sourceforge.net/
PoDoFo 是一個用來操作 PDF 文件格式的 C++ 類庫。它還包含一些小工具用來解析、修改和創建 PDF 文檔。
Xpdf
http://www.foolabs.com/xpdf/download.html
Xpdf是一個開放源代碼的PDF檔案瀏覽器,Xpdf 可解碼LZW壓縮格式並閱讀加密的PDF文件。
PDF生成工具 Poppler
http://poppler.freedesktop.org/
Poppler 是一個用來生成 PDF 的C++類庫,從xpdf 繼承而來。它使用了很多先進的類庫例如 freetype 和 cairois 來達到更好的輸出效果,同時也提供了一組命令行工具包。
JagPDF
http://www.jagpdf.com/
JagPDF 提供給 C/C++ 和 Python 編程語言用來生成 PDF 文檔的庫。
libHaru
http://libharu.org/wiki/Downloads
開源的PDF庫
CLibPDF
http://hpux.connect.org.uk/hppd/hpux/Shells/ClibPDF-2.02/
ClibPDF是C函數庫,可以直接生成PDF文件, 不需要Adobe Acrobat等工具支持.
------------------------------------------------------------------------
【JAVA庫】
PDF操作類庫 iText
http://www.lowagie.com/iText/
iText是一個能夠快速產生PDF文件的java類庫。iText的java類對於那些要產生包含文本,表格,圖形的只讀文檔是很有用的。它的類庫尤其與java Servlet有很好的給合。使用iText與PDF能夠使你正確的控制Servlet的輸出。
PDFBox
http://www.pdfbox.org/
非常強悍的PDF生成和解析Java類庫
jpedal
http://www.jpedal.org/
jpedal是開源純Java的PDF文檔解析庫,可以用來讀取PDF文檔中的文字、圖形。
JasperReports
http://jasperforge.org/plugins/project/project_home.php?group_id=102
JasperReports是一個基於Java的開源報表工具,它可以在Java環境下像其它IDE報表工具一樣來製作報表。JasperReports 支持PDF、HTML、XLS、CSV和XML文件輸出格式。JasperReports是當前Java開發者最常用的報表工具。
Fourfive
http://sourceforge.net/projects/fourfive
Fourfive是一個領先的開源Web報表解決方案,使用XML作為它的配置文件。支持集群、負載平衡、動態發布、PDF, Excel, LDAP,圖表、過濾器、排序、布局定製、門戶、JasperReports、Velocity模板、兼容Internet Explorer, Netscape, Mozilla, Opera。
FOP
http://xmlgraphics.apache.org/fop/
FOP是由James Tauber發起的一個開源項目,原先的版本是利用xsl-fo將xml文件轉換成pdf文件。但最新的版本它可以將xml文件轉換成pdf,mif,pcl,txt等多種格式以及直接輸出到列印機,並且支持使用SVG描述圖形。
JFreeReport
http://sourceforge.net/projects/jfreereport/
JFreeReport是一個用來生成報表的Java類庫。它為Java應用程序提供一個靈活的列印功能並支持輸出到列印機和PDF, Excel, HTML和XHTML, PlainText, XML和CSV文件中。
YaHP
http://www.allcolor.org/YaHPConverter/
YaHP是一個能夠把html文檔轉換成pdf文檔的Java開源包。
PDFjet
http://pdfjet.com/os/edition.html
PDFjet是一個用於動態生成PDF文檔的Java類庫。支持繪制點、線、方框、圓、貝塞爾曲線(Bezier Curves) 、多邊形、星形、復雜路徑和形狀。支持unicode,文本間距調整,嵌入超鏈接等。它同時有Java和.NET兩個版本。
vPDF
http://sourceforge.net/projects/vpdf/
一個將RTF文檔轉成PDF文檔的工具
【.NET組件】
--------------------------------------------------
iTextSharp
http://itextsharp.sourceforge.net/
iTextSharp 是用來生成 PDF 文檔的 C# 組件
PDFsharp
http://www.pdfsharp.com/
PDFsharp is a C# library that easily creates PDF documents on the fly. The same GDI+ like drawing routines can be used to create PDF documents, draw on the screen, or send output to any printer. PDFsharp can also modify, merge, and split existing PDF files or incorporate pages from existing PDF files into new PDF documents.
Report.NET
http://report.sourceforge.net/
Report.NET 是一個功能強大且易用的用來生成 PDF 文檔的 C# 組件
---------------------------------------------------------------------
【PHP】
Php Pdf Factory
http://sourceforge.net/projects/pdf-factory/
一個PHP的PDF操作庫。
TCPDF
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf
TCPDF是一個用於快速生成PDF文件的PHP5函數包。TCPDF基於FPDF進行擴展和改進。支持UTF-8,Unicode,HTML和XHTML。
HTML2PDF
http://html2fpdf.sourceforge.net/
HTML2PDF能夠把一個HTML文本轉換成一個列印機友好的PDF文件。這個PHP腳本構建在FPDFPHP腳本之上。
cPdfWriter
http://www.palos.ro/index.php?page=opensource_active
cPdfWriter是一個能夠輸出PDF文檔的PHP5 class。基於TCPDF,FPDF和其它相關腳本。
FPDF
http://www.fpdf.org/
FPDF這個PHP Class允許你採用純PHP(更確切地說就是不需要使用PDFlib)來生成PDF文件。它所具有的特點包括:可選擇的unit大小,頁面格式和頁邊 距;頁眉和頁腳管理;自動分頁;自動換行與文本自動對齊;支持JPEG與PNG圖片格式;支持著色和文件超鏈接;支持TrueType,Type1與 encoding;支持頁面壓縮。...
------------------------------------------------------------------------
【Python和Ruby】
Prawn
http://prawn.majesticseacreature.com/
Prawn: 用Ruby生成PDF更簡捷
ReportLab
http://www.reportlab.org/
Reportlab是用python開發的生成pdf的工具包,它是一個開源軟體。
PDF生成工具 pyPdf
PyPDF這是一個用於構建PDF的純Python工具包