【问题标题】:PDF Annotations using JAVA使用 JAVA 的 PDF 注释
【发布时间】:2015-06-30 03:17:29
【问题描述】:

我一直在尝试使用 iText API 和较旧的 Lowagie 版本向现有 PDF 添加注释。但是,我需要 API 的替代品,因为它似乎无法满足我们的要求。

要求是将注释放入现有 PDF 中,并包含以下详细信息:

  • 类型:纯文本
  • 位置:x=0mm && y=0mm
  • 字体:Arial
  • 文字颜色:白色
  • 文本内容:“一些文本”

使用 iText,我可以添加注释,但我需要以像素为单位近似应该在我的 A4 尺寸页面中放置它的位置。最接近的近似值是使用

    PdfReader reader = new PdfReader(headerFilePath.concat(xmlFileName));
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(headerFilePath.concat(xmlFileNameNew)));
    PdfAnnotation annotation = PdfAnnotation.createText(stamper.getWriter(), new Rectangle(0, 842, 5, 842), "some text", "some text", true, null);
    annotation.setColor(Color.WHITE);
    stamper.addAnnotation(annotation, 1);
    reader.close();
    stamper.close();

这个 sn-p 把它放在左上角,但我不确定它是不是 0mm,0mm。它也是黑色的,我无法指定字体。

非常感谢您对此事的任何帮助。谢谢!

【问题讨论】:

    标签: java pdf itext


    【解决方案1】:

    您可以尝试here 所述的富文本注释:

    annotation.put(PdfName.RC, new PdfString( "<font size=\"whatever\">" + 
                                          some text+ 
                                          "</font>" ) );
    myStamper.setGenerateAppearances( false );
    

    但是我怀疑这是否是您所需要的。如果您添加外观,那么您会在左上角看到一个矩形图标。如果然后将鼠标悬停在它上面,您可以以弹出窗口的形式阅读注释。即使你得到注释文本的白色字体颜色,你也无法隐藏注释本身的矩形图标......

    你想要一个白色的字体颜色,这表明你想要“传输”一些隐藏的(白色背景上的白色)信息。也许在这种情况下,您可以使用以下机制(通常用于添加水印等):

    String text;
    int pageNumber
    
    PdfContentByte overContent = stamper.getOverContent(pageNumber);
    
    overContent.beginText();
    overContent.setFontAndSize(yourFont, yourFontSize);
    //overContent.setGrayFill(...);
    overContent.showTextAligned(PdfContentByte.ALIGN_CENTER, yourText + " Center", 150, 760, 0);
    overContent.endText();
    

    更新:要将注释设置为不可见,请添加到您的代码中:

    annotation.setColor(Color.WHITE);
    //set visibility to 0 (invisble). All values between 0...1 are possible
    //so 0.5 means 50% opacity
    annotation.put(PdfName.CA, new PdfNumber(0));
    

    【讨论】:

    • 是的。该公司坚持使用 Arial 作为字体,因为它是系统识别的字体。你知道如何放置不可见的注解吗?我已经尝试使用 setHidden 和 setInvisible 为 true 的 PDFBox,但它不起作用。谢谢!
    • 我忘了在我的问题上标记你。对不起。
    • 谢谢!最后,有没有办法不使用 Rectangle 作为注释?或者这对于 PDFBox 和 iText 是否必要?
    • 您是指显示文本“some text”的矩形吗?这与 iText 或 PDFBox 无关——这是注释在屏幕上的表示方式,也是 adobe 阅读器显示它的方式——也许其他阅读器的做法不同。如果您想直接将文本打印到 PDF 中,请参阅我对 overContent 的其他建议。
    • 我的意思是有没有办法让我的文本不使用矩形?我会尝试调查 overContent .. 谢谢!
    猜你喜欢
    • 2011-10-03
    • 2016-08-24
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    相关资源
    最近更新 更多