我有一些包含URL和mailto形式的超链接的PDF。现在是否有任何方式或工具(可能是第三方)从PDF中提取超链接元信息,如坐标,链接类型和目标地址。任何帮助都非常感谢。
我已经尝试使用iText和PDFBox但没有取得重大成功,即使是某些第三方软件也没有为我提供所需的输出。
我使用iText在Java中尝试了以下代码
PdfReader myReader = new PdfReader("pdf File Path");
PdfDictionary pageDict = myReader.getPageN(1);
PdfArray annots = pageDict.getAsArray(PdfName.ANNOTS);
System.out.println(annots);
ArrayList<String> dests = new ArrayList<String>();
if(annots != null)
{
for(int i=0; i<annots.size(); ++i)
{
PdfDictionary annotDict = annots.getAsDict(i);
PdfName subType = annotDict.getAsName(PdfName.SUBTYPE);
if (subType != null && PdfName.LINK.equals(subType))
{
PdfDictionary action = annotDict.getAsDict(PdfName.A);
if(action != null && PdfName.URI.equals(action.getAsName(PdfName.S)))
{
dests.add(action.getAsString(PdfName.URI).toString());
} // else { its an internal link }
}
}
}
System.out.println(dests);
答案 0 :(得分:0)
如果你的pdf受到复制保护,你需要从第1步开始,如果他们可以自由复制,你可以从第2步开始
步骤1:将您的pdf转换为word .doc:使用Adobe Acrobat Pro或在线pdf转换为Word转换器:
http://www.pdfonline.com/pdf2word/index.asp
第2步:将整个文档复制粘贴到输入窗口,也可以下载轻量级的html工具:
http://www.surf7.net/services/value-added-services/free-web-tools/email-extractor-lite/
选择&#39; url&#39; as&#39;要提取的地址类型&#39;,选择您的分隔符,点击提取物即可。
希望它能干活。
答案 1 :(得分:0)
您可以使用Docotic.Pdf library进行链接提取(免责声明:我为公司工作)。
下面是打开指定文件的代码,查找所有超链接,收集有关每个链接位置的信息,并在每个链接周围绘制矩形。
之后,代码会创建新的PDF(带有矩形链接)和带有收集信息的文本文件。最后,两个创建的文件都在默认查看器中打开。
public static void ListAndHighlightLinks(string inputFile, string outputFile, string outputTxt)
{
using (PdfDocument doc = new PdfDocument(inputFile))
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < doc.Pages.Count; i++)
{
PdfPage page = doc.Pages[i];
foreach (PdfWidget widget in page.Widgets)
{
PdfActionArea actionArea = widget as PdfActionArea;
if (actionArea == null)
continue;
PdfUriAction linkAction = actionArea.Action as PdfUriAction;
if (linkAction == null)
continue;
Uri url = linkAction.Uri;
PdfRectangle rect = actionArea.BoundingBox;
// add information about found link into string buffer
sb.Append("Page ");
sb.Append(i.ToString());
sb.Append(" : ");
sb.Append(rect.ToString());
sb.Append(" ");
sb.AppendLine(url.ToString());
// draw rectangle around found link
page.Canvas.DrawRectangle(rect);
}
}
// save document with highlighted links and text information about links to files
doc.Save(outputFile);
System.IO.File.WriteAllText(outputTxt, sb.ToString());
// open created PDF and text file in default viewers
System.Diagnostics.Process.Start(outputTxt);
System.Diagnostics.Process.Start(outputFile);
}
}
您可以使用以下调用来使用示例代码:
ListAndHighlightLinks("input.pdf", "output.pdf", "links.txt");
答案 2 :(得分:0)
一种可能性是在Acrobat中使用自定义JavaScript,它会枚举&#34;单词&#34;在页面上,然后读出他们的四边形。从中您可以获得坐标以创建链接(或与页面上的链接进行比较),以及实际文本(&#34;单词&#34;。
如果只是&#34;只有&#34;要设置现有链接的边框,还要执行另一个枚举文档链接的Acrobat JavaScript,并设置它们的边框颜色属性(您可能还需要设置宽度)。
(如果您愿意&#34;购买&#34; over&#34; make&#34;请随意与我联系;这些事情是我标准的一部分&#34;曲目&#34;)。< / p>