Spłaszczanie przezroczystości PDF


11

Mam plik PDF wykonany w programie Inkscape, który używa przezroczystych kolorów. Ten obraz zostanie wykorzystany w dokumencie LaTeX.

Zachowanie przezroczystości przydaje się podczas edycji, ale może stanowić problem podczas drukowania. Drukowanie zwykle obejmuje konwersję PDF do PS. Ponieważ Postscript nie obsługuje przezroczystości, wymaga to również jednego z nich

  • spłaszczanie, tj. tworzenie grafiki wektorowej, która działa bez przezroczystości

lub

  • rasterowanie, czyli renderowanie obrazu bitmapowego.

Kiedy dokument PDF zawierający taką figurę jest drukowany (lub konwertowany do PS) za pomocą Evince (lub Cairo lub Ghostscript), cała strona jest renderowana jako bitmapa, co sprawia, że ​​czcionki są brzydkie (inne niż inne strony). (Adobe Acrobat dobrze radzi sobie z takimi plikami PDF).

Niestety, konwersja danych PDF na EPS (przed dołączeniem ich do LaTeXa) niewiele pomaga, ponieważ zarówno pdftops, jak i pdf2ps (znowu Cairo lub Ghostscript) rasteryzują obraz, tj. Renderują bitmapę (zapisaną jako EPS). (Jest to nieco lepsze, ponieważ nie wpływa na całą stronę, ale nadal wolałbym grafikę wektorową).

Jak spłaszczyć przezroczystość za pomocą Inkscape lub innego oprogramowania w systemie Linux?


2
Interesujące pytanie. Spłaszczanie pliku SVG byłoby bardzo skomplikowane, ponieważ każde możliwe przecięcie kształtów wymagałoby stworzenia nowego nieprzezroczystego kształtu z wypełnieniem kompozytowym.
artfulrobot

@artfulrobot Dokładnie. Powstała grafika wektorowa może generalnie stać się dość złożona. Jednak w przypadku wielu typowo wektorowych grafik graficznych wynik powinien nadal dobrze działać na nowoczesnej drukarce Postscript.
Jan

Najlepszą metodą, jaką znalazłem, jest żmudna metoda ręczna, polegająca na przerysowaniu po pierwszym kroku: użyj programu inkscape do konwersji pliku pdf na plik svg, otwórz plik svg w dobrym edytorze tekstu. Zamień wszystkie wystąpienia „krycie: [0] [0-9 \.]” Na „krycie: 1” (wersja wyrażenia regularnego) lub znajdź „krycie: 0”. i ręcznie zamień na krycie 1 (nużąca wersja). Otwórz svg w inkscape i spraw, aby znów ładnie wyglądał (trudna część), niż z powrotem do pdf i dalej do eps.
Chris H

Odpowiedzi:


6

Jednym ze sposobów na złą rasteryzację jest ręczne przekonwertowanie dokumentu PDF na PostScript, ponieważ gdy wywołasz CUPS za pomocą evince lub dowolnego innego GUI, i tak zostanie przekonwertowany.

Możesz spróbować pdftops -r 1200 document.pdfzwiększyć rozdzielczość od niskiej wartości domyślnej 300, a następnie wydrukować wynikowy postscript. Jednak w przypadku drukarek w pracy nie przyniosło to znaczącej poprawy. Zwykły tekst na stronach z przezroczystymi obrazami i bez nich nadal wyglądał inaczej - rozmazany lub wyraźny.

Skończyło się na użyciu programu Acrobat Professional (na komputerze z systemem Windows) do spłaszczenia przezroczystych obrazów używanych w moim dokumencie lateksowym, co dało optymalne wyniki. Sprawdź, czy Transparency Flattener Presetjest [High Resolution]w zaawansowanej konfiguracji drukowania. Mój kolega wspomniał, że być może można wysłać plik pdf bezpośrednio do nowoczesnej drukarki sieciowej laserjet, pomijając konwersję PostScript. Nie próbowałem tego.

Byłoby wspaniale mieć rozwiązanie tego problemu tylko dla systemu Linux.


1

Miałem ten sam problem i oto moje rozwiązanie (do wglądu w przyszłości):

Próbowałem wielu rzeczy, i jak dotąd najlepszym rozwiązaniem produkcyjnym, które znalazłem w internecie został całkowicie renderowania PDF jako obraz z pdf2psa ps2pdf13, ale wynik nie był zadowalający dla mnie, ponieważ wszystkie kształty wektorowe zostały utracone. Chciałem renderować tylko części krytyczne, ale zachowałem grafikę wektorową.

Sztuczka polegała na wyizolowaniu wszystkich krytycznych części w Inkscape i umieszczeniu ich na osobnej warstwie (na moich obrazach były to tylko cienie). Zrobiłem tylko tę warstwę (i warstwę tła) widoczną i wyeksportowałem ją do PNG, skutecznie renderując wszystkie efekty przezroczystości, ale tylko one. Zaimportowałem go z powrotem i użyłem w nowej warstwie. Po odwróceniu wszystkich widoczności warstw (warstwa przezroczystości: wyłączona, wszystkie inne: włączone) wyeksportowany plik PDF działał doskonale z LaTeX i można go było drukować bez renderowania całej strony jako obrazu.

TL; DR:

  1. Izoluj wszystkie problematyczne folie do jednej warstwy (maski przezroczystości, cienie itp.)
  2. Pokaż tylko problematyczną warstwę i tło
  3. Eksportuj do PNG
  4. Zaimportuj właśnie utworzony plik PNG i użyj go jako tła
  5. Pokaż wszystkie warstwy oprócz warstwy problematycznej
  6. Eksportuj do pliku PDF
  7. Uśmiech :)

0

Jednym ze sposobów jest utworzenie białego pola w Inkscape tego samego rozmiaru co twoja strona i wysłanie go do dolnej warstwy. Spowoduje to wyeksportowanie obrazu z białym tłem zamiast przezroczystego.


1
Problemem nie jest przezroczyste tło, a dodanie białego tła nie rozwiązuje go. Pytanie obrazkowe wykorzystuje półprzezroczyste kształty na innych (nieprzezroczystych) kształtach. Pliki SVG i PDF obsługują to, ale PS nie.
Jan

0

Otworzyłem plik pdf za pomocą Ubuntu / Gimp i drukowałem po jednej stronie za każdym razem, sprawdzając podgląd wydruku za każdym razem.


-1
pdftops -origpagesizes input.pdf output.ps

następnie

ps2pdf -r600x600 output.ps input-new.pdf
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.