【问题标题】:Unicode and PDF tooltips / messageboxes with iTextSharp带有 iTextSharp 的 Unicode 和 PDF 工具提示/消息框
【发布时间】:2013-05-20 10:52:39
【问题描述】:

我需要找到一种方法在 PDF 文档的一个很小的空间中添加一个很长的字符串。

我正在使用 iTextSharp。我已经尝试使用PdfAnnotation.CreateText() 添加评论注释(气球),但我不喜欢它们的外观/工作方式。它使页面太重(我每页有很多 cmets),而且它们的行为在很多方面都很奇怪(感谢 Adob​​e)。

现在我正在考虑在页面中的“块”上添加一些简单的工具提示,或者使用 javascript 弹出消息框(如图所示:http://www.codehacker.com/ITEXTSHARP/chap15.aspx#)。然而,令我非常失望的是,在这些情况下,Acrobat (?) 似乎不支持 Unicode 字符。例如。我这样做:

var javascript = new PdfAnnotation(
    w, 200f, 550f, 300f, 650f,
    PdfAction.JavaScript("app.alert('" + "Αρνάκι άσπρο και παχύ!" + "');\r", w));
chunk.SetAnnotation(javascript);

...而且,在最好的情况下,当用户单击该块时,会弹出一个带有乱码的消息框。

是否有任何设置可以使上面的代码可以接受 Unicode 或其他方式来做我想做的事?


编辑:

我现在看到了这个:https://stackoverflow.com/a/163065/964053 我试过这样修改我的代码:

var javascript = new PdfAnnotation(
    w, 200f, 550f, 300f, 650f,
    PdfAction.JavaScript((char)0xFEFF + "app.alert('" + "Αρνάκι άσπρο και παχύ!" + "');\r", w));
chunk.SetAnnotation(javascript);

但似乎什么都没有改变......


EDIT2: 使用八进制表示,例如(\141) 似乎也没有帮助......


EDIT3: 在您双击它之前,这似乎很好用,但我需要根据内容大小自行调整工具提示大小:

var lToolTip = PdfFormField.CreatePopup(
    w, new Rectangle(tc.Left, tc.Bottom, tc.Right, tc.Top), val, true);
chunk.SetAnnotation(lToolTip);

提供的矩形似乎没有以任何方式使用... 有任何想法吗? 我不知道 PdfFormField.CreatePopup() 应该创建什么,但我在页面上看到一个小标记,当您将鼠标悬停在它上面时会显示一个弹出窗口。

【问题讨论】:

    标签: unicode annotations tooltip itextsharp messagebox


    【解决方案1】:

    我有点迷失在你的编辑中,不清楚什么适合你,什么不适合,但是关于 JavaScript 中的 unicode 问题:你知道有两个版本的 javaScript() 方法吗?

    javaScript(java.lang.String, com.itextpdf.text.pdf.PdfWriter, boolean)

    如果添加 booleantrue,则 JavaScript 字符串应被解释为 Unicode。如果这不能解决你的问题,我会删除这个答案,如果你澄清你的问题(剪掉不相关的部分),我会再做一次尝试。

    【讨论】:

    • 我什至没有看到其他超载!谢谢!现在我还有一个小问题:当警报函数中的文本包含“\r\n”时,消息框根本不会出现。我试过只删除“\n”或“\r”,但它不起作用。它仅在我删除整个“\r\n”时才有效。 :(
    • 啊!在字符串上使用 val = val.Replace("\r\n", "\\r\\n") 可以解决所有问题!现在有道理了……非常感谢布鲁诺。 :)
    • 顺便问一下,您知道将工具提示(就像所有 Windows 应用程序中使用的工具提示,而不像 Acrobat 的 cmets)放在块上的任何方法吗?当您将鼠标悬停在评论或链接上时,我已经看到 acrobat 显示工具提示,但我不想使用第一个,第二个只能在工具提示中显示 url。
    • 您的意思是弹出注释,如本 PDF 所示:examples.itextpdf.com/results/part2/chapter07/…?代码可以在这里找到:itextpdf.com/examples/iia.php?id=152(参见 tinyurl.com/iiacsCH07 了解 C# 版本)我知道的唯一其他替代方法(类似于 URL 的情况)是字段字典中的 TU 条目。但是,这涉及到引入一个表单域...
    • 它使用 Popup 注释。你可以或多或少地塑造它们的表现方式,但这需要大量的工作。想到的另一个选项是“可选内容”(ISO 语言中的 OCG)。您可以在不可见的图层中添加内容,并在有人将鼠标悬停在特定区域上时使该图层可见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2011-06-09
    • 2019-08-08
    • 2017-02-18
    • 1970-01-01
    相关资源
    最近更新 更多