C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – iText或iTextSharp基本文本编辑大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我可以通过多种方式从PDF中的页面提取文本: @H_502_7@

@H_502_7@

String pageText = PdfTextExtractor.GetTextFromPage(reader,i);
@H_502_7@这可用于获取页面上的任何文本.

@H_502_7@或者:

@H_502_7@

byte[] contentBytes = iTextSharp.text.pdf.parser.ContentByteUtils.GetContentBytesForPage(reader,i);
@H_502_7@可能性是无穷无尽的.

@H_502_7@现在我想删除/编辑某个单词,例如明确的单词,敏感的信息(在他们身上放置黑盒子显然是一个坏主意:)或者PDF中的任何内容(这只是简单的文本).我可以使用上面的方法找到这个词.我可以算一下它的出现等…

@H_502_7@我不关心布局,或者PDF并不是真正意图以这种方式操纵的事实.

@H_502_7@我只想知道是否有一种机制可以让我以这种方式操纵我的PDF的原始内容.你可以说我正在寻找“SetContentBytesForPage()”……

解决方法

如果要更改页面内容,则仅更改页面内容流是不够的.页面可能包含对包含要删除内容的表单XObject的引用. @H_502_7@

@H_502_7@次要问题包括图像.例如:假设您的文档包含已经过OCR的扫描文档.在这种情况下,删除(矢量)文本是不够的,您还需要操作图像中的(像素)文本.

@H_502_7@假设您的次要问题不存在,您需要采用双重方法

@H_502_7@>从页面获取内容作为文本,以检测哪些页面中有要删除名称或单词.
>递归循环遍历所有内容流以查找该文本并重写那些没有该文本的内容流.

@H_502_7@从你的问题,我认为你已经解决了问题1.解决问题2并不是那么微不足道.在我的书的第15章中,我有一个示例,其中提取文本返回“Hello World”,但是当您查看内容流时,您会看到:

@H_502_7@

BT
/F1 12 Tf
88.66 367 Td
(ld) Tj
-22 0 Td
(Wor) Tj
-15.33 0 Td
(llo) Tj
-15.33 0 Td
(He) Tj
ET
@H_502_7@在您从此流代码段中删除“Hello World”之前,您需要一些启发式方法,以便您的程序能够识别此语法中的文本.

@H_502_7@找到文本后,需要重写流.为了获得灵感,您可以在itext-xtra包中查看OCG remover functionality.

@H_502_7@简而言之:如果您的PDF相对简单,那就是:可以在不同的内容流(页面内容和Form XObject内容)中轻松检测到文本,然后只需要在一些字符串操作后重写这些流.

@H_502_7@我给你做了一个名为ReplaceStream的简单示例,用PDF中的“HELLO WORLD”替换“Hello World”.

@H_502_7@

public void manipulatePdf(String src,String dest) throws IOException,DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfDictionary dict = reader.getPageN(1);
    PdfObject object = dict.getDirectObject(PdfName.CONTENTS);
    if (object instanceof PRStream) {
        PRStream stream = (PRStream)object;
        byte[] data = PdfReader.getStreamBytes(stream);
        stream.setData(new String(data).replace("Hello World","HELLO WORLD").getBytes());
    }
    PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(dest));
    stamper.close();
    reader.close();
}
@H_502_7@一些警告:

@H_502_7@>我检查对象是否是流.它也可以是一系列流.在这种情况下,您需要遍历该数组.
>我不检查是否为页面定义了表单XObject.
>我假设可以在PDF语法中轻松检测到Hello World.
> ……

@H_502_7@在现实生活中,PDF文件从未如此简单,并且随着文档中使用的每个特殊功能,项目的复杂性将大大增加.

大佬总结

以上是大佬教程为你收集整理的c# – iText或iTextSharp基本文本编辑全部内容,希望文章能够帮你解决c# – iText或iTextSharp基本文本编辑所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: