itext更改所有超链接的缩放级别以继承现有pdf中的缩放

2024-05-04

我正在使用以下代码将所有超链接的缩放级别更改为继承缩放,但无法改变。

可能我在 PdfName.DEST 和条件中犯了一些错误,因为第一页的 pdf 中没有 DEST 数组(查看屏幕截图)。

for (int count = 0; count < reader.getNumberOfPages(); count++) {
        PdfDictionary page = reader.getPageN(count+1);
        PdfArray annots = page.getAsArray(PdfName.ANNOTS);
        if (annots != null) {
            for (int i = 0; i < annots.size(); i++) {
                PdfDictionary annotation = annots.getAsDict(i);
                if (PdfName.LINK.equals(annotation.getAsName(PdfName.SUBTYPE))) {
                     if(annotation.get(PdfName.A)==null){
                          continue;
                     }
                    PdfArray d = annotation.getAsArray(PdfName.DEST);
                    if (d != null && d.size() == 5 && PdfName.XYZ.equals(d.getAsName(1)))
                        d.set(4, new PdfNumber(0));
                }
            }
        }
    }

我已在第一页到第二页中创建了链接,请查看图像中的结构。

我还尝试使用以下代码...我进行了调试并检查了值d每次都为空

for (int count = 0; count < reader.getNumberOfPages(); count++) {
            PdfDictionary page = reader.getPageN(count+1);
            PdfArray annots = page.getAsArray(PdfName.ANNOTS);
            if (annots != null) {
                for (int i = 0; i < annots.size(); i++) {
                    PdfDictionary annotation = annots.getAsDict(i);
                    if (PdfName.LINK.equals(annotation.getAsName(PdfName.SUBTYPE))) {

                        PdfArray d = annotation.getAsArray(PdfName.DEST);
                        // d is null every time
                    }
                }
            }
        }

您添加了一个屏幕截图,以便您查看 PDF 的内部情况。在此屏幕截图中,您可以清楚地看到目的地是[5 0 R, /FitH, 795]。但是,您只能更改包含 5 个值且类型为/XYZ.

 if (d != null && d.size() == 5 && PdfName.XYZ.equals(d.getAsName(1)))
      d.set(4, new PdfNumber(0));

[5 0 R, /FitH, 795]有 3 个元素(换句话说d.size() == 5 is false)并且数组中的第一个条目是PdfName.FITH(换句话说PdfName.XYZ.equals(d.getAsName(1)是假的)。

你的问题应该被否决,因为你展示了一件事,然后做了另一件事,然后问我们为什么你没有得到预期的结果。就好像有人给你端汤,你看到桌子上有一把勺子和一把叉子。尽管你知道喝汤应该用勺子,但你却拿起叉子,然后抱怨你不能用叉子喝汤。这……很奇怪。

Update在评论中,你抱怨说d is null,但是看看你的屏幕截图,你已经知道了d一片空白。

循环页面并获得第 1 页(对象 4)的页面字典。你检查是否有一个/Annots该页词典中的条目。有(对象40)。你循环注释,你会遇到一个注释字典(对象 30 或 39,屏幕截图的分辨率太差了,我看不清)。您检查是否/Subtype is Link。这是。您检查注释是否有/A入口。确实如此。然后你得到/Dest入口。没有这样的条目。因此你得到null。目的地可以在这里找到:

PdfDictionary action = annotation.get(PdfName.A);
if (action != null) {
    PdfArray d = action.getAsArray(PdfName.D);
    // now examine and change D
}

请注意,您要求 SO 社区代替您编写您的应用程序。您通过此解决方案获得报酬,但您希望其他人代替您完成您的工作。此外:您可能没有 iText 的商业许可证......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

itext更改所有超链接的缩放级别以继承现有pdf中的缩放 的相关文章

  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • 将 Hibernate 对象序列化为 JSON 时抛出异常

    好吧 我正在使用 Hibernate 将一个小型数据库加载到一些表示表的类并与数据库交互 一切都很好 我真的可以看到所有结果 而且我没有任何空字段 所有这些都已被使用 这里我展示了 主 类 表 import javax persistenc
  • 无法在类对象的 ArrayList 中存储值。 (代码已编辑)

    这基本上是一个 Java 代码转换器 它涉及一个 GUI 让用户输入类类型 名称和方法 为了存储值 我创建了一个类VirtualClass与ArrayList
  • 手动编辑 Jar 以更改包名称

    我有一个来自外部源的 jar 文件 jar 中的所有类都位于 com xyz 包中 我想将所有类移动到 com xyzold 包中 这是否像解压缩 jar 将 xzy 文件夹重命名为 xyzold 并重新压缩它一样简单 或者我还需要修改每个
  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • 哪个 Swing 布局管理器可以获得我想要的布局?

    我正在尝试按照这个模型制作一个基本的登录菜单 我决定将整个菜单放入 JPanel 中 以便在连接成功后我可以切换到另一个面板 所以我决定使用 Borderlayout 将标题放在北区 将连接按钮放在南区 我将边框布局的中心本身设置为面板 我
  • Java 正则表达式 - 字母数字,最多一个连字符,句点或下划线,七个字符长

    我是 Java 正则表达式工具的新手 尽管它们潜力巨大 但我很难完成这项任务 我想编写一个正则表达式来验证遵循以下语法的输入字符串 小写字母和数字的任意组合 仅一个下划线 一个破折号或一个句号 无其他特殊字符 最小长度为 5 我想出了以下解
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • JTable 和 JScrollpane 大小的问题

    我有一个JScrollPane with a JTable在里面 在里面JTable我最初有 3 行 稍后添加行 默认JTable我的 3 行很难看 因为JScrollPane calls getPreferredScrollableVie
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • 如何导入 org.apache.commons.lang3.ArrayUtils;进入 Eclipse [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我如何导入 org apache commons lang3 ArrayUtils 将库添加到 Ecl
  • Java-如何将黑白图像加载到二进制中?

    我在 FSE 模式下使用 Java 和 swing 我想将完全黑白图像加载为二进制格式 最好是二维数组 并将其用于基于掩码的每像素碰撞检测 我什至不知道从哪里开始 过去一个小时我一直在研究 但没有找到任何相关的东西 只需将其读入Buffer
  • 线程“main”中的异常 java.lang.StackOverflowError

    我有一段代码 但我无法弄清楚为什么它在线程 main java lang StackOverflowError 中给出异常 这是问题 Given a positive integer n prints out the sum of the
  • 如何找到被点击的JLabel并从中显示ImageIcon?

    这是我的代码 我想知道哪个l单击 然后在新框架中显示该 ImageIcon e getSource 不起作用 final JFrame shirts new JFrame T shirts JPanel panel new JPanel n
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • JavaFX - 为什么多次将节点添加到窗格或不同的窗格会导致错误?

    我现在正在学习基本的 JavaFX 我不明白我正在阅读的书中的这一说法 不 诸如文本字段之类的节点只能添加到一个窗格中一次 将节点添加到多次窗格或不同的窗格将导致运行时错误 我可以从书中提供的UML图看出它是一个组合 但我不明白为什么 库类
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • 失败时石英重试

    假设我有一个这样配置的触发器
  • Java:使用 Graph API 在线更新 Sharepoint 上的 docx 文件

    我在使用 Java 在线更新 Sharepoint 上的 docx 文件时遇到问题 首先 我检查了构建 PUT 请求的 URL 此处 并使用此请求 PUT drives drive id items item id content 我首先使

随机推荐