【问题标题】:Why is PdfSharp creating borders around web links?为什么 PdfSharp 在 Web 链接周围创建边框?
【发布时间】:2012-11-02 13:31:19
【问题描述】:

我有以下使用 PdfSharp 创建网络链接的功能:

    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 后,在 Foxit Reader 中查看一切正常:

但是,Adobe Acrobat Reader 10 和 11 在链接区域周围显示黑色细边框:

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

不幸的是,由于 Acrobat Reader 更加标准,因此要求它必须看起来正确。

有人能告诉我为什么我的所有链接区域在 acrobat reader 中都有边框吗?


编辑:我试图让annotation.Opacity = 0annotation.Color = XColor.FromArgb(255, 255, 255, 255); 都看不见注释。前者不起作用(边框仍然出现),后者使边框变为白色,这不是 100% 起作用,因为它会在某些文本行中产生奇怪的情况(例如切断 y、p 等底部的白线。 .)。

【问题讨论】:

    标签: c# pdfsharp


    【解决方案1】:

    这是一个已知问题。

    可以在这里找到解决方案: http://forum.pdfsharp.net/viewtopic.php?p=6161#p6161

    框架是 PDFsharp 中的一个错误。 Adobe Reader 10.0.3 之前的一个错误是不显示框架。

    更新:该错误已在很久以前修复,使用最新版本创建的链接周围不会有框架。

    【讨论】:

    • 看来我需要自己编译 PdfSharp 和 Migradoc 来解决这个问题(因为我的项目混合了两者)。谢谢,我尝试搜索但找不到那个帖子。
    【解决方案2】:

    我通过以下方式解决了这个问题:

    1.) 从CodePlex 下载最新版本的PDFSharp

    2.) 将 PdfLinkAnnotations.cs 第 120 行从 new PdfLiteral("<</Type/Border>>"); 修改为 new PdfLiteral("<</Type/Border/W 0>>");

    3.) 编译 PDFSharp 项目

    4.) 将使用 PDFSharp 的项目更改为使用新编译的 .dll。

    希望这个简单的包罗万象的解释对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-30
      • 2017-07-20
      • 2018-07-21
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多