【问题标题】:How to add a link to a file attachment of PDF document如何将链接添加到 PDF 文档的文件附件
【发布时间】:2015-09-08 19:33:43
【问题描述】:

我正在使用 PDFBox,我想知道是否可以将文件添加为附件并链接到它?

我们以下面的代码https://svn.apache.org/viewvc/pdfbox/tags/1.8.9/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFiles.java为例:

        ...
        // create a new tree node and add the embedded file 
        PDEmbeddedFilesNameTreeNode treeNode = new PDEmbeddedFilesNameTreeNode();
        treeNode.setNames( Collections.singletonMap( "My first attachment",  fs ) );
        // add the new node as kid to the root node
        List<PDEmbeddedFilesNameTreeNode> kids = new ArrayList<PDEmbeddedFilesNameTreeNode>();
        kids.add(treeNode);
        efTree.setKids(kids);
        // add the tree to the document catalog
        PDDocumentNameDictionary names = new PDDocumentNameDictionary( doc.getDocumentCatalog() );
        names.setEmbeddedFiles( efTree );
        doc.getDocumentCatalog().setNames( names );
        ...

【问题讨论】:

    标签: java pdfbox


    【解决方案1】:

    您可以尝试使用“PDAnnotationFileAttachment”。它将提供注释。通过单击注释,您可以打开附件。

    示例代码:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    import org.apache.pdfbox.exceptions.COSVisitorException;
    import org.apache.pdfbox.pdmodel.PDDocument;
    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.common.filespecification.PDEmbeddedFile;
    import org.apache.pdfbox.pdmodel.graphics.color.PDGamma;
    import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationFileAttachment;
    
    public class FileAttach {
    
        public static void main(String arg[]) throws IOException, COSVisitorException
        {
            PDDocument doc = new PDDocument();
            PDPage page = new PDPage();
            doc.addPage(page);
    
            // Adding attachment
            String caption = "DEMO.mp4";
    //        PDEmbeddedFilesNameTreeNode efTree = new PDEmbeddedFilesNameTreeNode();
    //        final Map<String, PDComplexFileSpecification> embeddedFileMap = new HashMap<String, PDComplexFileSpecification>();
    
            PDComplexFileSpecification fs = new PDComplexFileSpecification();
            File f1 = new File("C:\\PDF\\DEMO.mp4");
            FileInputStream fins1 = new FileInputStream(f1);
            PDEmbeddedFile ef = new PDEmbeddedFile(doc, fins1 );
            ef.setSubtype( "application/octet-stream" );
            fs.setEmbeddedFile( ef );
            fs.setFile(caption);
    //        embeddedFileMap.put(caption, fs);
    
    //        efTree.setNames(embeddedFileMap);
    
    //        PDDocumentNameDictionary nameDir = new PDDocumentNameDictionary( doc.getDocumentCatalog() );
    //        nameDir.setEmbeddedFiles( efTree );
    //        doc.getDocumentCatalog().setNames( nameDir );
    
            int offsetX = 20;
            int offsetY = 600;
    
            //PDAnnotationLink txtLink = new PDAnnotationLink();
            PDAnnotationFileAttachment txtLink = new PDAnnotationFileAttachment();
            txtLink.setFile(fs);
            PDGamma blueColor = new PDGamma();
            blueColor.setB(1);
            txtLink.setColour(blueColor);
            txtLink.setAnnotationFlags(PDAnnotationFileAttachment.FLAG_LOCKED);
    
            // Set the rectangle containing the link
            PDRectangle position = new PDRectangle();
            position.setLowerLeftX(offsetX);
            position.setLowerLeftY(offsetY);  
            position.setUpperRightX(offsetX + 20);
            position.setUpperRightY(offsetY + 20);
            txtLink.setRectangle(position);
    
            page.getAnnotations().add(txtLink);
    
            doc.save("C:\\PDF\\Vishal\\aa.pdf");
            doc.close();
        }
    
    }
    

    【讨论】:

    • 感谢您的回答
    猜你喜欢
    • 2014-07-07
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多