猿问

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

我们需要更改 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);

                        }

                    }

                }

            }



GCT1015
浏览 140回答 1
1回答

森林海

首先,您必须将新值设置为字典中的URIannotationAction键:if (annotationAction.get(PdfName.S).equals(PdfName.URI)) {&nbsp; &nbsp; final PdfString destination = annotationAction.getAsString(PdfName.URI);&nbsp; &nbsp; final String url = destination.toString();&nbsp; &nbsp; System.out.println(url);&nbsp; &nbsp; String updatedUrl = [... url changed to match the changed criteria ...];&nbsp; &nbsp; 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) {&nbsp; &nbsp; [...]}new PdfStamper(reader, new FileOutputStream(dir + name + "-new.pdf")).close();
随时随地看视频慕课网APP

相关分类

Java
我要回答