【问题标题】:Java PDF Stamper writing below checkbox (text being covered by checkbox)Java PDF Stamper 写在复选框下方(文本被复选框覆盖)
【发布时间】:2017-10-27 13:26:56
【问题描述】:

我正在尝试使用 java pdf 压模写入现有的 pdf,但由于某种原因,pdf 中有一个特定的复选框,文本似乎被绘制在下面。

pdf阅读代码:

PdfReader reader = new PdfReader(Testing.getImagePath() + "form.pdf");
File dir = new File(Testing.getResourcePath() + id + "/");
String destination = Testing.getResourcePath() + id + "form" + id + ".pdf";
File exist = new File(destination);

dir.mkdirs();
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destination));
stamper.setFormFlattening(true);
PdfContentByte over;
over = stamper.getOverContent(1);

绘图文本代码:

over.beginText();
over.setFontAndSize(bf, 11);
over.setTextMatrix(169, 322);
over.showText("X");
over.endText();

【问题讨论】:

  • 你从哪里过来的?
  • 更新了代码。如果我需要添加任何其他代码,请告诉我。
  • 目前看起来不错。在复选框的位置放置一个 X(只有它出现在下面)听起来很像你想选择那个复选框?
  • 是的,目标是填写现有的 pdf,我想选中复选框,但我知道如何做到这一点的唯一方法是用“X”覆盖它
  • AcroFields 表单 = stamper.getAcroFields();是你的朋友吗

标签: java checkbox itext pdfstamper


【解决方案1】:

首先:

遍历 PDF 中的 FormField 并找出要设置的有效值:

        AcroFields form = stamper.getAcroFields();
        for(Entry<String, Item> field : form.getFields().entrySet()) {
            System.out.println(field.getKey() + ": " + field.getValue());
            String[] values = form.getAppearanceStates(field.getKey());
            StringJoiner sb = new StringJoiner(",");
            for (String value : values) {
                sb.add(value);
            }
            System.out.println("Possible Options: " + sb.toString());
        }

现在您应该可以通过设置它的允许值来选择复选框:

        form.setField("myCheckbox", "myYesValue");

【讨论】:

  • 您的 AcroFields 是从哪里获得的?来自 Stamper / 作者或来自读者(在这种情况下,它们将是只读的)。在编辑您的问题时分享代码?
  • 是的,我使用不同的代码从 pdf 中输出 id,并且是从阅读器而不是压模中读取的。搞定了,谢谢!
猜你喜欢
  • 2013-07-14
  • 2013-11-02
  • 1970-01-01
  • 2017-06-20
  • 2016-10-27
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 2019-04-05
相关资源
最近更新 更多