//main function for setting inner content to appearance value
public void changeAnnotationContentToAppearance(PdfDictionary dict)
{
string surface = pdfTextParser.retrieveText(dict);
if (surface != null)
{
//update CONTENTS with appearance
//for changing line width, I would instead modify the /BS dictionary's /W key value, i think
dict.Put(PdfName.CONTENTS, new PdfString(surface));
}
}
//get text from /AP dictionary
public string retrieveText(PdfDictionary annotDictionary)
{
PdfDictionary appearancesDictionary = annotDictionary.GetAsDict(PdfName.AP);
foreach (PdfName key in appearancesDictionary.Keys)
{
PdfStream value = appearancesDictionary.GetAsStream(key);
if (value != null)
{
String text = ExtractAnnotationText(value);
return text;
}
}
return null;
}
//read the appearance stream and extract text contents
public String ExtractAnnotationText(PdfStream xObject)
{
PdfDictionary resources = xObject.GetAsDict(PdfName.RESOURCES);
ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
PdfContentStreamProcessor processor = new PdfContentStreamProcessor(strategy);
processor.ProcessContent(ContentByteUtils.GetContentBytesFromContentObject(xObject), resources);
return strategy.GetResultantText();
}
如果我读对了,这个问题,这个问题,这个问题表明我需要实现一个类,但我不确定我应该用哪个子类来获取行数据,或者我应该如何去做。
编辑:我还想获得定义文本框中矩形的点的外观数据。尽管这可能是一个不同的问题,但它似乎与这个问题密切相关:检索定义注释外观流的非文本图形数据。
您需要PathRenderInfo
对象来获取有关线条和形状的信息。在iText7中引入了PathRenderInfo
对象。这是我很快写的概念证明:
public static void main(String args[]) throws IOException {
PdfDocument document = new PdfDocument(new PdfReader(SRC));
PdfPage page = document.getPage(1);
PdfCanvasProcessor processor = new PdfCanvasProcessor(new IEventListener() {
public void eventOccurred(IEventData data, EventType type) {
if (type == EventType.RENDER_PATH) {
PathRenderInfo renderinfo = (PathRenderInfo) data;
int i = renderinfo.getOperation();
switch (i) {
case 1:
System.out.print("Stroke: ");
break;
case 2:
System.out.print("Fill: ");
break;
default:
System.out.print("No: ");
}
for (Subpath p : renderinfo.getPath().getSubpaths()) {
for (IShape shape : p.getSegments()) {
for (Point point : shape.getBasePoints()) {
System.out.println(String.format("x = %s; y = %s", point.getX(), point.getY()));
}
}
}
}
}
public Set<EventType> getSupportedEvents() {
return null;
}
});
processor.processPageContent(page);
}
我在一个有很多行的PDF上运行它,这是输出的一部分:
Stroke: x = -406.0; y = -240.0
x = 406.0; y = -240.0
x = -406.0; y = -200.0
x = 406.0; y = -200.0
x = -406.0; y = -160.0
x = 406.0; y = -160.0
x = -406.0; y = -120.0
x = 406.0; y = -120.0
x = -406.0; y = -80.0
x = 406.0; y = -80.0
x = -406.0; y = -40.0
x = 406.0; y = -40.0
x = -406.0; y = 0.0
x = 406.0; y = 0.0
x = -406.0; y = 40.0
x = 406.0; y = 40.0
x = -406.0; y = 80.0
您必须升级到iText7才能完成这项工作,还必须了解PathRenderInfo
、Subpath
和ISHAPE
对象中包含哪些信息。
外观是由查看器根据以下值创建的:
/c
:颜色:红色=0,绿色=0,蓝色=1(因此行是蓝色)/le
:行尾(在本例中为菱形)L
:(x=20,y=790)和(x=575,y=790)如果在注释字典中手头有所有必要的信息,为什么还要解析外观?
//获取和设置 以下是我给用户的POJO:
嗨,我想使用comment将属性和函数分开。 如何在代码中注释像绿线一样实现?
问题内容: 如何在React组件的方法内部使用注释? 我有以下组成部分: 我的评论显示在用户界面中。 在组件的渲染方法中应用单行和多行注释的正确方法是什么? 问题答案: 因此,在方法内允许使用注释,但为了在JSX中使用它们,必须将它们用大括号括起来并使用多行样式的注释。 您可以在此处阅读有关注释如何在JSX中工作的更多信息
我正在尝试使用Hibernate注释为我的数据库表编写一个模型类。 我有两个表,每个表都有一个主键用户和问题。 问题桌。 并且我还有一个表UserAnswer,它有userId和questionId作为来自上面两个表的外键。 但我无法找到如何在UserAnswer表中引用这些约束。 我怎样才能做到这一点呢?
问题内容: 在Python中,我刚刚阅读了一个文本文件中的一行,并且我想知道如何编写代码以忽略该行开头带有#的注释。 我认为应该是这样的: 但是我是Python的新手,我不知道语法 问题答案: 您可以使用startswith() 例如
是否可以使用反射读取注释元素的值?我想使用元素名称的字符串来访问元素的值。这可能吗? 注释: 示例用法: 我目前使用开关提取元素的值: 我想做这样的事情: 我尝试了: 我得到了一个NoSuchFieldException: 我试过这些,看看能不能买到什么: 但是当我遍历并执行System.out.println()时,看起来唯一有用的是getDeclaredMethod()的输出: