使用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);

}

}

}

}

final int n = reader.getNumberOfPages();

System.out.println("Pages : " + n);

Files.write(Paths.get(dir + "new.pdf"), data);

} catch (final FileNotFoundException e) {

e.printStackTrace();

} catch (final IOException e) {

e.printStackTrace();

}

}

}

回答:

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

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();

以上是 使用itext 4编辑pdf中的现有超链接 的全部内容, 来源链接: utcz.com/qa/407085.html

回到顶部