在使用字体之前,在创建新内容流之后添加页面资源的getFonts调用:
PDPage page = (PDPage)allPages.get( i );
PDRectangle pageSize = page.findMediaBox();
PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, true,true);
page.getResources().getFonts(); // <<<<<<<<
PDFont font = PDType1Font.TIMES_ROMAN;
float fontSize = 15.0f;
contentStream.beginText();
错误本身:
错误在PDResources.addFont方法中,该方法是从PDPageContentStream.setFont调用的:
public String addFont(PDFont font)
return addFont(font, MapUtil.getNextUniqueKey( fonts, "F" ));
它使用fonts成员变量的当前内容来确定手头页面上新字体资源的唯一名称.不幸的是,此成员变量在此时仍然可以(并且在您的情况下)未初始化.这导致MapUtil.getNextUniqueKey(字体,“F”)调用始终返回F0.
然后在稍后的addFont(PDFont,String)调用期间隐式初始化font变量.
因此,如果遗憾的是,该页面上已存在名为F0的字体,则它将替换为新字体.
经过您的PDF测试,这正是您的案例中发生的事情.由于现有字体F0使用一些自定义编码,而替换字体使用标准字体,因此最初使用F0编写的文本现在看起来像乱码.
上面提到的解决方法隐式初始化了该成员变量,因此阻止了字体替换.
如果您计划在生产中使用PDFBox执行此任务,则可能需要报告该错误.
PS:正如上面的评论中所提到的,在继承资源的上下文中还有另一个要观察的错误.它也应该引起PDFBox开发的关注.
PPS:手头的问题已经在PDFBox中针对版本1.8.3和2.0.0进行了修复,参见PDFBOX-1753.
基本上,您在当前版本1.8.2中遇到了PDFBox错误.解决方法:在使用字体之前,在创建新内容流之后添加页面资源的getFonts调用:PDPage page = (PDPage)allPages.get( i );PDRectangle pageSize = page.findMediaBox();PDPageContentStream contentStream = new PDPageCon...
pdf
标题
命令行工具
pdf
title是
pdf
title Xtract [1]论文的Python实现,主要
使用
结构布局分析。
到目前为止,Docear已经发布了开源工具 ,该工具的功能与该脚本大致相同。 不同之处在于:
用
Java
编写
用途
PDF
盒jPod代替
pdf
tohtml
Simplier启发式
[1] Joeran Beel,Bela Gipp,Ammar Shaker和Nick Friedrich 。 。 在M. Lalmas中,J。Jose,A。Rauber,F。Sebastiani和I. Frommholz,数字图书馆研究与先进技术编辑,第14届欧洲数字图书馆会议论文集(ECDL-10),第6273卷,施普林格,计算机科学讲义(LNCS),第413-416页,格拉斯哥(英国),2010年9月。
PDF
文章的
标题
通常在
文件
名中,但通常不在
文件
名中。 接下来是检查PD
可移植文档格式 (
PDF
) 是一种
文件
格式,有助于以独立于应用程序软件、硬件和操作系统的方式呈现数据。
每个
PDF
文件
都包含对固定布局平面文档的描述,包括文本、字体、图形和显示它所需的其他信息。
有几个库可用于通过程序创建和操作
PDF
文档,例如 -
Adobe
PDF
Library- 该库以 C++、.NET 和
Java
等语言提供 API,
使用
它我们可以编辑、查看打印和从
PDF
文档中
提取
文本。
Formatting Objects Proce.
之前想学习
使用
Java
操作
pdf
的时候看过了IText的文档。确实IText的文档很全,也有一个官网可以很方便的查找信息。但IText的开源协议为AGPL,
使用
者必须传染性的开源代码,商业
使用
必须付费获取商业许可。所以有一些风险。所以转而来学习
使用
PDFBOX
。现在
pdfbox
的文档并不是很多,列出如下链接以做参考。
https://iowiki.com/
pdfbox
/
pdfbox
_quick_guide.html
一.加载已有的
pdf
文件
注意:
PDFBOX
依赖commons-logging,f
要用
Java
读取
PDF
文件
,可以
使用
Apache
PDFBox
库。
PDFBox
是一个开源的
Java
库,可以用于创建、操作和
提取
PDF
文件
中的文本和图像等。
以下是读取
PDF
文件
的示例代码:
```
java
import
java
.io.File;
import
java
.io.IOException;
import org.apache.
pdfbox
.pdmodel.PDDocument;
import org.apache.
pdfbox
.text.
PDF
TextStripper;
public class Read
PDF
File {
public static void main(String[] args) {
try {
// 读取
PDF
文件
PDDocument document = PDDocument.load(new File("example.
pdf
"));
// 获取
PDF
文件
的内容
PDF
TextStripper
pdf
Stripper = new
PDF
TextStripper();
String text =
pdf
Stripper.getText(document);
// 输出
PDF
文件
的内容
System.out.println(text);
// 关闭
PDF
文件
document.close();
} catch (IOException e) {
e.printStackTrace();
运行该程序后,将输出
PDF
文件
的内容。