【问题标题】:Add hyperlink to pdf files using pdfbox使用 pdfbox 为 pdf 文件添加超链接
【发布时间】:2018-12-01 03:20:14
【问题描述】:

我需要创建一个小工具,在 PDF 文件的第一页添加超链接。我正在使用 Apache PDFBox 来读取 pdf 文件。

任何想法如何使用这个库在页面上添加超链接?

我发现了这个问题:how to set hyperlink in content using pdfbox,但这不起作用。

我只想在 pdf 文件的第一页添加一个超链接。

File file = new File(filename);
PDDocument doc = PDDocument.load(file);

PDPage page = doc.getPage(0);
...

我在this question 上找到的解决方案至少有 2 个问题:

  1. PDPageContentStream 类型中的 drawString(String) 方法不适用于参数 (PDAnnotationLink)

  2. colourBlue 未初始化

我希望在页面底部添加超链接,并以 URL 为中心。但目前任何建议都会有所帮助

【问题讨论】:

    标签: java pdf pdfbox


    【解决方案1】:

    首先,你需要像这样创建一个PDAnnotationLink

    PDAnnotationLink link = new PDAnnotationLink(); 
    

    link 应该有一个动作:

    PDActionURI actionURI = new PDActionURI();
    actionUri.setURI("http://www.Google.com"); 
    link.setAction(action);
    

    最后,您需要在所需位置定义一个矩形,最后将link 添加到页面的注释中。

    PDRectangle pdRectangle = new PDRectangle();
    
    pdRectangle.setLowerLeftX(...);
    pdRectangle.setLowerLeftY(...);
    
    pdRectangle.setUpperRightX(...);
    pdRectangle.setUpperRightY(...);
    
    link.setRectangle(pdRectangle);
    
    page.getAnnotations().add(link);
    

    如果您愿意,您还可以通过调用setBorderStyle(...) 方法为link 添加下划线。

    希望这对你有用!

    如果你想添加一些文字,那么你需要像这样创建一个PDPageContentStream

    PDPageContentStream contentStream = new PDPageContentStream(doc,  page);
    contentStream.beginText();
    contentStream.newLineAtOffset(..., ...);
    contentStream.showText(...);
    contentStream.endText();
    contentStream.close();
    

    newLineAtOffset(..., ...) 方法用于将文本定位在所需位置。

    附:很抱歉缩进不好,但在手机上写字很难。如果您需要任何进一步的帮助,您甚至可以用罗马尼亚语给我写私信。

    【讨论】:

    • 有效!问题是超链接没有文本。我只看到一个小下划线。但是链接是有效的!我不认为我可以从 stackoverflow 向您发送私人消息。
    • 查看源代码下载中的 AddAnnotations.java 示例。文本只是一个文本,它必须添加到您的页面内容流中,而不是添加到注释中。
    • @NicuVlad 我已经编辑了我的答案,请将其标记为已接受的答案,如果对您有帮助,请点赞我。谢谢
    • @TothLudovicAndreas,非常感谢!
    • @NicuVlad 还有一件事,在处理内容流之前,请尝试执行 link.setColor(...)。
    猜你喜欢
    • 2014-01-28
    • 2017-06-20
    • 2021-09-12
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多