Potrzebuję oczyścić dokument PDF z adnotacji linków. Oto szablon kodu mam:PDFBox: Jak zmodyfikować stronę i zapisać zmiany w nowym pliku (np. Usunąć adnotację do linku)?
public static void main(String[] args) throws IOException, COSVisitorException {
try (PDDocument doc = PDDocument.load("input.pdf")) {
final List<PDPage> pages = doc.getDocumentCatalog().getAllPages();
for (PDPage page : pages) {
List<PDAnnotation> annotations = page.getAnnotations();
for (PDAnnotation ann : annotations) {
if (ann instanceof PDAnnotationLink) {
PDAnnotationLink link = (PDAnnotationLink) ann;
PDAction action = link.getAction();
if (action instanceof PDActionURI) {
final PDActionURI linkUri = (PDActionURI) action;
if (linkUri.getURI().contains("www.example.com")) {
// TODO remove the link
}
}
}
}
}
doc.save("output.pdf");
}
}
Ale nie mogłem znaleźć sposób, aby usunąć łącza stałe i zapisać te zmiany w nowym pliku, linki są nadal.
Jak zapisać zmiany strony?
Czy wypróbowałeś program ustawiający, w którym użyłeś gettera (np. SetURI (null)? Lub utworzyć listę adnotacji mniejszych od tych, których nie lubisz, a następnie przesłać tę nową listę przy ustawieniu setAnnotations()? –
1) Identyfikator URI do wartości null nie usuwa samego linku, po prostu kończy się uszkodzonym łączem. 2) tak, próbowałem, to nie pomogło. – andrew
Przydałoby się dodać kod, którego używałeś (2). I link do pliku PDF, nad którym pracujesz (jeśli nie jest poufny). Proszę również wspomnieć o wersji, z której korzystasz (prawdopodobnie 1.8.8). –