使用itext 4编辑pdf中的现有超链接 [英] Editing existing hyperlinks in pdf with itext 4
本文介绍了使用itext 4编辑pdf中的现有超链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们需要更改pdf中的超链接.有很多以p-开头的超链接,我们需要删除p-.
We need to change the hyperlinks in a pdf. There are many hyperlinks which start with p- and we need to remove the p-.
到目前为止,我们已经能够阅读超链接. 有人知道如何编辑它们并保存pdf吗?
So far we are able to read the hyperlinks. Anyone knows how to edit them and save the 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
词典中的 URI 键:
First of all you have to set the new value to the URI key in the annotationAction
dictionary:
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
来保存更改,而无需采取进一步措施:
After that you have to save the changes by applying a PdfStamper
without further actions:
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中的现有超链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文