Tom*_*Tom 5 php c# pdf gd imagemagick
我有一些PDF文件需要使用PHP脚本进行修改.我也能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键的PDFSharp文档:
在处理图像之前,将根据此条目确定其可见性.如果确定不可见,则跳过整个图像,就好像没有Do操作符来调用它一样.
那么现在,如何将/ 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)