2009-09-28 12 views
5

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?

+1

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

+0

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! –

Odpowiedz

6

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:

  • zainstalować CAM::PDF z CPAN
  • run "getpdfpage.pl my.pdf 1> page1.txt", aby uzyskać kody graficzne strony 1
  • wyszukiwania dla "rg", aby dowiedzieć się, gdzie kolor tekstu RGB zmieniono (lub "RG" dla tła, lub może "g" lub "G" dla skali szarości lub "k" lub "K" dla kolorów CMYK "sc" lub "SC" dla specjalnych przestrzeni kolorów)
  • edit page1.txt ustawić kolory chcesz
  • run "setpdfpage.pl my.pdf 1 page1.txt out.pdf"

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; 
      } 
     } 
     } 
    } 
} 
2

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.

1

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ą.

-3

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)

+0

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". –

Powiązane problemy