如何使用 IText7 和 C# 在现有 PDF 中的内部链接下划线?

亚伦

我们经常使用 Word 生成具有许多内部交叉引用的大型文档。我正在编写一个工具来查找并为这些可点击的内部交叉引用添加蓝色下划线。(我知道我可以在 Word 级别执行此操作,但是即使我无法访问原始 Word 文件,我也需要能够执行此操作。)

我正在使用 C# 和 IText 7。我能够加载和扫描这些内部链接的现有 PDF。但我似乎无法做的是改变链接的外观。搜索后,我了解到PdfAnnotation该类用于创建新链接,而不是用于更改现有链接。我被告知我需要使用Put()来更改现有的。我尝试了许多不同的方法,但它们似乎都不起作用。

var pdfDoc = new PdfDocument(new PdfReader(txt_FileLoaded.Text), new PdfWriter(outfile));
for (int x = pgStart; x <= pgEnd; x++)
{
    PdfPage page = pdfDoc.GetPage(x);
    var annotations = page.GetAnnotations();
    foreach (var a in annotations)
    {
        if (a.GetSubtype() == PdfName.Link)
        {
            PdfLinkAnnotation link = (PdfLinkAnnotation)a;
            var action = link.GetAction();
            if (action != null)
            {
                if ( 
                    (action.Get(PdfName.S) == PdfName.URI) || 
                    (action.Get(PdfName.S) == PdfName.GoToR) )
                {
                    //Do something with external links if you want
                }
                else if ( 
                    (action.Get(PdfName.S) == PdfName.GoTo) ||
                    (action.Get(PdfName.S) == PdfName.GoToE))
                {
                    //Do something with internal links
                    link.Put(PdfName.C, new PdfArray(ColorConstants.BLUE.GetColorValue()));
                    link.Put(PdfName.Border, new PdfArray(new int[] {0,0,5}));
                }
            }
        }
    }
}
pdfDoc.Close();

调用 时Close()新文件已正确写入,但未出现下划线。再次,我已经确认它确实找到了链接。我需要通过Put()添加这些下划线进行哪些具体更改

谢谢你的时间!!

阿列克谢·苏巴赫

据我所知,您尝试实现的目标无法通过纯粹修改注释对象来实现。可能可以尝试使用外观流,但我不确定它是否会起作用,即使它会产生一些副作用。

注释只是对可点击的矩形区域以及点击该区域时将触发的动作(或目标)进行编码。也可以配置注释的边框,但 PDF 规范不允许您进行细粒度调整,因此您将无法仅设置底部边框来模拟下划线。

我们要做的是直接在页面内容中画一条线,希望注释位置足够准确。

我们可以使用 获得注释的区域annotation.getRectangle(),然后使用PdfCanvas匹配的坐标绘制一条线(如果需要,您也可以将其向上移动一点)。代码是用 Java 编写的,但您会发现很容易转换为 C#,因为只有方法名称以大写字母开头。

PdfPage page = pdfDocument.getPage(i);
// Create canvas where we would draw additional lines
PdfCanvas pageCanvas = new PdfCanvas(page);
for (PdfAnnotation annotation : page.getAnnotations()) {
    Rectangle annotationArea = annotation.getRectangle().toRectangle();
    // Draw a line at the bottom of the annotation area
    pageCanvas.setStrokeColor(ColorConstants.BLUE).
            moveTo(annotationArea.getLeft(), annotationArea.getBottom()).
            lineTo(annotationArea.getRight(), annotationArea.getBottom()).
            stroke();
}

这是初始 PDF 的样子:

初始PDF

这是输出 PDF 的样子

生成的PDF

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用带有 C# 的 itext7 将 u3d 添加到现有的 pdf 中

来自分类Dev

itext 7 c# 如何剪辑现有的 pdf

来自分类Dev

IText7和C#中缺少GetPageN方法

来自分类Dev

如何使用itext7从标记的pdf中的结构元素中提取文本

来自分类Dev

我如何使用itext7从存储在Blob存储中的pdf中提取文本?

来自分类Dev

使用iText7和Vb.Net签名Pdf时缺少MissingMethodException

来自分类Dev

使用 itext 4 编辑 pdf 中的现有超链接

来自分类Dev

如何使用iText以编程方式将页眉和页脚添加到现有的基于表单的PDF中?

来自分类Dev

在pdf文档itext7中获取所有acrosfields的可用信息

来自分类Dev

如何在itext7 html到pdf转换器的converterproperties中设置baseuri

来自分类Dev

如何使用iText7在C#中从MemoryStream创建Image对象?

来自分类Dev

如何使用 C# 将嵌套表添加到 iText 中的现有 PDF 表中

来自分类Dev

重组文本(rst)http链接下划线(“ __”和“ _”的使用)

来自分类Dev

在iText7(.NET)中将页脚添加到现有PDF的每一页

来自分类Dev

使用iText更改现有PDF中的AcroFields顺序?

来自分类Dev

如何在Outlook中删除链接下划线?

来自分类Dev

通过后期请求接受Pdf并传递给C#.net Core中的itext7 pdfreader

来自分类Dev

在Itext中修改现有PDF的字体

来自分类Dev

如何使用iText7将.p7s字节数组插入PDF?

来自分类Dev

Java使用itext在现有的pdf中设置本地文件超链接

来自分类Dev

iText:从现有PDF导入样式化的文本和信息

来自分类Dev

如何从fpdf中的pdf的锚链接删除下划线

来自分类Dev

如何在itext7中获取widthPoint

来自分类Dev

如何使用Bootstrap 3在导航栏中的链接下划线?

来自分类Dev

在自定义签名中使用字体带有iText7的外观签名会破坏PDF / A一致性吗?

来自分类Dev

在自定义签名中使用字体带有iText7的外观签名会破坏PDF / A一致性吗?

来自分类Dev

如何在php中替换除下划线和句点以外的所有特殊字符?

来自分类Dev

如何避免Atom中带有下划线的单词和命令?

来自分类Dev

使用python(和matplotlib?)将页面附加到现有的pdf文件中

Related 相关文章

  1. 1

    如何使用带有 C# 的 itext7 将 u3d 添加到现有的 pdf 中

  2. 2

    itext 7 c# 如何剪辑现有的 pdf

  3. 3

    IText7和C#中缺少GetPageN方法

  4. 4

    如何使用itext7从标记的pdf中的结构元素中提取文本

  5. 5

    我如何使用itext7从存储在Blob存储中的pdf中提取文本?

  6. 6

    使用iText7和Vb.Net签名Pdf时缺少MissingMethodException

  7. 7

    使用 itext 4 编辑 pdf 中的现有超链接

  8. 8

    如何使用iText以编程方式将页眉和页脚添加到现有的基于表单的PDF中?

  9. 9

    在pdf文档itext7中获取所有acrosfields的可用信息

  10. 10

    如何在itext7 html到pdf转换器的converterproperties中设置baseuri

  11. 11

    如何使用iText7在C#中从MemoryStream创建Image对象?

  12. 12

    如何使用 C# 将嵌套表添加到 iText 中的现有 PDF 表中

  13. 13

    重组文本(rst)http链接下划线(“ __”和“ _”的使用)

  14. 14

    在iText7(.NET)中将页脚添加到现有PDF的每一页

  15. 15

    使用iText更改现有PDF中的AcroFields顺序?

  16. 16

    如何在Outlook中删除链接下划线?

  17. 17

    通过后期请求接受Pdf并传递给C#.net Core中的itext7 pdfreader

  18. 18

    在Itext中修改现有PDF的字体

  19. 19

    如何使用iText7将.p7s字节数组插入PDF?

  20. 20

    Java使用itext在现有的pdf中设置本地文件超链接

  21. 21

    iText:从现有PDF导入样式化的文本和信息

  22. 22

    如何从fpdf中的pdf的锚链接删除下划线

  23. 23

    如何在itext7中获取widthPoint

  24. 24

    如何使用Bootstrap 3在导航栏中的链接下划线?

  25. 25

    在自定义签名中使用字体带有iText7的外观签名会破坏PDF / A一致性吗?

  26. 26

    在自定义签名中使用字体带有iText7的外观签名会破坏PDF / A一致性吗?

  27. 27

    如何在php中替换除下划线和句点以外的所有特殊字符?

  28. 28

    如何避免Atom中带有下划线的单词和命令?

  29. 29

    使用python(和matplotlib?)将页面附加到现有的pdf文件中

热门标签

归档