TextMarginFinder 用于验证适印性

2024-06-20

我试图使用 TextMarginFinder 来证明打印时奇数页和偶数页正确备份。我的代码基于:http://itextpdf.com/examples/iia.php?id=280 http://itextpdf.com/examples/iia.php?id=280

我遇到的问题是,在奇数页上,我希望页面框向左对齐,显示 1CM 后边距,在偶数页上,我希望页面框向右对齐,也显示 1CM后边距。即使在上面的示例中,情况并非如此,但打印时文本确实会完美备份,因为裁切框符合要求。

总之,我相信在某些 PDF 文件上,TextMarginFinder 错误地定位了文本宽度,通常在偶数页上。通过宽度大于实际文本可以明显看出这一点。如果媒体盒区域之外有块标记,通常会出现这种情况。


在 PDF 中,OP 指出(边距.pdf http://examples.itextpdf.com/results/part4/chapter15/margins.pdf来自 iText 样本本身)确实该框与文本不齐平:

但是,如果您查看 PDF 内容,您会发现许多行都有尾随空格字符,例如第一行:

(s I have worn out since I started my ) Tj

这些尾随空格字符是文本的一部分,因此,该框不会与可见文本齐平,但会与包含此类空格字符的文本齐平。

如果您想忽略此类空格字符,您可以尝试通过过滤此类尾随空格(或为了简单起见所有空格),然后再将它们送入TextMarginFinder。为此,我会爆炸TextRenderInfo按字符实例,然后过滤那些修剪为空字符串的实例。

用于分解渲染信息对象的辅助类:

import com.itextpdf.text.pdf.parser.ImageRenderInfo;
import com.itextpdf.text.pdf.parser.RenderListener;
import com.itextpdf.text.pdf.parser.TextRenderInfo;

public class TextRenderInfoSplitter implements RenderListener
{
    public TextRenderInfoSplitter(RenderListener strategy) {
        this.strategy = strategy;
    }

    public void renderText(TextRenderInfo renderInfo) {
        for (TextRenderInfo info : renderInfo.getCharacterRenderInfos()) {
            strategy.renderText(info);
        }
    }

    public void beginTextBlock() {
        strategy.beginTextBlock();
    }

    public void endTextBlock() {
        strategy.endTextBlock();
    }

    public void renderImage(ImageRenderInfo renderInfo) {
        strategy.renderImage(renderInfo);
    }

    final RenderListener strategy;
}

使用此帮助程序,您可以像这样更新 iText 示例:

RenderFilter spaceFilter = new RenderFilter() {
    public boolean allowText(TextRenderInfo renderInfo) {
        return renderInfo != null && renderInfo.getText().trim().length() > 0;
    }
};

PdfReader reader = new PdfReader(src);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
    TextMarginFinder finder = new TextMarginFinder();
    FilteredRenderListener filtered = new FilteredRenderListener(finder, spaceFilter);
    parser.processContent(i, new TextRenderInfoSplitter(filtered));
    PdfContentByte cb = stamper.getOverContent(i);
    cb.rectangle(finder.getLlx(), finder.getLly(), finder.getWidth(), finder.getHeight());
    cb.stroke();
}
stamper.close();
reader.close();

结果:

如果是 slug 区域文本等,您可能需要过滤更多内容,例如裁剪框之外的任何内容。

但请注意,有些字体中的空格字符可能不可见,例如盒装字符的字体。在这种情况下,将空格从等式中剔除是错误的。

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

TextMarginFinder 用于验证适印性 的相关文章

  • pdfptable的不可见边框

    我正在使用 iText 库在 Java 中生成 pdf 文件 我正在 pdfptable 中写入数据 如何使表格边框不可见 PdfPTable 的边框元素由添加到表中的 PdfPCell 定义 每个单元格都有自己的样式 格式 这是 API
  • 我在 iText 中的希伯来语文本是左对齐的

    我使用以下代码在 iText 中生成希伯来语文本 它工作得很好 创建希伯来字体 并使文本从右到左流动 但文本是左对齐而不是右对齐 谁能帮我让它右对齐吗 请注意 我尝试使多列文本右对齐 并使段落右对齐 但无济于事 Thanks static
  • 使用 iText 某些 pdf 文件水印不显示

    我们公司使用 iText 在一些 pdf 表格上标记一些水印文本 不是图像 我注意到 95 的表格可以正确显示水印 大约 5 则不能 我测试了一下 复制了2个原始pdf文件 一个被标记为ok 另一个不ok 然后通过一个小程序进行测试 结果相
  • 如何在 iText 中获取新页面

    去新页面有点问题pdfContentByte 我使用下面的代码将数据放在第一页之后到下一页 但不幸的是iText不生成新页面 step1 itextDocument new com itextpdf text Document PageSi
  • 如何使用 itext 在 pdf 页脚上添加页码,它应该照顾其宽度?

    我的代码示例如下 Override public void onEndPage PdfWriter writer Document document addFooter writer private void addFooter PdfWr
  • 将隐藏(生物识别)数据附加到 pdf 上的数字签名

    我想知道是否可以使用 iText 我用于签名 或 Java 中的其他工具在 pdf 上添加生物识别数据 我会更好地解释一下 在手写板上签名时 我会收集签名信息 例如笔压 签名速度等 我想将这些信息 java中的变量 与pdf上的签名一起存储
  • C# 3.0 使用MemoryStream将itextsharp pdf保存到数据库

    我正在尝试将 itextsharp 生成的 pdf 文件保存到数据库 但是 到目前为止我还没有成功 我正在使用 Linq to sql 这是代码 MemoryStream ms new MemoryStream Document d new
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • 将文字放在图像之上?

    我需要在 pdf 中插入图像 然后将文本放在图像顶部的特定坐标处 iTextSharp 可以做到这一点吗 是的你可以 关键是要设置你的iTextSharp text Image Alignment财产给iTextSharp text Ima
  • 将带有 itext 滚动条的表格的可编辑单元格设为只读

    请找到下面的代码 public class MakingFieldReadOnly implements PdfPCellEvent The resulting PDF public static final String RESULT1
  • RowSpan 在 iTextSharp 中不起作用?

    我正在尝试将 Html 转换为 PDF 我正在使用 iTextSharp 我发现iTextSharp对CSS的支持不太好 事实上我认为 HtmlWorker 线程并不支持这一切 让我的问题更加复杂的是 iTextSharp 似乎也不支持 R
  • 飞碟 - html 实体未呈现

    我正在使用 Flying saucer lib 生成 pdf 但我对一些 html 实体有问题 我已经在寻找解决方案 我在这个论坛和其他地方找到了很多提示 但仍然存在问题 我尝试过这种方法 http sdtidbits blogspot c
  • c# itextsharp如何获取数字签名图像

    是否可以使用 C 代码使用 itextsharp 获取 pdf 文件中任何数字签名的图像 PdfReader pdf new PdfReader location pdf AcroFields acroFields pdf AcroFiel
  • 块/短语内的换行处理

    我对块文本中的换行符处理有点困惑 下面的代码 Paragraph para new Paragraph para add new Chunk A para add new Chunk n B para add new Chunk n C d
  • 如何在 iText PDF 中使用字体

    我有一个java应用程序 我必须在itextPdf中使用FontFactory使用 Bodoni MT Black 字体 我应该如何修改我的代码 这是我的代码 Font base FontFactory getFont FontFactor
  • 从输出流合并 PDF

    我有两个 PDF 文件 每个文件都在一个ByteArrayOutputStream 我想合并两个 PDF 并且想使用 iText 但我不明白如何制作它 因为它只使用 InputStream 谁能帮我 The ByteArrayOutputS
  • 使用java编程将pdf可编辑字段转换为文本

    我准备了一份可编辑的表格 但无法使用java编程将pdf可编辑字段转换为文本 使用的 API pdfbox app 2 0 0 RC2 PDFBox 0 7 3 itextpdf 5 1 0 pdfclown 请帮助我了解如何将 pdf 可
  • 如何使用 iTextSharp 从 PDF 中提取突出显示的文本?

    根据以下帖子 iTextSharp PDF 使用 C 读取突出显示的文本 突出显示注释 https stackoverflow com questions 23342500 itextsharp pdf reading highlighed
  • 创建 PDF/A-3:嵌入文件应包含有效的 Params 密钥

    我正在尝试使用 itextpdf 5 4 5 和 itext pdfa 5 4 5 创建 PDF A 3 当我设置 PdfFileSpecification 时 出现以下异常 com itextpdf text pdf PdfAConfor
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D

随机推荐

  • Flask-Admin 具有多对多关系中的附加字段

    我有两个表 产品 成分 和 产品成分 class ProductIngredient db Model tablename product ingredient id db Column db Integer primary key Tru
  • 如何检测Mysql/innodb中的死锁?

    我知道在 Innodb 中使用事务时不可避免地会发生死锁 并且如果应用程序代码正确处理死锁 它们是无害的 正如手册所说 只需再试一次 所以我想知道 如何检测死锁 死锁是否会发出一些特殊的 mysql 错误号 如果重要的话 我正在使用 PHP
  • PyCharm 中有 HTML 块 {%%} 的快捷方式吗?

    我正在使用 HTML 块 例如 block content 经常使用 但必须输入括号和百分比符号很麻烦 有没有捷径或其他方法可以自动执行此操作 到目前为止我刚刚发现这个 PyCharm 中有插入 的快捷方式吗 https stackover
  • rake db:migrate db:reset 和 db:schema:load 之间的区别

    和 之间的不同rake db migrate and rake db reset我很清楚 我不明白的是如何rake db schema load与前两者不同 只是为了确保我在同一页面上 rake db migrate 运行尚未运行的迁移 r
  • Android:如何在播放媒体(mp3)时在特定毫秒内显示文本

    我正在尝试做一个类似卡拉 OK 的应用程序 我想在某一毫秒到来时显示一个或多个单词 例如 1148 毫秒 gt 打印 尼古拉斯 1826 毫秒 gt 打印 是 2766 毫秒 gt 打印 旧 ms gt 显示 这是我的代码 包 com ex
  • 强化文件中的跨站脚本

    我在控制器中有以下代码 参数 base64String fileName 是从浏览器发送的 var fileContent Convert FromBase64String base64String return File fileCont
  • 没有名为flask.ext.wtf.SelectField的模块

    I found Flask jquery ajax 示例 https github com saltycrane flask jquery ajax example我尝试使用最新的库版本运行它 pip install flask flask
  • 如果 Redis 已经是堆栈的一部分,为什么 Memcached 仍然与 Redis 一起使用?

    Redis 可以执行 Memcached 提供的所有操作 LRU 缓存 项目过期以及现在版本 3 x 中的集群 目前处于测试阶段 或通过 twemproxy 等工具执行 性能也类似 此外 Redis 增加了持久性 因此您无需在服务器重新启动
  • 提高第一个查询的性能

    如果执行以下数据库 postgres 查询 则第二次调用要快得多 我猜第一个查询很慢 因为操作系统 linux 需要从磁盘获取数据 第二个查询受益于文件系统级别和 postgres 中的缓存 有没有一种方法可以优化数据库以快速获得结果fir
  • 使用 C#、BouncyCastle 和导入的 RSA 密钥进行 RSA 签名和验证 - 内部工作 Python 示例和非工作 C# 代码示例

    我一直在绞尽脑汁试图获得一个使用 C 和 BouncyCastle 进行 RSA 数据签名和验证的简单示例 在适用于我的 Python 和 M2Crypto 的示例中 RSACryptoServiceProvider VerifyHash
  • 如何告诉 buildout 忽略二进制发行版并从源代码构建?

    我在构建中加入了一个鸡蛋 jsonlib http pypi python org pypi jsonlib 使用 C 扩展 pypi 上存在预编译的 blob 但它与我的环境不兼容 我得到了undefined symbol PyUnico
  • iOS、通用链接、Swift。 continueUserActivity 未调用

    我正在为我们的 iOS 应用程序实现通用链接 这是我的一小部分 AppDelegate private func application application UIApplication openURL url URL sourceApp
  • 首次安装 .apk 时如何启动服务

    在我的应用程序中 我没有任何 UI 部分 因此我需要在设备上安装应用程序后立即启动服务 我看到很多链接 答案是不可能 但我想这肯定是可能的 看看吧PlanB https market android com details id com l
  • 在Unity游戏中保存数据的最佳方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道 在 Unity 游戏中保存数据的最佳方式是什么 JSON 如果是这样 怎么办 谢谢 以下是一些不同的方式和方法保存 Unit
  • 从 WildFly 安全地调用 EJB

    我正在尝试以企业 业务 方式重写我的旧应用程序 因此 我有一个带有登录模块的 Swing 客户端和从头开始创建的我自己的服务器 客户端使用ssl证书加密与服务器的TCP连接 我检查服务器上的客户端证书和客户端上的服务器证书 然后服务器使用数
  • 在 C 中将字符追加到字符数组

    我想将一个字符附加到代表字符串的字符数组中 我正在使用结构来表示字符串 struct String char c int length int maxLength String realloc弄乱了我的数组 当我打印字符串时 它会从内存中打
  • 更改 Active Storage 的默认 URL

    我们可以更改从活动存储创建的默认 永久 url 以重定向到 S3 类似于rails active storage representations 我不喜欢网址中的框架名称 Thanks UPDATE 最近 Rails 6 中增加了一个可配置
  • 在 Android webview 中禁用地址栏

    如何从 WebView 中禁用和隐藏地址栏 没有地址栏WebView 如果你认为你有一个WebView 然后您看到一个地址栏 那不是您的WebView 相反 您正在查看浏览器应用程序 最有可能的是 您告诉的 URLWebView加载进行了重
  • 哈希码与对象的引用或地址之间的区别?

    哈希码与对象的引用或地址之间的区别 在JavaME中 这三件事是无关的 对象的 hashCode 是它的半唯一标识符 对对象的引用是该对象的作用域句柄 对象的地址 可能 是无法获得的 而且肯定是无用的
  • TextMarginFinder 用于验证适印性

    我试图使用 TextMarginFinder 来证明打印时奇数页和偶数页正确备份 我的代码基于 http itextpdf com examples iia php id 280 http itextpdf com examples iia