我的PDF有黑色背景和白/黄文字。
如何在打印前删除黑色背景并反转文本的颜色?
答案 0 :(得分:6)
一般来说这可能是非常重要的,但是如果你有一个可预测的PDF集合(比如,所有来自同一个来源),那么你可以将这样的快速解决方案组合起来:
所有这些都可以通过编程方式完成,而不是通过命令行工具。 getpdfpage.pl和setpdfpage.pl是围绕CAM :: PDF API的简单小包装器。
一般的解决方案是使用getPageContentTree()来解析PDF页面语法并搜索颜色更改操作符并更改它们。但是,如果您的PDF使用自定义颜色空间(“sc”),这可能会非常棘手。并且搜索执行整页黑色填充的操作员也可能很难,具体取决于几何形状。
如果您提供示例PDF的URL,我可以提供一些更具体的建议。
更新:一时兴起,我写了一个可能适用于某些PDF的基本换色器脚本。要使用它,请运行此示例,将任何红色元素变为绿色:
perl recolor.pl input.pdf '1 0 0 rg' '0 1 0 rg' out.pdf
这要求您了解您尝试更改的颜色指令的PDF语法,因此可能仍需要类似上面推荐的getpdfpage.pl步骤。
源代码:
#!/usr/bin/perl -w
use strict;
use CAM::PDF;
use CAM::PDF::Content;
my %COLOROPS = map {$_ => 1} qw(rg RG g G k K sc SC);
my $pdf = CAM::PDF->new(shift) || die $CAM::PDF::errstr;
my @oldcolors;
my @newcolors;
while (@ARGV >= 2) {
push @oldcolors, parseColor(shift);
push @newcolors, parseColor(shift);
}
my $out = shift || '-';
for my $p (1 .. $pdf->numPages) {
my $page = $pdf->getPageContentTree($p);
traverse($page->{blocks});
$pdf->setPageContent($p, $page->toString());
}
$pdf->cleanoutput($out);
sub parseColor {
my ($in) = @_;
my $ops = CAM::PDF::Content->new($in);
die 'Invalid color syntax in ' . $in if !$ops->validate();
my @blocks = @{$ops->{blocks}};
die 'Expected one color operator in ' . $in if @blocks != 1;
my $color = $blocks[0];
die 'Not a color operator in ' . $in if !exists $COLOROPS{$color->{name}};
return $color;
}
sub traverse {
my ($blocks) = @_;
for my $op (@{$blocks}) {
if ($op->{type} eq 'block') {
traverse($op->{value});
} elsif (exists $COLOROPS{$op->{name}}) {
COLOR:
for (my $i=0; $i < @oldcolors; ++$i) {
my $old = $oldcolors[$i];
if ($old->{name} eq $op->{name} && @{$old->{args}} == @{$op->{args}}) {
for (my $v=0; $v < @{$op->{args}}; ++$v) {
next COLOR if $old->{args}->[$v]->{value} != $op->{args}->[$v]->{value};
}
# match! so we will replace
$op->{name} = $newcolors[$i]->{name};
@{$op->{args}} = @{$newcolors[$i]->{args}};
last COLOR;
}
}
}
}
}
答案 1 :(得分:2)
我喜欢克里斯的解决方案,因为它似乎是最好的方式。我没有亲自尝试过这个,但有一件事对我有用的是拍摄有问题的pdf页面的屏幕截图,将其粘贴在图像查看器中(我使用Irfanview),并操纵颜色直到我得到白色背景黑色文字。原始的pdf是带有黑色文本的红色背景。
使用irfanview将图像转换为2种颜色(黑白)。对于您,您可能必须首先生成图像的负片,然后转换为2种颜色(或者可能只是负片图像转换可能就足够了)。对我来说最终的结果是文本中出现了一些小的像素化,但是出于我的目的(来自孩子学校的简单列表),它运行良好。
答案 2 :(得分:1)
在OS X上,如果你有GraphicConverter(最后我检查了免费的完整试用版),那么有一个很好的方法可以做到这一点,并裁掉可能由反转引起的黑色边框。
在File-&gt;转换&amp;修改(或您首先获得的选项中的批量转换),您可以点击“编辑批次”按钮,然后选择反转,灰度和对比度,一直调整对比度(当它被灰度化时,它们都是相同的),并选择裁剪并选择正确的边框(对于我的情况是720x540),您可以先打开文件并选择所需的部分进行检查 - 选中的像素显示在一个小状态框中。
我无法直接从pdf转换为pdf - 它只更改了pdf的第一页,但输出为pngs很好地完成了这一操作,这使我可以在白色背景图像上打印漂亮的黑色文本。 / p>
然后你已经为这个糟糕的设置设置了下一个pdf。
答案 3 :(得分:-2)
在Adobe Reader中尝试编辑&gt;偏好&gt;可访问性&gt;文档颜色选项&gt;替换文档颜色。我认为它也适用于印刷。
我在Adobe社区讨论(http://forums.adobe.com/message/4010837)
上找到了这个解决方案