在 PHP/Bash/C# 中从 PDF 中删除图层/背景
我有一些 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);
我在每个图像的控制台中得到以下输出:
<代码><< /名称背景 /类型 /OCG >>
<代码><< /OCGs [ 2234 0 R ] /P /AllOff /Type /OCMD>>
<代码><< /Name Text Color /Type /OCG >>
这实际上是图层信息,以及 /OC 键的 PDFSharp 文档:
在图像处理之前,其 可见度是根据此确定的 入口。如果确定是 不可见,整个图像是 跳过,就好像没有做一样 运算符来调用它。
那么现在,如何将 /OC 值修改为使这些层不可见的值?
I have some PDF files that I need to modify using a PHP script. I'm also able to exec() so I can use pretty much anything that runs on CentOS.
The PDF files when opened through Adobe Acrobat Pro X, show 2 layers in the "layers" panel:
- Background
- Color
When I disable both of these layers I end up with a black & white text & images (the text is not vector tho, it's a scanned document).
I want to disable these layers and any other similar layer found in the PDFs using PHP and/or C# or any command-line tool.
Other useful information:
When I run pdfimages (provided with XPDF) on my PDFs, it extracts exactly what I actually need removed from each page...
Additional Information Update:
I modified the PDFSharp example here: http://www.pdfsharp.net/wiki/ExportImages-sample.ashx :
Modified:
Line 28: ExportImage(xObject, ref imageCount);
To:PdfObject obj = xObject.Elements.GetObject("/OC");
Console.WriteLine(obj);
I got the following output in the console for each image:<< /Name Background /Type /OCG >>
<< /OCGs [ 2234 0 R ] /P /AllOff /Type /OCMD >>
<< /Name Text Color /Type /OCG >>
Which is actually the layer information, and the PDFSharp Documentation for the /OC key:
Before the image is processed, its
visibility is determined based on this
entry. If it is determined to be
invisible, the entire image is
skipped, as if there were no Do
operator to invoke it.
So now, how do I modify the /OC value to something that will make these layers invisible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
经过长时间的尝试,我找到了方法!我发布代码是为了将来有人可能会发现它很有帮助:
After long hours of experimenting, I found the way! I'm posting the code so someone may find it helpful in the future: