itextsharp:如何找到矩形的填充颜色

2023-12-02

我按照 ItextSharp 示例获取图形结构,使用代码获取矩形坐标:

class VectorGraphicsListener : IExtRenderListener
{
public void ModifyPath(PathConstructionRenderInfo renderInfo)
{
    if (renderInfo.Operation == PathConstructionRenderInfo.RECT)
    {
        float x = renderInfo.SegmentData[0];
        float y = renderInfo.SegmentData[1];
        float w = renderInfo.SegmentData[2];
        float h = renderInfo.SegmentData[3];  
...      

我尝试了 renderInfo.GetFillColor(); 但没有这样的方法。

我想获得额外的矩形属性:
像矩形填充颜色,(一些类似于 html 中的 DIV style="background: blue; border:black;" 标签) 我怎么得到它?


TextRenderInfo有您正在寻找的方法PathConstructionRenderInfo才不是。

你从哪里得到这个例子?您使用的版本可能与所使用的版本文档不同。

本文解释了您需要做什么,但它提供了 Java 源代码,应该很容易移植到 C#:http://techqa.info/programming/question/41728853/how-to-extract-the-color-of-a-rectangle-in-a-pdf,-with-itext

为了总结相关部分,它使用GraphicsState获取填充颜色。要实现此目的,您需要使用以下命令解析 PDF 的所有内容PdfReaderContentParser传递一个派生的ExtRenderListener to the processContent方法如下(摘自上面的Java代码):

PdfReader pdfReader = new PdfReader(resource);
ExtRenderListener extRenderListener = new ExtRenderListener();
for (int page = 1; page <= pdfReader.getNumberOfPages(); page++)
{
    PdfReaderContentParser parser = new PdfReaderContentParser(pdfReader);
    parser.processContent(page, extRenderListener);

}

ExtRenderListener 需要重写 renderPath:

public override Path renderPath(PathPaintingRenderInfo renderInfo)
{
    Field gsField = PathPaintingRenderInfo.class.getDeclaredField("gs");
    gsField.setAccessible(true);
    GraphicsState graphicsState = (GraphicsState) gsField.get(renderInfo);
    if ((renderInfo.getOperation() & PathPaintingRenderInfo.FILL) != 0)
    {
        var fillColor = graphicsState.getFillColor();
        bool filledRect= false;
        for (PathConstructionRenderInfo pathConstructionRenderInfo in pathInfos) 
        {
            if(pathConstructionRenderInfo.getOperation()==PathConstructionRenderInfo.RECT)
            {
                filledRect=true;
                break;
            }
            if (filledRect && fillColor!=null)
                Console.WriteLine("{0},{1},{2}",
                fillColor.getRed(), fillColor.getGreen(), fillColor.getBlue());
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

itextsharp:如何找到矩形的填充颜色 的相关文章

随机推荐

  • CImg 与 jpeglib

    我试图让 CImg 与 Visual Studio 2017 和 jpeg 9b 一起使用 但由于某种原因它不能使用 Code define cimg use jpeg include CImg CImg h using namespace
  • 如何使用 Power BI DAX 从移动表计算每天的库存?

    我有一张库存变动表 每个库存项目都有一个唯一的 ID 并且它们会随着时间的推移更改状态 假设状态 A B C 和 D 但并不总是按此顺序 ID的每次状态变化都是表中的一条新记录 并带有状态变化的时间戳 我的目标是使用 Power BI DA
  • AVCaptureSession 仅获取视频缓冲区

    我试图从 iPhone 摄像头捕获视频和音频 并由 avassetwriter 作为视频文件输出 但输出视频文件仅包含带有音频的第一帧 我检查了 AVCaptureSession 委托方法 void captureOutput AVCapt
  • 导出机器学习模型

    我正在创建一个机器学习算法并想将其导出 假设我正在使用 scikit learn 库和随机森林算法 modelC RandomForestClassifier n estimators 30 m modelC fit trainvec yv
  • 如何从 javascript 函数调用方法后面的代码?

    我有一个 javascript 函数 用于 aspx 页面中的 HTML img 点击事件 其代码隐藏页面中还有一个服务器方法 现在我想仅当用户单击 HTML img 时才从 javascript 函数调用服务器方法而不带任何参数 C 代码
  • 隐藏 ViewController 后实例化按钮不起作用

    我刚刚发现这个非常奇怪的问题 我有这个button这是触发这个function objc func vergessenTapped let forgotPasswordVC self storyboard instantiateViewCo
  • 查找具有 n 个元素的表的最佳列和行大小以及其比例的给定范围

    我正在寻找一种从 n 个元素创建表格的最佳方法 以便理想情况下没有空单元格 但同时表格尺寸列 行的比例变得尽可能接近 1 当然 如果 n 是平方数 那么就很容易 cols rows sqrt n 如果 n 是素数 那么很明显会有空单元格 所
  • 在 Github 操作中获取修改后的文件

    我的存储库中有 2 个 Github Actions 工作流程 其中一个步骤需要获取 PR 中已修改的所有文件 删除的文件除外 我在第一个中使用这个 on pull request branches main jobs get files
  • Java 方法有排序约定吗? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有一个大型类 大约 40 个方法 它是我将作为课程作业提交的包的一部分 目前 这些方法在公用 私有等方面相当混乱 我想以合理的方式对它们进行排序 有这样做的标准方法吗 例如 通
  • 带有动态类名的 PHP 命名空间

    想知道其他人在使用 PHP 5 3 命名空间类的新功能时是否遇到过这个问题 我正在生成一个动态类调用 利用一个单独的类来定义应用程序中的用户类型 基本上 类定义器采用类型的整数表示形式并解释它们 返回一个包含类名的字符串 该类名将被称为该用
  • 将 git 子模块中的更改推送到主模块,但不推送到子模块

    我有一个 git 项目 A 它使用来自 Github 的子模块 B 我无法推送到 Github 项目 B 因为它不是我的 我想在B中做一个小的改变 不推送到远程B 因为我无法推送 但应该推送到A 所以当有人使用A时 他应该能够看到我的更改
  • Python递归函数错误:“超出最大递归深度”[重复]

    这个问题在这里已经有答案了 我使用以下代码解决了 Project Euler 的问题 10 该代码通过暴力破解 def isPrime n for x in range 2 int n 0 5 1 if n x 0 return False
  • “缩进中制表符和空格的使用不一致”[重复]

    这个问题在这里已经有答案了 我正在尝试在 Python 3 2 中创建一个应用程序 并且一直使用制表符进行缩进 但即使是编辑器也会将其中一些更改为空格 然后当我尝试运行时打印出 缩进中制表符和空格的使用不一致 该程序 如何将空格改为制表符
  • 如何在spring data @Query中使用属性

    我无法设法将 application yml 中的属性注入到 spring data Query 中 以下结果会导致 EL1008E 错误 public interface MyRepository extends JpaRepositor
  • 如何通过PHP和Linux使用pdo连接mssql?

    我正在尝试使用以下代码建立新的 PDO 连接 new PDO mssql driver Server serverName Database databaseName username password array PDO ATTR PER
  • 组合框问题:无法绑定到新值成员

    我创建了一个作为用户控件的组合框 它实际上由标签 组合框和文本框组成 我正在尝试将数据集绑定到组合框数据源 但我不断收到有关 ValueMember Display 成员的错误消息 Cannot bind to the new displa
  • 如何在屏幕底部添加工具栏?

    我是新来的 我需要你的帮助 因为我不知道一些事情 例如 我为我的应用程序放置了一个工具栏 而不是在屏幕顶部放置操作栏 现在我想在底部放置一个工具栏 那么我该怎么做呢 工具栏是正确的方式 并且它兼容android 4 0 谢谢您的回答 编辑
  • 表示任何双精度值所需的最大字符长度是多少?

    当我将无符号 8 位 int 转换为字符串时 我知道结果始终最多为 3 个字符 对于 255 而对于有符号 8 位 int 我们需要 4 个字符 例如 128 现在我真正想知道的是浮点值也是一样的 将任何 双精度 或 浮点 值表示为字符串所
  • openssl ssl 加密

    我想讨论一下openssl的写入和读取方法 假设我有一个如下所示的数据结构 my header PAYLOAD not encrypted encrypted I think the proper al
  • itextsharp:如何找到矩形的填充颜色

    我按照 ItextSharp 示例获取图形结构 使用代码获取矩形坐标 class VectorGraphicsListener IExtRenderListener public void ModifyPath PathConstructi