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

时间:2011-05-22 17:09:24

标签: c# php pdf imagemagick gd

我需要使用PHP脚本修改一些PDF文件。我也能exec()所以我几乎可以使用在CentOS上运行的任何东西。

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

  1. 背景
  2. 颜色
  3. 当我禁用这两个图层时,我最终会使用黑色&白色文字&图像(文本不是矢量,它是扫描文档)。

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

    其他有用信息:

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

    其他信息更新: 我在这里修改了PDFSharp示例:http://www.pdfsharp.net/wiki/ExportImages-sample.ashx

    修饰


    第28行:ExportImage(xObject, ref imageCount);

    要:
    PdfObject obj = xObject.Elements.GetObject("/OC");
    Console.WriteLine(obj);

    我在控制台中为每张图片输出了以下内容:
    << /Name Background /Type /OCG >>
    << /OCGs [ 2234 0 R ] /P /AllOff /Type /OCMD >>
    << /Name Text Color /Type /OCG >>

    实际上是层信息,以及/ OC key的PDFSharp文档:

      

    在处理图像之前,它   基于此确定可见性   条目。如果确定是   看不见,整个形象是   跳过,好像没有做   运算符调用它。

    现在,如何将/ OC值修改为使这些图层不可见的内容?

1 个答案:

答案 0 :(得分:9)

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

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();
        }
    }
}