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

时间:2013-02-19 15:09:09

标签: pdf pdf-generation

我有一个由Microsoft Word生成的PDF文件。用户指定了黑色的“高亮”颜色,使文本看起来像是一个黑盒子(并使文本看起来像被编辑)。我想将黑框更改为黄色,以便突出显示文本。

理想情况下,我想在Python中这样做。

谢谢!

1 个答案:

答案 0 :(得分:2)

选项1:如果商业库是一个选项,您可以使用Amyuni PDF Creator .Net轻松实现此功能,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类),在每个填充运算符之前插入颜色选择运算符,然后重新保存文件。有关这些运算符的更多详细信息,请参阅表4.10 Adob​​e PDF参考文档的路径绘制运算符。

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

操作数rg:将非描边颜色空间设置为DeviceRGB,并将非描边颜色设置为指定值

操作数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绘图相同的绘图操作符绘制在页面上绘制的任何文本的黄色。登记/> - 页面上使用的XX和注释将不会被处理 - 如果您要处理的文档是以相同的方式生成的,您可以只测试几个文件,看看它是如何进行的。

重要提示:这只是一个未经测试的想法,它可能起作用,也可能不起作用。