Yes, that's what I found as well. Is there a way to to know this using Java with PDFBox? If I do not know the encoding in advance, I cannot choose the right encoding for the target directory without making assumptions. In my experience the encodings had to match for the GoToE link to work.
Dahit -----Ursprüngliche Nachricht----- Von: Tilman Hausherr [mailto:[email protected]] Gesendet: Freitag, 19. April 2019 07:32 An: [email protected] Betreff: [bulk]: Re: AW: [bulk]: Re: Encoding of names dictionary and GoToE target I meant upload to a sharehoster (attachments are deleted, except when stuck in moderation and your second one wasn't), but never mind. I removed the JavaScript programmatically and found this: /Names [<FEFF0045006D0070007400790050006100670065005000440046002E007000640066> 15 0 R] So the UTF16 is in the original file. Tilman On 2019/04/18 09:24:26, "Gueclue, Dahit" <[email protected]> wrote: > Here are the files without javascript. Also I used this code to produce the > output: > > import java.io.File; > import java.io.IOException; > import java.util.LinkedList; > import java.util.List; > import java.util.Map; > > import org.apache.pdfbox.cos.COSName; > import org.apache.pdfbox.pdmodel.PDDocument; > import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode; > import org.apache.pdfbox.pdmodel.PDPage; > import org.apache.pdfbox.pdmodel.common.PDRectangle; > import > org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification; > import org.apache.pdfbox.pdmodel.interactive.action.PDActionEmbeddedGoTo; > import org.apache.pdfbox.pdmodel.interactive.action.PDTargetDirectory; > import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; > import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink; > import > org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; > import > org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageFitWidthDestination; > > > public class AddAnnotations > { > public static void main(String[] args) throws IOException > { > > File file = new File("PDF with 1 PDF doc attachment.pdf"); > PDDocument document = PDDocument.load(file); > > PDPage page0 = document.getPage(0); > List<PDAnnotation> annotations = page0.getAnnotations(); > > try > { > > // embedded files are stored in a named tree > PDEmbeddedFilesNameTreeNode efTree = > document.getDocumentCatalog().getNames().getEmbeddedFiles(); > Map<String, PDComplexFileSpecification> names = efTree.getNames(); > LinkedList<String> targets = new LinkedList<String>(); > targets.addAll(names.keySet()); > > PDComplexFileSpecification fs = names.get("EmptyPagePDF.pdf"); > > PDDocument ef = > PDDocument.load(fs.getEmbeddedFile().createInputStream()); > PDPage page = ef.getPage(0); > PDAnnotationLink annotation = new PDAnnotationLink(); > PDActionEmbeddedGoTo action = new PDActionEmbeddedGoTo(); > PDTargetDirectory target = new PDTargetDirectory(); > PDPageDestination dest = new PDPageFitWidthDestination(); > > String name = new String(targets.get(0)); > //byte[] utf16 = new > String("EmptyPagePDF.pdf").getBytes("UTF-16"); > //name = new String(utf16); // works if this name is used > instead > target.setFilename(name); > target.setRelationship(COSName.C); > action.setTargetDirectory(target); > > //action.setFile(fs); > dest.setPage(page); > action.setDestination(dest); > dest.setPageNumber(0); > annotation.setAction(action); > annotation.setRectangle(new PDRectangle(10, 10, 100, 100)); > > annotations.add(annotation); > > > // save the PDF > document.save("GoToE link output.pdf"); > ef.close(); > } > finally > { > document.close(); > } > } > > } > > > The name of the attachment did not contain any special symbols, but the > encoding for the name of the target directory and the name in the names > dictionary were different. The specification for GoToE actions does require a > destination, type, subtype and either a filespec or (at least for document > level attachments) a target directory. As a possible workaround I tried > setting the file specification of the attachment to the action, but that did > not work out either. If I know how GoToE works with file specifications, that > would also be enough. > > Dahit > > -----Ursprüngliche Nachricht----- > Von: Tilman Hausherr [mailto:[email protected]] > Gesendet: Donnerstag, 18. April 2019 06:15 > An: [email protected] > Betreff: [bulk]: Re: Encoding of names dictionary and GoToE target > > Please upload the files without javascript to reduce my fear of opening them. > Or better, post the code you use to create these files so that one can run > that code and create the files including the attachment. I looked at the PDF > specification and from what I see with PDFDebugger your files looks fine. I > assume the effect you mention happens with the attached files, despite that > the names were pure ascii ? > > Tilman > > On 2019/04/16 12:47:37, "Gueclue, Dahit" <[email protected]> wrote: > > Hello, > > > > I am currently working with PDFBox 2.0.14 and I am trying to create GoToE > > links for document attachments. For this I created a test PDF file with one > > PDF attachment in Adobe Acrobat XI. > > The link is a PDAnnotationLink with an PDActionEmbeddedGoTo action. The > > filename of the target directory recieves the name extracted from the > > EmbeddedFiles name dictionary. After > > adding the name, action and rectangle to the annotation, I save the result > > document and open it with Adobe Acrobat Reader DC. > > > > The problem I have is that the GoToE link is not opening the attachment. > > After looking at the file in a text editor, it seems as if the file name in > > the names dictionary uses a different encoding, > > UTF-16-BE, than the file name in the target directory, ISO 8859-1. If I > > manually convert file name to UTF-16 before adding it to the target > > directory it works just fine. However, if I do not know > > the encoding of the names in the names dictionary, I cannot generate the > > correct name for the target directory. > > > > Is there a way to determine which encoding the names dictionary uses or are > > there other workarounds to this? I tried to set the file specification oft > > he attachment to the action but that did not > > work out for me. > > > > Attached are the input and output files. > > > > > > Regards, > > > > Dahit G�cl� > > > > > > ________________________________________________________________________ > > PROSTEP AG, Dolivostra�e 11, D-64293 Darmstadt > > HR: Amtsgericht Darmstadt, HRB 8383 > > Vorstand: Dr. Bernd P�tzold (Vorsitz), Reinhard Betz > > Dr. Karsten Theis > > Aufsichtsrat: Dr. Heinz-Gerd Lehnhoff (Vorsitz) > > ________________________________________________________________________ > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > ________________________________________________________________________ > PROSTEP AG, Dolivostraße 11, D-64293 Darmstadt > HR: Amtsgericht Darmstadt, HRB 8383 > Vorstand: Dr. Bernd Pätzold (Vorsitz), Reinhard Betz > Dr. Karsten Theis > Aufsichtsrat: Dr. Heinz-Gerd Lehnhoff (Vorsitz) > ________________________________________________________________________ > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] ________________________________________________________________________ PROSTEP AG, Dolivostraße 11, D-64293 Darmstadt HR: Amtsgericht Darmstadt, HRB 8383 Vorstand: Dr. Bernd Pätzold (Vorsitz), Reinhard Betz Dr. Karsten Theis Aufsichtsrat: Dr. Heinz-Gerd Lehnhoff (Vorsitz) ________________________________________________________________________

