如何在pdf中获取可选内容组的资源名称?

时间:2017-04-11 11:48:59

标签: pdf pdfbox ocg

我正在尝试实现允许用户将标记添加到pdf中的现有图层的功能。这是我用来在pdf中绘制线条的代码:

PDResources  resources = page.findResources();
PDPropertyList props = resources.getProperties();        
COSName resourceName = getLayerResourceName("Superimposed3", resources, props);
PDPageContentStream cs1 = new PDPageContentStream(document, page, true, false);
cs1.beginMarkedContentSequence(COSName.OC, resourceName);
cs1.setStrokingColor(0, 0, 255);
cs1.setLineWidth(0.8F);
cs1.drawLine(100,100,250,200);
cs1.endMarkedContentSequence();
cs1.close();

我正在使用beginMarkedContentSequence而不是beginMarkedContent,因为我使用的是pdfbox 1.8版本,2.0.5版本不适用于.net。 这是我获取图层资源名称的函数:

 private static COSName getLayerResourceName(string layerName,PDResources resources,PDPropertyList props)
        {
            int index = 0;
            COSName resourceName = COSName.getPDFName("MC"+ index);
            PDOptionalContentGroup ocg = props.getOptionalContentGroup(resourceName);
            if (ocg != null && (ocg.getName() == layerName))
            {
                return resourceName;    
            }
            else if (ocg == null)
            {
                return null;
            }
            else
            { 
                resourceName = null;
                index++;
                bool exitFlag = false;
                while (!exitFlag)
                {
                    resourceName = COSName.getPDFName("MC" + index);
                    ocg = props.getOptionalContentGroup(resourceName);
                    if (ocg == null)
                    {
                        exitFlag = true;
                        resourceName = null;
                    }
                    else if (ocg.getName() == layerName)
                    {
                        exitFlag = true;
                    }
                    else
                    {
                        index++;
                    }
                }
            }
            return resourceName;
        }

以上函数仅适用于使用LayerUtility.appendFormAsLayer函数添加的图层。但它对使用以下代码创建的那些图层不起作用:

PDOptionalContentProperties ocprops = document.getDocumentCatalog().getOCProperties();
PDOptionalContentGroup newGroup = new PDOptionalContentGroup("Superimposed2");
PDOptionalContentGroup newGroup1 = new PDOptionalContentGroup("Superimposed3");
ocprops.addGroup(newGroup);
ocprops.addGroup(newGroup1);

所以,我应该添加" MC"我自己的页面属性值,创建图层,或者是否有其他方法来获取此类图层的资源名称。

0 个答案:

没有答案