- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 PDFClown-0.2.0 进行拼合 this pdf 文件。这是我的代码:
import org.pdfclown.documents.Document;
import org.pdfclown.files.File;
import org.pdfclown.files.SerializationModeEnum;
import org.pdfclown.tools.FormFlattener;
public class Sample {
public static void main(String args[]){
try {
File f = new File("label.pdf");
Document doc = f.getDocument();
FormFlattener formFlattener = new FormFlattener();
formFlattener.flatten(doc);
f.save(SerializationModeEnum.Standard);
} catch (Exception e) {
e.printStackTrace();
}
}
}
我正在按照 http://pdfclown.org/2014/09/12/waiting-for-pdf-clown-0-2-0-release/#FormFlattening 提供的说明进行操作。但是,当我运行代码时,出现以下错误:
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at org.pdfclown.objects.PdfArray.get(PdfArray.java:314)
at org.pdfclown.documents.interaction.forms.FieldWidgets.get(FieldWidgets.java:135)
at org.pdfclown.documents.interaction.forms.FieldWidgets$1.next(FieldWidgets.java:380)
at org.pdfclown.documents.interaction.forms.FieldWidgets$1.next(FieldWidgets.java:1)
at org.pdfclown.tools.FormFlattener.flatten(FormFlattener.java:74)
at com.narvar.webservices.returns.retailers.Sample.main(Sample.java:18)
我做错了什么?请注意,pdf 是使用 PDFBox 生成的,并且我已将表单字段设置为只读。
最佳答案
调试代码后,它看起来像一个 PdfClown bug:
Iterator
返回者 org.pdfclown.documents.interaction.forms.FieldWidgets.iterator()
无法识别下面的小部件集合已更改(变小),因此尝试读取超出其大小的内容。
org.pdfclown.tools.FormFlattener.flatten(Document)
迭代字段的小部件:
for(Widget widget : field.getWidgets())
但在此循环内,它会从当前字段的 Kids 中删除当前小部件:
// Removing the field references relating the widget...
PdfDictionary fieldPartDictionary = widget.getBaseDataObject();
while (fieldPartDictionary != null)
{
[...]
kidsArray.remove(fieldPartDictionary.getReference());
[...]
}
因此,外部 for
所覆盖的集合迭代更改。不幸的是Iterator
这里使用的是不知道基础集合的变化
return new Iterator<Widget>()
{
/** Index of the next item. */
private int index = 0;
/** Collection size. */
private final int size = size();
@Override
public boolean hasNext( )
{return (index < size);}
@Override
public Widget next( )
{
if(!hasNext()) throw new NoSuchElementException();
return get(index++);
}
@Override
public void remove( )
{throw new UnsupportedOperationException();}
};
正如你所见,它不仅不知道也不检查自己的基本集合,它甚至对集合大小有自己的想法,即 Iterator
处集合的大小。发电设置在size
.
这样的Iterator
对于不变的集合来说,实现是可以的,可以通过架构或契约(Contract)强制执行。但在这里的情况下,我看不到两者,该体系结构显然允许集合更改,并且没有任何迹象表明所讨论的迭代器可能仅用于稳定的基础集合。
这个问题应该得到解决。
可以通过更改FormFlattener.flatten
来尝试解决方案检索小部件的本地副本并迭代此副本,例如通过替换
for(Widget widget : field.getWidgets())
与
List<Widget> widgets = new ArrayList<Widget>(field.getWidgets());
for(Widget widget : widgets)
关于java - 使用 PDFClown 展平表单会引发 IndexOutOfBounds 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31952089/
使用 PdfClown 打印 pdf 时,打印超出页面,而 PdfClown 没有创建新页面,如何解决此问题? 代码如下,它将文本打印到 pdf 页面上,当打印开始超出页面底部时,应自动添加另一个 p
我正在使用 PDFClown 来分析 PDF 文档。在许多文档中,PDFClown 中的某些字符似乎具有不同的高度,即使它们显然具有相同的高度。有解决办法吗? 这是代码: while(_lev
我是第一次尝试使用 PDFClown。正如自述文件中所写,我尝试通过以下步骤导入 PDFClown 项目在我的 Java 工作区 Eclipse IDE 中1) 文件 => 导入... => 将现有项
我在使用 PdfClown 0.1.2 进行文本编写时遇到了一些奇怪的情况。 PrimitiveComposer composer = new PrimitiveComposer(page);
我正在尝试在某个 x,y 位置贴一张便签。为此,我使用 .net 中的 pdfclown 注释类。以下是可用的内容。 using files = org.pdfclown.files;
我最近将代码从 PDFClown v0.1.2 切换到 v0.1.2.1。我认为我现在已经遇到了一些差异(更改了 TextMarkup() 的构造函数并从 CallOutNote 切换到 Static
几周前我开始使用 PDFClown。我的目的是多字突出显示,主要是在报纸上。从 org.pdfclown.samples.cli.TextHighlightSample 示例开始,我成功提取了多单词位
引用Build text callout with PDF Clown - 是否可以更改标注注释中文本的字体颜色? 我还没有找到合适的方法,有人可以给我提示吗? 最佳答案 没有明确的 PDF Clow
我正在使用 PDFClown-0.2.0 进行拼合 this pdf 文件。这是我的代码: import org.pdfclown.documents.Document; import org.pdf
我正在与 PDFClown 合作来分析和使用 PDFDocuments。我的目标是突出显示表格中的所有数字。对于属于在一起的所有数字(例如:表格一列中的所有数字),我将创建一个带有四边形列表的 Tex
我真的很喜欢 c# 中的 pdfclown,但我想从 byte[] 数组或文件流中打开 pdf。我还没有找到 pdfclown 的任何例子。谁能帮忙? 一个例子是这样的: 使用 (org.pdfclo
我正在尝试运行 Stefano Chizzolini(很棒的人:PDFClown 的创建者)编写的 Java 代码,以使用 PDF Clown 库解析 PDF。我收到此错误,但我不知道该如何解决。 E
我是一名优秀的程序员,十分优秀!