C# 在PHP/Bash/C中从PDF中删除图层/背景#
我有一些PDF文件需要用PHP脚本修改。我还能够执行exec(),因此我可以使用CentOS上运行的几乎任何东西 通过Adobe Acrobat Pro X打开PDF文件时,在“层”面板中显示2个层:C# 在PHP/Bash/C中从PDF中删除图层/背景#,c#,php,pdf,imagemagick,gd,C#,Php,Pdf,Imagemagick,Gd,我有一些PDF文件需要用PHP脚本修改。我还能够执行exec(),因此我可以使用CentOS上运行的几乎任何东西 通过Adobe Acrobat Pro X打开PDF文件时,在“层”面板中显示2个层: 背景 颜色 当我禁用这两个层时,我会得到一个黑白文本和图像(文本不是矢量tho,它是一个扫描文档) 我想使用PHP和/或C#或任何命令行工具禁用这些层以及PDF中的任何其他类似层 其他有用信息: 当我在我的PDF上运行pdfimages(随XPDF提供)时,它会准确地从每个页面中提取我实际需要删除
第28行:
ExportImage(xObject,ref-imageCount)代码>
致:
PdfObject obj=xObject.Elements.GetObject(“/OC”)代码>
控制台写入线(obj)代码>
我在控制台中为每个图像获得了以下输出:
这实际上是层信息和/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();
}
}
}
使用系统;
使用System.IO;
使用System.Collections.Generic;
使用iTextSharp.text;
使用iTextSharp.text.pdf;
名称空间分层{
类主类
{
公共静态void Main(字符串[]args)
{
PdfReader reader=新的PdfReader(“test.pdf”);
PdfStamper stamp=newpdfstamper(读取器,newfilestream(“test2.pdf”,FileMode.Create));
字典层=stamp.GetPdfLayers();
foreach(层中的KeyValuePair条目)
{
PdfLayer层=(PdfLayer)entry.Value;
layer.On=false;
}
stamp.Close();
}
}
}
“因此,请随意发布使用其中任何一种解决方案”不幸的是,此网站不是这样工作的。您需要亲自尝试代码,指出您的困惑所在,然后我们可以尝试提供一些帮助。如果要求可行的话,你可以在很多自由职业者的网站上发布免费的代码。我很困惑,网上的PDF操作库和工具都没有类似于“提取图层信息”的东西。我不想要一个完整的解决方案,我只想有人给我指出正确的链接或工具功能。我想这将是相当棘手的,我不能说我见过一个命令行工具或库可以做到这一点。可以想象,pdfimages
中的代码可以进行剪切,而不是复制。我目前正在研究这段代码:现在让我们看看它是否可以从每个页面删除图像,而不是导出图像,现在下载:D