W naszym biurze mamy drukarkę, która drukuje pliki PDF z pamięci USB. Drukuje większość plików w porządku, ale ma problemy z niektórymi, szczególnie tymi generowanymi z lateksem. Niektóre pliki PDF po prostu odmawia drukowania, niektóre pliki PDF drukuje czcionką kurierską, a niektóre drukuje dobrze, z wyjątkiem równań.
Szukam sposobu na „destylację” plików PDF do absolutnie pewnego formatu do wydrukowania. Albo przez uproszczenie / znormalizowanie pliku PDF do tego stopnia, że każdy moduł renderujący go poprawnie wyrenderuje, albo przez zwykłe uczynienie każdej strony obrazem rastrowym 600 dpi w pliku PDF. (Mógłbym podzielić plik PDF na poszczególne obrazy rastrowe i połączyć je ręcznie, ale chcę coś skryptowalnego).
Rozmiar pliku wyjściowego nie ma znaczenia, o ile jest pewny do wydrukowania, ma rozmiar papieru A4 (lub oryginał) i rozdzielczość 300 ~ 600 dpi.
Odpowiedzi:
Po bezskutecznym wypróbowaniu niektórych opcji renderowania czcionek jako kontury (w tym to pytanie i pstoedit), wymyśliłem sposób łatwej konwersji pliku PDF do postaci zrasteryzowanej za pomocą ImageMagick:
Spowoduje to utworzenie pliku PDF renderowanego w rozdzielczości 600 dpi z wyłączonymi antyaliami (niepotrzebne przy tej rozdzielczości).
Pliki wyjściowe są ogromne (~ 30 MB dla 8-stronicowego dokumentu) i bardzo wolno drukują, ale powinny działać, o ile drukarka ma wystarczającą ilość pamięci do renderowania zawartości.
źródło
convert
nie zachowuje zawartości formularzy, które mogłeś wypełnić. (Chciałem zrasteryzować plik PDF, aby upewnić się, że zawartość formularza wszędzie wygląda tak samo, w szczególności, że będzie wyświetlana przede wszystkim przez każdą przeglądarkę plików PDF). Aby zachować zawartość formularza, użyjevince
(lub cokolwiek innego aplikacja, której użyłeś do wypełnienia formularza), aby wydrukować dokument „do pliku” - jest to kolejny plik PDF, w którym zawartość formularza faktycznie stała się częścią zwykłego tekstu. Następnie nadal możesz zrasteryzować ten nowy plik PDF, w zależności od potrzeb.+antialias
), a nie (-antialias
).+antialias
wyłącza wygładzanie krawędzi: imagemagick.org/script/command-line-options.php?#antialiasUżywanie imagemagick nie jest, moim zdaniem, stabilne przy wysokich rozdzielczościach i / lub dużych plikach. Wiele drukarek ma rozdzielczość 1200 dpi i więcej, więc zrasteryzowany plik powinien mieć podobną rozdzielczość. Lepszym rozwiązaniem jest użycie pdf2djvu, który jest szybszy, bardziej niezawodny, a nawet tworzy pliki o rozmiarze, który często dorównuje oryginalnemu plikowi PDF w rozdzielczości 1200 lub 2400 dpi. Pliki te można przeglądać i drukować za pomocą okularu lub evince.
Przykład:
źródło
Myślę, że mój obecny preferowany sposób to:
Użyj pdftoppm, aby przekonwertować plik PDF na serię obrazów.
Użyj img2pdf, aby utworzyć plik pdf z tych obrazów.
Dobrą wiadomością jest to, że możesz stworzyć skrypt bash, aby zautomatyzować cały proces.
Oto skrypt bash, który destyluje wszystkie pliki pdf w katalogu i zachowuje oryginały w nowym katalogu „oryginały”.
Kredyty: img2pdf answer & pdftoppm answer & bash script script pomoc: 1 i 2
(Uwaga dodatkowa) Możesz zainstalować img2pdf przy użyciu:
źródło
Inną alternatywą jest konwersja na obrazy za pomocą czegoś podobnego
pdfimages
Ze strony podręcznika „Pdfimages zapisuje obrazy z pliku Portable Document Format (PDF) jako Portable Pixmap (PPM), Portable Bitmap (PBM) lub JPEG. Pdfimages odczytuje plik PDF plik PDF, skanuje jedną lub więcej stron, i zapisuje jeden plik PPM, PBM lub JPEG dla każdego obrazu, image-root-nnn.xxx, gdzie nnn to numer obrazu, a xxx to typ obrazu (.ppm, .pbm, .jpg). ”
Następnie użyj pdftk, aby przekonwertować z powrotem na plik PDF https://www.pdflabs.com/docs/pdftk-cli-examples/
Na koniec wydrukuj ten plik. Oczywiście kluczowym pytaniem jest, jak to zrobić.
Możesz to zautomatyzować za pomocą prostej strony internetowej dla użytkowników. W końcu drukują przekonwertowany plik i powinieneś mieć wyższą wydajność i wydruk działający?
źródło