为了账号安全,请及时绑定邮箱和手机立即绑定

使用 itext 4 编辑 pdf 中的现有超链接

使用 itext 4 编辑 pdf 中的现有超链接

GCT1015 2023-06-21 15:53:31
我们需要更改 pdf 中的超链接。有很多以 p- 开头的超链接,我们需要删除 p-。到目前为止,我们能够读取超链接。有人知道如何编辑它们并保存 pdf 吗?谢谢public static void main(final String[] args) {    final List<byte[]> pdfs = new ArrayList<>();    final List<String> testfiles = Arrays.asList("72076.5.1.pdf");    final String dir = "C:\\Entwicklung\\testaround\\pdf\\";    for (final String name : testfiles) {        final File file = new File(dir + name);        final Path path = Paths.get(file.toURI());        try (InputStream istream = new FileInputStream(path.toFile())) {            final byte[] data = ByteStreams.toByteArray(istream);            pdfs.add(data);            final PdfReader reader = new PdfReader(data);            final PdfDictionary pageDictionary = reader.getPageN(36);            final PdfArray annotations = pageDictionary.getAsArray(PdfName.ANNOTS);            if (annotations != null && annotations.size() != 0) {                for (int i = 0; annotations.size() > i; i++) {                    final PdfObject annot = annotations.getDirectObject(i);                    final PdfDictionary annotationDictionary = (PdfDictionary)PdfReader.getPdfObject(annot);                    if (annotationDictionary.get(PdfName.SUBTYPE).equals(PdfName.LINK)) {                        final PdfDictionary annotationAction = annotationDictionary.getAsDict(PdfName.A);                        if (annotationAction.get(PdfName.S).equals(PdfName.URI)) {                            final PdfString destination = annotationAction.getAsString(PdfName.URI);                            final String url = destination.toString();                            System.out.println(url);                        }                    }                }            }
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

首先,您必须将新值设置为字典中的URIannotationAction键:


if (annotationAction.get(PdfName.S).equals(PdfName.URI)) {

    final PdfString destination = annotationAction.getAsString(PdfName.URI);

    final String url = destination.toString();

    System.out.println(url);

    String updatedUrl = [... url changed to match the changed criteria ...];

    annotationAction.put(PdfName.URI, new PdfString(updatedUrl));

}

之后,您必须通过应用保存更改而PdfStamper无需执行进一步操作:


final byte[] data = ByteStreams.toByteArray(istream);

pdfs.add(data);

final PdfReader reader = new PdfReader(data);

final PdfDictionary pageDictionary = reader.getPageN(36);

final PdfArray annotations = pageDictionary.getAsArray(PdfName.ANNOTS);

if (annotations != null && annotations.size() != 0) {

    [...]

}

new PdfStamper(reader, new FileOutputStream(dir + name + "-new.pdf")).close();


查看完整回答
反对 回复 2023-06-21
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信