Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在PHP/Bash/C中从PDF中删除图层/背景#_C#_Php_Pdf_Imagemagick_Gd - Fatal编程技术网

C# 在PHP/Bash/C中从PDF中删除图层/背景#

C# 在PHP/Bash/C中从PDF中删除图层/背景#,c#,php,pdf,imagemagick,gd,C#,Php,Pdf,Imagemagick,Gd,我有一些PDF文件需要用PHP脚本修改。我还能够执行exec(),因此我可以使用CentOS上运行的几乎任何东西 通过Adobe Acrobat Pro X打开PDF文件时,在“层”面板中显示2个层: 背景 颜色 当我禁用这两个层时,我会得到一个黑白文本和图像(文本不是矢量tho,它是一个扫描文档) 我想使用PHP和/或C#或任何命令行工具禁用这些层以及PDF中的任何其他类似层 其他有用信息: 当我在我的PDF上运行pdfimages(随XPDF提供)时,它会准确地从每个页面中提取我实际需要删除

我有一些PDF文件需要用PHP脚本修改。我还能够执行exec(),因此我可以使用CentOS上运行的几乎任何东西

通过Adobe Acrobat Pro X打开PDF文件时,在“层”面板中显示2个层:

  • 背景
  • 颜色
  • 当我禁用这两个层时,我会得到一个黑白文本和图像(文本不是矢量tho,它是一个扫描文档)

    我想使用PHP和/或C#或任何命令行工具禁用这些层以及PDF中的任何其他类似层

    其他有用信息:

    当我在我的PDF上运行pdfimages(随XPDF提供)时,它会准确地从每个页面中提取我实际需要删除的内容

    其他信息更新: 我在这里修改了PDFSharp示例::

    修改:
    第28行:
    ExportImage(xObject,ref-imageCount)

    致:
    PdfObject obj=xObject.Elements.GetObject(“/OC”)
    控制台写入线(obj)

    我在控制台中为每个图像获得了以下输出:


    这实际上是层信息和/OC键的PDFSharp文档:

    在处理图像之前,其 可见性是基于此确定的 进入如果决定 不可见,整个图像是不可见的 跳过了,好像没有什么可做的 运算符来调用它


    那么现在,我如何将/OC值修改为使这些层不可见的值呢?

    经过长时间的实验,我找到了方法!我正在发布代码,以便将来有人会发现它很有用:

    using System;
    using System.IO;
    using System.Collections.Generic;
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    
    namespace LayerHide {
    
        class MainClass
        {
            public static void Main (string[] args)
            {
    
                PdfReader reader = new PdfReader("test.pdf");
                PdfStamper stamp = new PdfStamper(reader, new FileStream("test2.pdf", FileMode.Create));
                Dictionary<string, PdfLayer> layers = stamp.GetPdfLayers();
    
                foreach(KeyValuePair<string, PdfLayer> entry in layers )
                {
                    PdfLayer layer = (PdfLayer)entry.Value;
                    layer.On = false;
                }
    
                stamp.Close();
            }
        }
    }
    
    使用系统;
    使用System.IO;
    使用System.Collections.Generic;
    使用iTextSharp.text;
    使用iTextSharp.text.pdf;
    名称空间分层{
    类主类
    {
    公共静态void Main(字符串[]args)
    {
    PdfReader reader=新的PdfReader(“test.pdf”);
    PdfStamper stamp=newpdfstamper(读取器,newfilestream(“test2.pdf”,FileMode.Create));
    字典层=stamp.GetPdfLayers();
    foreach(层中的KeyValuePair条目)
    {
    PdfLayer层=(PdfLayer)entry.Value;
    layer.On=false;
    }
    stamp.Close();
    }
    }
    }
    
    “因此,请随意发布使用其中任何一种解决方案”不幸的是,此网站不是这样工作的。您需要亲自尝试代码,指出您的困惑所在,然后我们可以尝试提供一些帮助。如果要求可行的话,你可以在很多自由职业者的网站上发布免费的代码。我很困惑,网上的PDF操作库和工具都没有类似于“提取图层信息”的东西。我不想要一个完整的解决方案,我只想有人给我指出正确的链接或工具功能。我想这将是相当棘手的,我不能说我见过一个命令行工具或库可以做到这一点。可以想象,
    pdfimages
    中的代码可以进行剪切,而不是复制。我目前正在研究这段代码:现在让我们看看它是否可以从每个页面删除图像,而不是导出图像,现在下载:D