Tengo un PDF con un fondo negro y texto blanco/amarillo.Cómo eliminar un fondo negro del texto PDF antes de imprimir
¿Cómo puedo eliminar el fondo negro antes de imprimir e invertir el color del texto?
Tengo un PDF con un fondo negro y texto blanco/amarillo.Cómo eliminar un fondo negro del texto PDF antes de imprimir
¿Cómo puedo eliminar el fondo negro antes de imprimir e invertir el color del texto?
Es probable que esto no sea trivial en general, pero si tiene colecciones predecibles de archivos PDF (por ejemplo, todos de la misma fuente), entonces es posible que pueda compilar una solución rápida como esta:
Todo esto se puede hacer mediante programación en lugar de a través de la línea de comandos herramientas también. getpdfpage.pl y setpdfpage.pl son pequeños envoltorios simples alrededor de la API CAM :: PDF.
Una solución general sería usar getPageContentTree() para analizar la sintaxis de la página PDF y buscar los operadores que cambian de color y modificarlos. Pero si su PDF utiliza un espacio de color personalizado ("sc"), esto puede ser complicado. Y buscar el operador que hace el relleno de negro a toda página también podría ser difícil, dependiendo de la geometría.
Si proporciona una URL para un PDF de muestra, podría proporcionarle algunos consejos más específicos.
ACTUALIZACIÓN: en un capricho, escribí una secuencia de comandos de cambiador de color rudimentario que puede funcionar para algunos archivos PDF. Para usarlo, correr como este ejemplo que convierte cualquier elemento rojo verde en lugar:
perl recolor.pl input.pdf '1 0 0 rg' '0 1 0 rg' out.pdf
Para ello, debe conocer la sintaxis PDF de las directivas de color que está tratando de cambiar, por lo que todavía puede requerir algo así como el los pasos de getpdfpage.pl recomendados arriba.
y el código fuente:
#!/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;
}
}
}
}
}
me gusta la solución de Chris, como parece ser el mejor camino a seguir. No lo he intentado personalmente, pero una cosa que sí funcionó para mí fue tomar una captura de pantalla de la página pdf en cuestión, pegarla en un visor de imágenes (utilicé Irfanview) y manipular los colores hasta que obtuve el fondo blanco con texto negro El pdf original era un fondo rojo con texto negro.
Se utiliza irfanview para convertir la imagen a 2 colores (blanco y negro). Para usted, es posible que primero tenga que generar un negativo de la imagen, luego convierta a 2 colores (o tal vez solo la conversión de imagen negativa sea suficiente). El resultado final para mí resultó en una pequeña pixelación en el texto, pero para mis propósitos (una simple lista de la escuela para niños), funcionó bien.
En OS X, si tiene GraphicConverter (última versión de prueba gratuita disponible la última vez que lo verifiqué), hay una gran manera de hacerlo, y cortar un borde negro que podría resultar de la inversión también.
En el archivo-> Convertir & Modificar (o conversión por lotes en las opciones que primero obtienes), puedes presionar el botón "Editar lotes", y elegir invertir, escala de grises y contraste, ajustar el contraste hasta arriba (cuando se pone greyscaled es igual), y elija recortar también y elija el borde derecho (para mi situación era 720x540), que primero puede verificar abriendo el archivo y seleccionando la parte que desea - los píxeles seleccionados muestran en un pequeño cuadro de estado.
No pude convertir directamente de pdf a pdf, solo cambió la primera página del pdf, pero la salida como pngs hizo muy bien el truco, lo que me permitió imprimir un bonito texto negro en imágenes de fondo blanco.
Luego lo tiene todo listo para el próximo pdf con esta mala configuración.
En Adobe Reader intente Edición> Preferencias> Accesibilidad> Opciones de colores del documento> Reemplazar colores del documento. Creo que también debería funcionar para la impresión.
He encontrado esta solución en las discusiones de la comunidad Adobe (http://forums.adobe.com/message/4010837)
Gracias Vlastik ... Funciona, pero tengo el texto en blanco para que aparezca en el fondo blanco. Debe desmarcar la opción 'Cambiar solo el color del texto negro o del dibujo lineal'. –
Qué idioma, biblioteca, y de la plataforma que está utilizando para imprimir? (Si no está haciendo esto programáticamente, debería preguntar en http://superuser.com/; este sitio es para preguntas de programación) – Shog9
¿Qué biblioteca PDF está usando? ¿Cómo se ve tu código? Si se trata de un archivo PDF existente y desea cambiarlo programáticamente, hay una manera, pero se requerirán más detalles. ¡Gracias! –