4

PdfSharpを使用してWebリンクを作成するための次の関数があります。

    public static void AddWebLink(XGraphics gfx, PdfPage page, XFont font, string url, string text, int startX, int startY)
    {
        if (gfx == null)
            throw new ArgumentNullException("gfx");

        if (page == null)
            throw new ArgumentNullException("page");

        if (font == null)
            throw new ArgumentNullException("font");

        // Write out the text
        gfx.DrawString(text, font, XBrushes.Blue, new PointF(startX, startY));
        var stringSize = gfx.MeasureString(text, font);

        // Create the linked area
        // For some reason the Y of the rectangle needs to be startY minus the height
        startY -= (int)stringSize.Height;

        var rect = gfx.Transformer.WorldToDefaultPage(new XRect(startX, startY, stringSize.Width, stringSize.Height));
        var pdfRect = new PdfRectangle(rect);
        var annotation = page.AddWebLink(pdfRect, url);
        annotation.Opacity = 0; // Try and prevent it from rendering a box around the link in some viewers
    }

PDFが生成されると、FoxitReaderで表示するとすべてが正常になります。

Foxit Image

ただし、Adobe Acrobat Reader 10および11は、リンクされた領域の周りに黒く細い境界線を示しています。

Acrobat http://dl.dropbox.com/u/6753359/acrobat-bad.PNG

残念ながら、Acrobat Readerはより標準的であるため、正しく表示する必要があります。

誰かが私のリンクエリアのすべてがアクロバットリーダーでそれらの中に境界線を取得している理由について私を手がかりにすることができますか?


編集:annotation.Opacity = 0注釈をとの両方で非表示にしようとしましたannotation.Color = XColor.FromArgb(255, 255, 255, 255);。前者は機能しませんでした(境界線はまだ表示されています)。後者は境界線を白くしましたが、テキストの一部の行に奇妙な点が生じるため(y、pの下部を切り取る白い線など)、100%機能しません。 。)。

4

2 に答える 2

6

これは既知の問題です。

解決策はここで見つけることができます:http: //forum.pdfsharp.net/viewtopic.php?p = 6161#p6161

フレームはPDFsharpのバグです。フレームを表示しないのは、10.0.3までのAdobeReaderのバグです。

更新:バグはかなり前に修正され、最近のバージョンで作成されたリンクにはフレームがありません。

于 2012-11-04T23:31:05.140 に答える
2

私はこの問題を次のように解決しました:

1.) CodePlexからPDFSharpの最新リリースをダウンロードする

2.)PdfLinkAnnotations.cs行120をからnew PdfLiteral("<</Type/Border>>");に変更しnew PdfLiteral("<</Type/Border/W 0>>");ます。

3.)PDFSharpプロジェクトのコンパイル

4.)PDFSharpを使用するプロジェクトを変更して、新しくコンパイルされた.dllを使用します。

この単純で包括的な説明が他の人に役立つことを願っています。

于 2013-10-15T01:48:08.850 に答える