我已经实现了从pdf中删除图层的功能,但问题是,我在图层上绘制的内容无法删除。下面是我用来删除图层的代码:
PDDocumentCatalog documentCatalog = doc.getDocumentCatalog();
PDOptionalContentProperties ocgProps = documentCatalog.getOCProperties();
PDOptionalContentGroup ocg = ocgProps.getGroup(markupLayerName);
COSDictionary ocgsDict = (COSDictionary)ocgProps.getCOSObject();
COSArray ocgs = (COSArray)ocgsDict.getItem(COSName.OCGS);
int indexToBeDeleted = -1;
for (int index = 0; index < ocgs.size(); index++)
{
COSBase o = ocgs.get(index);
COSDictionary ocgDict = ToCOSDictionary(o);
if (ocgDict.getString(COSName.NAME) == markupLayerName)
{
indexToBeDeleted = index;
break;
}
}
if (indexToBeDeleted >= 0)
{
cgs.remove(indexToBeDeleted);
ocgsDict.setItem(COSName.OCGS, ocgs);
documentCatalog.setOCProperties(new PDOptionalContentProperties(ocgsDict));
}
要删除标记数据,我需要修改PDPage的内容。我只是搜索了BDC和EMC对的内容,然后搜索了该对是否属于相关层,如果是,则从内容中删除该部分。下面是我使用的C#代码:
PDPage page = (PDPage)doc.getDocumentCatalog().getPages().get(pageNum);
PDResources resources = page.getResources();
PDFStreamParser parser = new PDFStreamParser(page);
parser.parse();
java.util.Collection tokens = parser.getTokens();
java.util.List newTokens = new java.util.ArrayList();
List<Tuple<int, int>> deletionIndexList = new List<Tuple<int, int>>();
object[] tokensArray = tokens.toArray();
for (int index = 0; index < tokensArray.Count(); index++)
{
object obj = tokensArray[index];
if (obj is COSName && (((COSName)obj) == COSName.OC))
{
int startIndex = index;
index++;
if (index < tokensArray.Count())
{
obj = tokensArray[index];
if (obj is COSName)
{
PDPropertyList prop = resources.getProperties((COSName)obj);//Check if the COSName found is the resource name of layer which contains the markup to be deleted.
if (prop != null && (prop is PDOptionalContentGroup))
{
if (((PDOptionalContentGroup)prop).getName() == markupLayerName)
{
index++;
if (index < tokensArray.Count())
{
obj = tokensArray[index];
if (obj is Operator && ((Operator)obj).getName() == "BDC")//Check if the token specifies the start of markup
{
int endIndex = -1;
index++;
while (index < tokensArray.Count())
{
obj = tokensArray[index];
if (obj is Operator && ((Operator)obj).getName() == "EMC")//Check if the token specifies the end of markup
{
endIndex = index;
break;
}
index++;
}
if (endIndex >= 0)
{
deletionIndexList.Add(new Tuple<int, int>(startIndex, endIndex));
}
}
}
}
}
}
}
}
}
int tokensListIndex = 0;
for (int index = 0; index < deletionIndexList.Count(); index++)
{
Tuple<int, int> indexes = deletionIndexList.ElementAt(index);
while (tokensListIndex < indexes.Item1)
{
newTokens.add(tokensArray[tokensListIndex]);
tokensListIndex++;
}
tokensListIndex = indexes.Item2 + 1;
}
while (tokensListIndex < tokensArray.Count())
{
newTokens.add(tokensArray[tokensListIndex]);
tokensListIndex++;
}
PDStream newContents = new PDStream(doc);
OutputStream output = newContents.createOutputStream(COSName.FLATE_DECODE);
ContentStreamWriter writer = new ContentStreamWriter(output);
writer.writeTokens(newTokens);
output.close();
page.setContents(newContents);
我使用的是来自java的ApachePDFBox,我有一个带有多个可选内容组的源PDF。我想做的是导出一个PDF版本,其中只包含标准内容和启用的可选内容组。为了我的目的,我保留原作的任何动态方面是很重要的。。。。因此,文本字段是静态文本字段,矢量图像是静态矢量图像,等等。之所以需要这样做,是因为我打算最终使用一个pdf表单编辑器程序,它不知道如何处理可选内容,并且会盲目地渲染所有内容,所以我想预处
我正在尝试用Java中的PDFBox编辑pdf的一些内容。问题是,每当我编辑pdf中的任何字符串,并尝试使用Adobe Reader打开它时,最后一行不会出现在新呈现的pdf中。 当我尝试直接从浏览器顶部打开渲染的pdf时,我能够看到最后一行。但是,它以不同的格式编码。我正在使用以下代码编辑pdf的内容: 编辑pdf会删除“有问题?...”这一行。这里有什么问题?我做错了什么吗? 谢谢。
问题内容: 我尝试修改的内容具有一系列条目,并且在每个条目中还有其他条目。没有标签可以帮助您。我希望脚本执行的操作是检查每个条目的内容并查找一些文本。这将用于确定整个’‘条目是否被删除/隐藏。这可能吗?怎么样? 下面是一个例子。页面中有几个这样的标签,我想删除/隐藏标签中的文本为“是” 的标签。因此,在此示例中,整个事情将被删除/隐藏。 问题答案: 对于此类问题,请发布指向目标页面的链接。或者,如
链接到pdf 当我尝试从上面的pdf中提取文本时,我得到了在evince viewer中不可见的文本和可见的文本的混合。此外,一些所需的文本缺少查看器中没有缺少的字符,例如,“FALCONS”中的“S”和许多缺少的“½”字符。我认为这是由于不可见文本的干扰,因为在查看器中突出显示pdf时,可以看到不可见文本与可见文本重叠。 有没有办法去掉不可见的文字?还是有别的解决办法? 代码: 输出(粗体文本为
出于某种原因,我的回答只给出了空的方括号,即[],什么都没有发生。 这是我的代码: 更新:根据John的建议,我尝试创建一个测试桶,但不幸的是,我收到了一个权限拒绝错误。所以我做了以下操作: 在我有权访问的bucket下创建了一个名为“test”的文件夹 这次我确实收到了一个ResponseMetadata对象,而不是空括号。然而,我仍然感到困惑。我的HTTPStatusCode是200。但当它告
我正在从PDF中删除一个带有书签链接的页面。删除页面后,指向此页面的书签链接不再有效。 我没有从PDFBox api中找到一种方法来完成这项工作 有没有办法删除这个书签?有没有办法删除全部书签? 提前感谢