当前位置: 首页 > 知识库问答 >
问题:

迁移到iText 7-将通用对象添加到PDF

艾国安
2023-03-14

我需要将一个通用的PdfObject添加到一个PDF中,而不需要将它放在文档的任何地方。

下面是iText 5中的代码:

PdfReader reader = new PdfReader(args[0]);

PdfLiteral obj = new PdfLiteral("HelloWorld");
PdfArray arr = new PdfArray();
arr.add(obj);
reader.addPdfObject(arr);

OutputStream fout = new FileOutputStream(args[0] + "-itext5.pdf");
PdfStamper stamper = new PdfStamper(reader, fout);
stamper.close();
fout.close();
reader.close();

下面是我在iText 7中尝试做的事情(没有addPdfObject方法):

try (PdfDocument writer = new PdfDocument(new PdfReader(args[0]), new PdfWriter(args[0] + "-itext7.pdf"))) {
    PdfLiteral obj = new PdfLiteral("HelloWorld");
    PdfArray arr = new PdfArray();
    arr.add(obj);
    // method 1:
    arr.copyTo(writer);
    // method 2:
    arr.makeIndirect(writer);
}

但是,在我关闭数组后,它不在PDF中。我记得Bruno在某处提到过iText 7现在删除close上未使用的对象,类似于iText 5中的pdfreader.removeUnusedObjects()。

是否有一种方法可以将对象添加到XRef字典中,并将其添加到PDF中,而不像iText5中所做的那样在任何地方引用它?

或者,有没有一个安全的地方可以在目录中添加一个未使用的PdfName或者其他不会以任何方式影响查看者的地方?我不清楚这里的PDF规范。

共有1个答案

郎宣
2023-03-14

实际上,默认情况下,iText7不会将未使用的对象写入输出文档。

至少有两种方法可以实现将悬空对象写入文档的用例。

备选方案1

使用pdfdocument#SetFlushunUsedObjects方法始终刷新未使用的对象。您所拥有的其余代码是正确的,并保持原样:

pdfDocument.setFlushUnusedObjects(true);

PdfLiteral obj = new PdfLiteral("HelloWorld");
PdfArray arr = new PdfArray();
arr.add(obj);
arr.makeIndirect(pdfDocument);

备选方案2

使用pdfobject#Flush立即显式刷新所需的对象。这不会更改用于删除未使用对象的默认逻辑,因此仍将删除任何未对其调用flush()的对象。

PdfLiteral obj = new PdfLiteral("HelloWorld");
PdfArray arr = new PdfArray();
arr.add(obj);
arr.makeIndirect(pdfDocument);
arr.flush();
 类似资料:
  • 问题内容: 我需要将SVG图形添加​​到PDF文件中。 使用iText7是否有可能? 使用iText5: 我在以下页面中发现了这一点: PdfPTable和PdfTemplate 有一种创建类似于Template的方法: 如何创建Graphics2D? 问题答案: 巧合的是,我们今天发布了SVG实现。我们目前尚不支持全部功能集,我们仍将在第二季度及以后的时间里进行开发,但是您已经可以使用它了。该工

  • 我花了一整天的时间试图弄清楚下面的迁移发生了什么。 这是表的迁移。我的想法是使用“id_stays_abroad”和“user_id”作为外键。 这是添加外键的另一个迁移 当我运行php artisan迁移时,我遇到了以下错误: SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table

  • 对于IText5,添加数字签名相当容易。其留档的链接是:http://developers.itextpdf.com/examples/security/digital-signatures-white-paper/digital-signatures-chapter-2 有人可以在ITEXT 7中共享文档链接吗?我试过各种方法,但都没有用。在网上找不到任何链接。我可以取消签名并检查签名,但不能添

  • Iam正在尝试向现有集合添加列。Iam使用MongoDB Iam运行以下迁移: } 当我执行“php artisan migrate”时,得到的响应很好: 然后,当我去“robomongo 3t studio”验证新专栏是否已创建时,我看不到它 我错过了什么吗。我对mongodb和laravel是新来的,对我来说太赤裸了。

  • 问题内容: 所以我在Python3.5上使用psycopg2将一些数据插入到postgresql数据库中。我想做的是有两列是字符串,最后一列只是一个dict对象。我不需要搜索字典,只需能够将其从数据库中拉出并使用它即可。 因此例如: 这有可能吗,如果可以的话,我将如何去做呢? 问题答案: 如果您的PostgreSQL版本足够新(9.4+)并且psycopg版本> = 2.5.4,则所有键都是字符串

  • 当我们在Laravel框架中运行migrate:install时,migrations表是在有两列(migration,batch)的数据库中创建的,无论如何都要添加在时间戳处创建的新列。谢谢