0

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);
4

3 に答える 3

0

リンクの抽出にはDocotic.Pdfライブラリを使用できます(免責事項:私は会社で働いています)。

以下は、指定されたファイルを開き、すべてのハイパーリンクを検索し、各リンクの位置に関する情報を収集し、各リンクの周りに四角形を描画するコードです。

その後、コードは新しい 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");
于 2014-04-24T15:21:56.067 に答える
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/

「抽出するアドレスのタイプ」として「url」を選択し、セパレーターを選択し、抽出を押してください。

それがうまくいくことを願っています。

于 2014-04-24T12:25:33.200 に答える
0

1 つの可能性は、Acrobat でカスタム JavaScript を使用することです。これは、ページ上の「単語」を列挙し、それらのクワッドを読み上げます。そこから、リンクを作成する (またはページ上のリンクと比較する) ための座標と、実際のテキスト (「単語」) を取得します。

既存のリンクの境界線を設定するのが「のみ」の場合は、ドキュメントのリンクを列挙する別の Acrobat JavaScript も実行し、境界線の色プロパティを設定します (幅も設定する必要がある場合があります)。

(「作る」よりも「買う」方が好きな方は、個人的にお気軽にご連絡ください。そのようなことは、私の標準的な「レパートリー」の一部です)。

于 2014-04-26T22:29:43.703 に答える