我正在使用最新的PDFBOX库来提取文本,为了做到这一点,我编写了我的自定义PDFStreamEngine(shwoing部分代码,但其余应该类似):
else if ("Tf".equals(operation) && parsingTextObject) {
if (operands.size() < 2) {
throw new MissingOperandException(operator, operands);
}
COSBase base0 = operands.get(0);
COSBase base1 = operands.get(1);
if (!(base0 instanceof COSName)) {
return;
}
if (!(base1 instanceof COSNumber)) {
return;
}
COSName fontName = (COSName) base0;
float fontSize = ((COSNumber) base1).floatValue();
getGraphicsState().getTextState().setFontSize(fontSize);
PDFont font = getResources().getFont(fontName);
getGraphicsState().getTextState().setFont(font);
}
然而,我有三个问题:第一个:“Tf”操作符-在PDF/F1中1 Tf:当我显示fontName和size时,它显示:evmanj+myriadpro-regular,size 1;但是,illustrator和adobe Acrobat上的实际字体名称是:Myriad Pro,大小8 pt
第三个问题:如何妥善处理TJ运营商?
附注:我可以私下提供pdf。
这个问题的答案并不直接,我必须扩展showFontGlyph
protected void showFontGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode, Vector displacement) throws IOException {
..do you logic here}
为了找到旋转,我不得不将PDFBox1.8中的代码复制粘贴到我的类中
/**
* Return the direction/orientation of the string in this object based on
* its text matrix.
*
* @return The direction of the text (0, 90, 180, or 270)
*/
public int getDir() {
int direction = -1;
if (direction < 0) {
float a = getTextMatrix().getScaleY();
float b = getTextMatrix().getShearY();
float c = getTextMatrix().getShearX();
float d = getTextMatrix().getScaleX();
// 12 0 left to right
// 0 12
if (a > 0 && Math.abs(b) < d && Math.abs(c) < a && d > 0) {
direction = 0;
}
// -12 0 right to left (upside down)
// 0 -12
else if (a < 0 && Math.abs(b) < Math.abs(d) && Math.abs(c) < Math.abs(a) && d < 0) {
direction = 180;
}
// 0 12 up
// -12 0
else if (Math.abs(a) < Math.abs(c) && b > 0 && c < 0 && Math.abs(d) < b) {
direction = 90;
}
// 0 -12 down
// 12 0
else if (Math.abs(a) < c && b < 0 && c > 0 && Math.abs(d) < Math.abs(b)) {
direction = 270;
} else {
direction = 0;
}
}
return direction;
}
并且在处理流时检测到TJ运算符时调用getDir函数。
我试图从pdf文件中获得特定文本或行的字体大小或格式(粗体等),但没有任何成功到现在。 使用下面的PDFTextStripper只能得到纯文本 PDFTextStripper tripper=新的PDFTextStripper();String actualText=stripper.gettext(actualDoc); 你能帮我做这个吗?谢了。
这是我的代码。 当它读到。docx文件它有时会返回-1的字体大小和null的字体系列。 我知道这是因为它们是默认值,但我不想要-1和null,我只想要那个默认值的名称。 我怎么读呢?
问题内容: 我正在使用pdfbox库从pdf文件中提取文本内容。我可以提取所有文本,但找不到提取字体样式的方法。 问题答案: 这不是提取字体的正确方法。要读取字体,必须遍历pdf页面并提取字体,如下所示:
问题内容: 我正在使用Apache pdfbox提取文本。我可以从pdf中提取文本,但我不知道该单词是否为粗体?(代码建议会很好!!!)这是从pdf提取纯文本的代码,可以正常工作。 问题答案: 的结果是纯文本。因此,将其提取后为时已晚。但是,您可以覆盖某些方法,只允许根据您的意愿格式化的文本通过。 在这种情况下,您必须覆盖 在您的替代中,您检查所讨论的文本是否满足您的要求(包含有关所讨论文本的很多
我正试图从一组PDF文件中提取一些信息。这是目前为止的工作,但一个PDF给我的委屈。 我使用的是PDFBOX1.8.8和Java7。 我没有例外,什么都没有。有什么想法吗? 编辑:附加信息:使用Acrobat Distiller 9.0.0(Windows)创建,格式为PDF-1.6;其他PDF是版本1.4和1.5 似乎并不包含异国情调的角色。我可以在Evince PDF-viewer中标记/复制
我正在编写一个应用程序,它使用PDFbox库来填充PDF文件中的字段。 在其中一个字段中,我将文本设置为希伯来字母。 当我在Android设备上运行代码时,我会得到以下日志: 我试图在堆栈溢出中找到一些关于它的信息,但我找到的答案都与填充表单有关。它都与有关。 你能帮我解决这个错误并用PDFBox在表格中填写希伯来字母吗?