0

按照给定的示例pdfClown,既可以突出显示特定文本,也可以在相应单词周围绘制一个矩形。

之后有没有可能使这个反应角度可以编辑Adobe Acrobat

我目前的工作流程(按计划):

  1. 导入文档
  2. 搜索突出显示的文档
  3. 确定突出显示的颜色
  4. 围绕矩形的外边界绘制一个矩形
  5. 根据确定的颜色,将标注添加到另一个包含字母的矩形

Acrobat Reader据我所知,我不能(例如)用 . 拖动以前突出显示的单词周围的矩形。我使用 pdfClown 网页中提供的示例在每个字符周围绘制了一个反应角。

有什么我忘记考虑的吗?

File inFile = null;
String inFilePath = "/path/to/inputFile/input_highlight.pdf";
String outDirPath = "/tmp";

try {
    inFile = new File(inFilePath);
} catch (Exception e) {
    throw new RuntimeException(inFilePath + " file access error.", e);
}

Document document = inFile.getDocument();

Pages pages = document.getPages();

PageStamper stamper = new PageStamper();
    for (Page page : pages) {

    stamper.setPage(page);

    PageAnnotations annotations = page.getAnnotations();

    for (Annotation annotation : annotations) {

        if (annotation.getColor() == null) {

            continue;

        }

        Rectangle2D textStringBox = annotation.getBox();

        PrimitiveComposer composer = stamper.getBackground();
        composer.setStrokeColor(DeviceRGBColor.Black);
        textStringBox.setRect(annotation.getBox().getX(), annotation.getBox().getY(), annotation.getBox().getWidth(), annotation.getBox().getHeight());
        composer.drawRectangle(textStringBox);
        composer.stroke();

        composer.beginLocalState();
        composer.setStrokeColor(DeviceRGBColor.Black);
        composer.end();

        stamper.flush();

        System.out.println("Text: " + annotation.getText());
        System.out.println("Color: " + annotation.getColor());
        System.out.println("Coordinates: " + annotation.getBox().toString());

        annotation.setColor(DeviceRGBColor.White);

    }

}
4

1 回答 1

0

看来你的主要问题是

我不能(例如)使用 Acrobat Reader 拖动以前突出显示的单词周围的矩形

原因是您在页面内容中绘制了矩形(PageStamper您使用的内容被记录为Tool for content insert into existing pages)。页面内容是固定的,特别是就 Acrobat Reader 而言;Acrobat Reader 仅允许您移动注释。

如果你想要一个矩形,你可以拖动,因此,你必须使用矩形注释。可以像这样创建矩形注释:

new org.pdfclown.documents.interaction.annotations.Rectangle(
  page,
  new Rectangle(50, 370, 100, 30),
  "Text of the Rectangle annotation"
  ).withColor(DeviceRGBColor.get(Color.RED))
   .withBorder(new Border(1, new LineDash(new double[]{5})))
   .withAuthor("Stefano")
   .withSubject("Rectangle")
   .withPopup(new Popup(
     page,
     new Rectangle2D.Double(200, 325, 200, 75),
     "Text of the Popup annotation (this text won't be visible as associating popups to markup annotations overrides the former's properties with the latter's)"
     ));

( AnnotationSample.java )

您还提到要添加标注;可以像这样创建标注注释:

new StaticNote(
  page,
  new Rectangle(250, 90, 150, 70),
  "Text of the Callout note annotation"
  ).withLine(
     new StaticNote.CalloutLine(
       page,
       new Point(250,125),
       new Point(150,125),
       new Point(100,100)
       )
     )
   .withLineEndStyle(LineEndStyleEnum.OpenArrow)
   .withBorder(new Border(1))
   .withColor(DeviceRGBColor.get(Color.YELLOW));

( AnnotationSample.java )

于 2016-02-10T08:45:48.397 回答