8

同じPDF内の他のページにリンクする目次を含むABCpdfを使用してPDFを動的に生成しています。問題は、HTML 内のアンカー タグのパスが一時ファイルへの絶対パスに変更されることです。

たとえば、ABCpdf はリンクの href をレンダリングします。

<a href="#elementId">Link</a>

PDF の場合: file:///C:/Users/Aaron/AppData/Local/Temp/ABCpdf/pdfCMMYPSF.htm#elementId

これは私がPDFを生成する方法です:

Doc pdf = new Doc();
pdf.HtmlOptions.AddLinks = true;
pdf.Rect.Rectangle = new System.Drawing.Rectangle(20, 80, 572, 702);
int id = pdf.AddImageHtml(pdfHTML, true, pdf.HtmlOptions.BrowserWidth, true);

while (pdf.Chainable(id))
{
    pdf.Page = pdf.AddPage();
    id = pdf.AddImageToChain(id);
}

pdf.HtmlOptions.LinkPages();
for (int i = 0; i < pdf.PageCount; i++)
{
    pdf.PageNumber = i;
    pdf.Flatten();
}

アンカーリンクを適切にレンダリングして、クリックすると別のページにジャンプする方法を教えてください。

4

3 に答える 3

6

Websupergoo から連絡があり、提供されたサンプル プロジェクトから問題をデバッグすることができました。私の問題の解決策は非常に簡単でした。他の誰かが同じ問題を抱えている場合に備えて、ここに回答を投稿します。

私のHTMLは次のように設定されました:

<a href="#elementId">Link to another page</a>
<div id="elementId">A div that's on another page</div>

私は単にそれを次のように変更する必要がありました:

<a href="#elementId">Link to another page</a>
<div><a name="elementId">A div that's on another page</a></div>

ABCpdf がリンクを同じ PDF 内の別のページにジャンプさせるには、指定された名前のアンカー タグを使用する必要があります。

于 2010-02-01T16:40:51.593 に答える
3

AddImageHtml価値があるのは、関連するアンカーブックマークを介して一貫性のない結果が得られたことです。これを達成する最も信頼できる方法はAddBookMarkメソッドを使用することですが、PDF コンテンツを手動で再構築する作業が必要になり、その方法での HTML サポートが制限されるため、これにはかなり多くの作業が必要になります。この方法の詳細については、次の URL を参照してください。

http://www.websupergoo.com/helppdf7net/source/5-abcpdf6/doc/1-methods/addbookmark.htm

おそらく、彼らの最新バージョン 8 はこの問題に対処しています。ブックマークは、ブラウザーで従来の HTML を介して表示される相対位置ではなく、常に絶対位置に解決されるように見えます。

于 2010-01-28T03:34:57.363 に答える
2

最新の ABCpdf バージョン (9) でうまくいった別の方法は、ドキュメントの各ページにブックマークを追加することです。

For i = 1 to pdf.PageCount

    pdf.PageNumber = i
    pdf.AddBookmark("Page " & i, True)

Next

次に、リンクを挿入したい場所にブックマークを参照できます。この場合、作成した各ブックマークをループして目次を作成します。

For Each bm As Bookmark In pdf.Bookmark

    toc &= "<Font annots='goto:" + bm.Page.PageNumber.ToString() + "'>" & bm.Title & "</Font><br>"

Next

pdf.AddHtml(toc)

Websupergoo チームがいくつかのサンプル コードを提供してくれました。これが元になっています。彼らに感謝します。

于 2013-07-24T10:27:03.630 に答える