在 PHP/Bash/C# 中从 PDF 中删除图层/背景
本文关键字:删除图层 PDF 背景 PHP Bash 中从 | 更新日期: 2023-09-27 17:57:08
我有一些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 文档:
在处理图像之前,其 可见性基于此确定 进入。如果确定为 看不见,整个图像是 跳过,好像没有做 运算符来调用它。
那么现在,如何将/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();
}
}
}