回答
这可能是不平凡的解决一般,但如果你有一个可预测的PDF集合(说,都来自同一个来源),那么你可能能够一起快速解决这样的问题:
- 从CPAN安装CAM::PDF
- 运行 “getpdfpage.pl my.pdf 1> page1.txt” 获得第1页的图形码
- 搜索 “RG” 中找到,其中RGB文本颜色为(或“RG”为背景,或者可能为“g”或“G”为灰度,或者“k”或“K”为CMYK颜色“sc”或“SC”为特殊颜色空间)
- 编辑page1.txt设置你喜欢的颜色
- 运行“setpdfpage.pl my.pdf 1个page1.txt out.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;
}
}
}
}
}
我喜欢克里斯的解决方案,因为它似乎是最好的一段路要走。我还没有亲自尝试过,但有一件事对我来说很有用,那就是将PDF页面的屏幕截图置于图像查看器中(我使用Irfanview),然后操作颜色直到获得白色背景黑色文本。原始pdf是带有黑色文本的红色背景。
使用irfanview将图像转换为2种颜色(黑色和白色)。对于你来说,你可能必须首先生成图像的负片,然后转换成2种颜色(或者只是负像转换可能就足够了)。对我而言,最终的结果是在文本中产生了一些小的像素化,但对于我的目的(来自孩子学校的简单列表),它运行良好。
在OS X上,如果你有GraphicConverter(上次我检查过免费的完整试用版),那么有一个很好的方法可以做到这一点,并且裁剪掉可能由反转导致的黑边。
在文件 - >转换&修改(或在您首次获得的选项中进行批量转换),您可以点击“编辑批次”按钮,然后选择反转,灰度和对比度,一直调整对比度(当它变成灰度时,它都是一样的),并选择裁剪,并选择正确的边框(对于我的情况它是720x540),您可以通过打开文件并选择您想要的部分首先检查 - 所选像素显示在一个小小的状态框中。
我无法直接从PDF格式转换为pdf格式 - 它只是改变了pdf的第一页,但输出成png格式很好,这让我可以在白色背景图像上打印漂亮的黑色文字。
然后,你已经把这一切都设置为下一个PDF与这个糟糕的设置。
在Adobe Reader中,尝试编辑>首选项>辅助功能>文档颜色选项>替换文档颜色。我认为它也适用于印刷。
我已经找到了Adobe社区讨论(http://forums.adobe.com/message/4010837)
谢谢你Vlastik..Its工作,但我有白色的文字,使它出现在白色的背景。必须取消选中“仅更改黑色文本或线条图的颜色”。 – 2015-03-22 06:40:13
- 1. 如何打印白色文本黑色背景图像
- 2. UITabBar删除黑色背景
- 3. 如何从加载微调器中删除深黑色背景?
- 4. 交换前景/背景颜色的Ncurses C++打印文本
- 5. 文本的黑色背景
- 6. 删除弹出的黑色背景
- 7. CCShaky3D打开背景黑色
- 8. Magento如何删除图像背景中的黑色图像
- 9. Magento - 从自动缩略图中删除黑色背景?
- 10. 从导航栏中删除黑色背景
- 11. 如何从黑色背景更改背景颜色?
- 12. 删除黑色背景,并使从pycut打开输出中的透明cv
- 13. 如何在ReadOnly文本框中更改背景/前景色?
- 14. 打印背景颜色
- 15. 如何删除awesome_print上的黑色背景
- 16. 如何删除android发射器图标的黑色背景?
- 17. 在Chrome中打印背景颜色
- 18. 从图像中删除白色背景
- 19. 从图像中删除白色背景
- 20. 从progressdialog中删除白色背景
- 21. ReportViewer在打印布局模式下显示黑色背景
- 22. 如何使用OpenCV在白色背景上打印彩色文本
- 23. 如何在创建缩略图时删除黑色背景颜色
- 24. 如何删除UITableViewCell的白色背景
- 25. 如何删除背景颜色(PowerShell)
- 26. 背景是黑色
- 27. 根据背景制作前景色黑色或白色
- 28. 删除背景颜色
- 29. 德尔福 - 文字印在黑色背景上
- 30. 如何获取PDF文件的文本背景颜色(RGB值)?
什么语言,库和平台,您使用的打印此解决方案? (如果您没有以编程方式执行此操作,则应该询问http://superuser.com/,而不是 - 此站点用于编程问题) – Shog9 2009-09-28 18:22:39
您正在使用哪种PDF库? 你的代码是什么样的? 如果这是一个现有的PDF文件,并且您希望以编程方式进行更改,则有一种方法,但需要一些更多详细信息。谢谢! – 2009-09-28 18:23:23