java文件流读取pdf文件读到一半返回-1

Python032

java文件流读取pdf文件读到一半返回-1,第1张

题主问的是java文件流读取pdf文件读到一半返回-1是什么意思?达到了流的结尾。

返回-1是到达的意思,java文件流读取pdf文件读到一半返回-1意味着已经达到了流的结尾,因此在该流中没有更多内容可以阅读,需要重新打开。

java是一种计算机编程语言,拥有跨平台,面向对象,泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发,任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言。

你需要用到PDFbox api

https://pdfbox.apache.org/1.8/cookbook/textextraction.html

例子如下

import java.io.File 

import 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)