返回-1是到达的意思,java文件流读取pdf文件读到一半返回-1意味着已经达到了流的结尾,因此在该流中没有更多内容可以阅读,需要重新打开。
java是一种计算机编程语言,拥有跨平台,面向对象,泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发,任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言。
你需要用到PDFbox api
https://pdfbox.apache.org/1.8/cookbook/textextraction.html
例子如下
import java.io.Fileimport java.io.IOException
import org.apache.pdfbox.pdmodel.PDDocument
import org.apache.pdfbox.text.PDFTextStripper
import org.apache.pdfbox.text.PDFTextStripperByArea
try {
PDDocument document = null
document = PDDocument.load(new File("test.pdf"))
document.getClass()
if (!document.isEncrypted()) {
PDFTextStripperByArea stripper = new PDFTextStripperByArea()
stripper.setSortByPosition(true)
PDFTextStripper Tstripper = new PDFTextStripper()
String st = Tstripper.getText(document)
System.out.println("Text:" + st)
}
} catch (Exception e) {
e.printStackTrace()
}
直接使用系统字体读取或创建带中文的pdf,需要注意jar的版本。<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.8</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.6</version>
</dependency>123456789101112131415
代码如下,覆写XMLWorkerFontProvider$getFont即可读取中文
public void createPdf(String src, String dest) throws IOException, DocumentException {
Document document = new Document()
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest))
document.open()
XMLWorkerHelper.getInstance().parseXHtml(writer, document, new FileInputStream(src), null, new XMLWorkerFontProvider(){public Font getFont(final String fontname, final String encoding,
final boolean embedded, final float size, final int style,
final BaseColor color) {
BaseFont bf = null
try {
bf = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED)
} catch (Exception e) {
e.printStackTrace()
}
Font font = new Font(bf, size, style, color)
font.setColor(color)
return font
}
})
document.close()
}1234567891011121314151617181920212223
创建时,使用系统(windows下)的字体即可
BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED)
Font font = new Font(baseFont)