我需要使用PHP脚本修改一些PDF文件。我也能exec()所以我几乎可以使用在CentOS上运行的任何东西。
通过Adobe Acrobat Pro X打开PDF文件时,在“图层”面板中显示2个图层:
当我禁用这两个图层时,我最终会使用黑色&白色文字&图像(文本不是矢量,它是扫描文档)。
我想使用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值修改为使这些图层不可见的内容?
答案 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();
}
}
}