以编程方式更改PDF文件中黑框的颜色?

以编程方式更改PDF文件中黑框的颜色?,pdf,pdf-generation,Pdf,Pdf Generation,我有一个由Microsoft Word生成的PDF文件。用户指定了黑色的“突出显示”颜色,以使文本看起来像是一个黑框(并使文本看起来像已编辑的文本)。我想把黑框改成黄色,这样文本就会突出显示 理想情况下,我希望用Python来实现这一点 谢谢 选项1:如果商业库是一个选项,您可以很容易地实现它,C代码如下所示: using System.IO; using Amyuni.PDFCreator; using System.Collections; //open a pdf document Fi

我有一个由Microsoft Word生成的PDF文件。用户指定了黑色的“突出显示”颜色,以使文本看起来像是一个黑框(并使文本看起来像已编辑的文本)。我想把黑框改成黄色,这样文本就会突出显示

理想情况下,我希望用Python来实现这一点


谢谢

选项1:如果商业库是一个选项,您可以很容易地实现它,C代码如下所示:

using System.IO;
using Amyuni.PDFCreator;
using System.Collections;

//open a pdf document
FileStream testfile = new FileStream("test1.pdf", FileMode.Open, FileAccess.Read, FileShare.Read);
IacDocument document = new IacDocument(null);
document.Open(testfile, "");

//get the first page
IacPage page1 = document.GetPage(1);

//get all graphic objects on the page
IacAttribute attribute = page1.AttributeByName("Objects");

// listobj is an arraylist of objects
ArrayList listobj = (ArrayList)attribute.Value;

foreach (IacObject iacObj in listobj)
{
    //if the object is a rectangle and the background color is black then set it to yellow
    if ((IacObjectType)iacObj.AttributeByName("ObjectType").Value == (IacObjectType.acObjectTypeFrame && (int)obj.Attribute("BackColor").Value == 0)
    {
        obj.Attribute("BackColor").Value = 0x00FFFF; //Yellow   
    }
}
我想您可以将其转换为IronPython。
通常的免责声明适用于此建议

选项2:如果商业库不是选项,并且您没有开发商业封闭源代码应用程序,您可以尝试使用iText对页面内容进行一些不可靠的黑客攻击:

您可以尝试解码页面内容(有关详细信息,请参阅iText中的ContentByteUtils类),在每个填充操作符之前插入颜色选择操作符,然后重新保存文件。有关这些操作符的更多详细信息,请参见Adobe PDF参考文档的表4.10路径绘制操作符

操作数f: 填充路径,使用非零绕组编号规则确定要填充的区域(参见第232页的“非零绕组编号规则”)

操作数rg:将非冲程颜色空间设置为DeviceRG,并将非冲程颜色设置为指定值

操作数q:保存当前图形状态

操作数Q:恢复保存的图形状态

因此,如果页面上有一系列运算符:

0.0 0.0 0.0 rg % Set nonstroking color to black
25 175 175 −150 re % Construct rectangular path
f % Fill path
它应成为:

0.0 0.0 0.0 rg % Set nonstroking color to black
25 175 175 −150 re % Construct rectangular path
q % Saves the current graphic state
1.0 1.0 0.0 rg % Set nonstroking color to yellow
f % Fill path
Q % Restores the saved graphic state
一些评论:
-这种方法会将每个非文本图形变为黄色(包括直线、曲线等,不包括光栅图像),也会将使用与其他PDF图形相同的绘图操作符在页面上绘制的任何文本变为黄色。
-将不处理页面上使用的Xforms和批注。
-如果您要处理的文档是由相同的工具以相同的方式生成的,您可以只测试几个文件,看看它是如何运行的。


重要提示:这只是一个未经测试的想法,可能有效,也可能无效

只是澄清一下,PDF中没有“突出显示”颜色。你可能只是在文本下面画了一个黑色的矩形。当然。黑色文本下面的黄色框将突出显示它。我的意思是,您将很难从页面上的所有其他图形中识别“突出显示”矩形,因为它们都使用相同的PDF绘图说明。我很乐意将所有黑色矩形更改为黄色矩形。太好了。谢谢现在我需要弄清楚如何使用Python来实现这一点。您可以尝试使用pyPdf或PDFMiner,但我不确定它们是否允许您修改页面内容。