Mam plik PDF z czarnym tłem i tekstem białym/żółtym.Jak usunąć czarne tło z tekstu PDF przed wydrukowaniem?
Jak mogę usunąć czarne tło przed drukowaniem i odwrócić kolor tekstu?
Mam plik PDF z czarnym tłem i tekstem białym/żółtym.Jak usunąć czarne tło z tekstu PDF przed wydrukowaniem?
Jak mogę usunąć czarne tło przed drukowaniem i odwrócić kolor tekstu?
To prawdopodobnie nie jest banalne rozwiązanie, ale jeśli masz przewidywalne kolekcje plików PDF (powiedzmy, wszystkie z tego samego źródła), możesz zhakować razem szybkie rozwiązanie, takie jak:
Wszystko to można zrobić programowo, a nie poprzez linię poleceń narzędzia też. getpdfpage.pl i setpdfpage.pl to proste małe wrappery wokół API CAM :: PDF.
Ogólnym rozwiązaniem byłoby użycie funkcji getPageContentTree() w celu przeanalizowania składni strony PDF i wyszukania operatorów zmieniających kolory i ich zmiany. Ale jeśli twój PDF używa niestandardowej przestrzeni kolorów ("sc"), może to być trudne. Również wyszukiwanie operatora, który wypełnia całe czarne wypełnienie, może być trudne, zależnie od geometrii.
Jeśli podasz adres URL przykładowego pliku PDF, mogę podać bardziej szczegółowe porady.
AKTUALIZACJA: na kaprys napisałem podstawowy skrypt zmiany kolorów, który może działać dla niektórych plików PDF. Aby go użyć, jak uruchomić ten przykład, który zamienia każdą czerwoną elementu zielony Zamiast:
perl recolor.pl input.pdf '1 0 0 rg' '0 1 0 rg' out.pdf
Wymaga to znać składnię PDF dyrektyw kolorów starasz się zmienić, więc może jeszcze wymagać coś jak kroki getpdfpage.pl zalecane powyżej.
a kod źródłowy:
#!/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;
}
}
}
}
}
Lubię rozwiązanie Chris', ponieważ wydaje się być najlepszym sposobem, aby przejść. Nie próbowałem tego osobiście, ale jedną rzeczą, która zadziałała, było zrobienie zrzutu ekranu danej strony pdf, wklejenie go w przeglądarce zdjęć (użyłem Irfanview) i manipulowanie kolorami, dopóki nie dostałem białego tła z czarny tekst. Oryginalny PDF był czerwonym tłem z czarnym tekstem.
Używany irfanview do konwersji obrazu na 2 kolory (czarny i biały). Najpierw trzeba wygenerować negatyw obrazu, a następnie przekonwertować go na 2 kolory (a może wystarczy tylko konwersja negatywnego obrazu). Końcowy wynik dla mnie zaowocował drobnym pixelowaniem w tekście, ale dla moich celów (prosta lista ze szkoły dla dzieci), działało dobrze.
Na OS X, jeśli masz GraphicConverter (darmowy pełny okres próbny dostępny ostatnio sprawdziłem), jest świetny sposób, aby to zrobić, i przyciąć czarne obramowanie, które może również wynikać z inwersji.
W menu Plik-> Konwertuj & Modyfikuj (lub konwersję wsadową w opcjach, które uzyskasz po raz pierwszy), możesz nacisnąć przycisk "Edytuj partie", a następnie wybrać odwrócenie, odcienie szarości i kontrast, dopasować kontrast do końca (gdy robi się to w skali szarości, to wszystko to samo), i wybierz także przycinanie i wybierz prawą ramkę (dla mojej sytuacji było to 720x540), które możesz najpierw sprawdzić, otwierając plik i wybierając żądaną część - zaznaczone piksele pokazują w małym polu statusu.
Nie udało mi się przekonwertować bezpośrednio z pliku PDF do formatu PDF - zmieniło się tylko pierwsza strona pliku PDF, ale wypakowanie jako pngs ładnie poradziło, co pozwoliło mi wydrukować ładny czarny tekst na białych obrazkach.
Potem wszystko gotowe do następnego pliku pdf z tą kiepską konfiguracją.
W programie Adobe Reader wypróbuj Edycja> Preferencje> Dostępność> Opcje kolorów dokumentu> Zamień kolory dokumentu. Myślę, że powinno to również działać w celu drukowania.
znalazłem to rozwiązanie na dyskusjach Adobe Wspólnoty (http://forums.adobe.com/message/4010837)
Dzięki Vlastik..Jest Pracy, ale mam biały tekst, tak aby pojawił się na białym tle. Musisz odznaczyć opcję "Zmieniaj tylko kolor czarnego tekstu lub grafiki liniowej". –
Jaki język, biblioteka i platformy używasz drukować? (jeśli nie robisz tego programowo, powinieneś zapytać na http://superuser.com/ zamiast tego - ta strona jest przeznaczona do programowania pytań) – Shog9
Jakiej biblioteki PDF używasz? Jak wygląda twój kod? Jeśli jest to istniejący plik PDF i chcesz go zmienić programowo, istnieje sposób, ale niektóre dalsze szczegóły będą wymagane. Dzięki! –