Próbuję utworzyć własną siatkę (która wygląda bardzo podobnie: http://tinyurl.com/cdyre6k - Papier EKG, który jest w jednostkach metrycznych milimetry).Tworzenie w języku Python/PDF za pomocą ReportLab - wydruki w siatce wykonane własnoręcznie z wzorem, ale na ekranie wygląda dobrze
Używam ReportLab/Python (opensource) do tworzenia raportów. Poniżej znajduje się fragment mojego kodu.
Na ekranie wygląda świetnie !:
Jednak kiedy wysłać to do drukarki (i tak, ja też majstrował z ustawieniami drukarki) drukuje kilka linii, a nie inne (czasami jest metodyczne i drukuje wzór w kratkę, innym razem jest grubsze/cieńsze linie, należy pamiętać, że dane wyjściowe w drukarce są zgodne w zależności od ustawionych przeze mnie ustawień).
Próbowałem wszelkiego rodzaju kombinacje strokewidth, oraz wszelkiego rodzaju kombinacje ustawień drukarki ... Nie mogę go wydrukować poprawnie! Próbowałem alternatywnej drukarki i uzyskałem DUŻO lepsze wyniki, ale muszę ustawić ustawienia drukarki na ponad 1200 dpi (drukowanie na poziomie CAD). Druga drukarka jest ustawiona na 600dpi. Na tej SAME PRINTER (600dpi) drukuję dokument zrobiony przez byłego współpracownika, a wydruk jest w porządku (uwaga: nie korzystał z ReportLab, więc nie mogę użyć jego kodu/rozwiązania).
Co się dzieje? Czy to jest problem z aliasingiem w drukarce? Czy pomógłbym, gdybym pokrył moje siatki bitmapami (lub innym formatem)? Jak mogę to naprawić (jedynymi opcjami są Python i ReportLab)? Podręcznik ReportLab nie pomógł, "Google" nie pomogło, a poprzednie pytania dotyczące StackExchange nie obejmowały tego konkretnego tematu. Mogę uzyskać siatkę, aby wydrukować wszystkie linie, jeśli ustawię szerokość strokewidth na "1", ale wtedy drobne linie siatki są zbyt grube.
Wynik końcowy dotyczy wykresu liniowego, nad którym pracuję i wiem, że ReportLab ma funkcje wykresu, ale wykresy/funkcje siatki raportów nie dają mi tego, czego potrzebuję do mojego projektu, więc byłem zmuszony do stworzenia własnej siatki z liniami dur/minor (może coś przeoczyłem i otworzyłem na alternatywne techniki, ale obecnie wygląda dobrze w formie PDF, po prostu nie na drukarce).
WSZYSTKIE porady są mile widziane!
TIA,
-J
for i in decimal_range(0, _time, 1):
if (i % 5.0 == 0):
if (i % 25.0 == 0):
grid_pattern.add(shapes.Line(_temp_x,
(_temp_y + _height_of_box),
_temp_x,
(_temp_y + _height_of_box+4),
strokeWidth=1,
strokeColor=colors.black))
else:
pass
grid_pattern.add(shapes.Line(_temp_x, _temp_y, _temp_x,
(_temp_y + _height_of_box),
strokeWidth=.12,
strokeColor=colors.pink))
else:
grid_pattern.add(shapes.Line(_temp_x, _temp_y, _temp_x,
(_temp_y + _height_of_box),
strokeWidth=.12,
strokeColor=colors.pink))
_temp_x += 1 * mm
_temp_x = xorigin
for i in range(0, _mv, 1):
if (i % 5.0 == 0):
grid_pattern.add(shapes.Line(_temp_x, _temp_y,
_temp_x + _width_of_box,
_temp_y, strokeWidth=.12,
strokeColor=colors.pink))
else:
grid_pattern.add(shapes.Line(_temp_x, _temp_y,
_temp_x + _width_of_box,
_temp_y, strokeWidth=.12,
strokeColor=colors.pink))
_temp_y += 1 * mm
UPDATE1
Próbowałem ustawienie szerokości skoku na "0" jako zalecany przez kilka plakatów (i/listy społeczności ReportLab) w następujący sposób:
grid_pattern.add(shapes.Line(_temp_x, _temp_y, _temp_x,
(_temp_y + _height_of_box),
strokeWidth=0,
strokeColor=colors.pink))
To sprawia, że linia o szerokości jednego piksela, która znowu wygląda świetnie na PC, ale nadal drukuje z efektownym wzorem w formacie PDF.
Update2 + ROZWIĄZANIE
Po wielu napady złości i argumentów z ReportLab i mojego komputera okazuje się, że to nie był mój PC lub ReportLab.To były drukarki (korzystałem z dwóch całkowicie różnych drukarek, Canon i HP - niezależnie od modelu) - czułem, że mam wystarczającą ilość zasięgu, aby wykluczyć drukarkę, ale jest więcej problemów z tym problemem! Kontynuuj czytanie ...
ReportLab tak naprawdę nie rysuje linii, po prostu dodaje wiersz postscriptowy, który mówi renderowi, aby narysować linię.
Część mojego początkowego debugowania obejmowała zmianę kolorów, których używałem, aby zobaczyć, czy to był problem - cóż - zmieniłem kolory z różowego na czerwony (niewiele zmian, wiem, ale znowu, przyjęto I Zmieniłem go wystarczająco, aby wykluczyć kolory jako problem).
Cóż z tego, co ostatnio i boleśnie nauczyłem się, jest to, że drukarki konwertują kolory do skali szarości za pomocą formuły, a ta formuła ma tendencję do wywoływania efektów ubocznych antyaliasingu (jak to, co widziałem).
ROZWIĄZANIE: było zmienić kolory siatki. Niektóre kolory działają lepiej niż inne. Aby przetestować to, napisałem prosty skrypt, który można wygenerować w formacie PDF przy użyciu wszystkich kolorów przechowywanych w słowniku kolorów raportów - wydrukuj próbną siatkę, która spowodowała problemy i podaj wartości RGB. Jak się okazuje, wszystkie rodzaje kolorów nie drukują się dobrze na kilku drukarkach (wszystkie inne) - to nie tylko czerwone/różowe ... niektóre "czerwone" kolory drukują dobrze, niektóre drukarki obsługują konwersję skali szarości lepiej niż inne .
Naszym zadaniem jest teraz użyć utworzonego dokumentu PDF, aby znaleźć kolor, który wygląda dobrze na wydruku (zarówno w kolorze, jak iw skali szarości) i na ekranie.
Jeśli nie chcesz pobierać skryptu ze strachu, jestem zły - przynajmniej sprawdź plik PDF i wydrukuj własne próbki, aby sprawdzić, czy możesz odtworzyć problem, który miałem (drukowałem w rozdzielczości 600 dpi - standard - nic nadzwyczajnego ... pamiętaj, że gdybym podniósł ustawienia DPI/jakości, wydrukował dobrze, ale standardowe ustawienia wywoływały we mnie żałobę!).
lub
Dzięki za sugestie, wypróbowuję je teraz i opowiem o swoich odkryciach. –
Próbowałem szerokości obrysu 0, ale to pogorszyło model = /. Próbowałem już drukować na wielu drukarkach - ten sam dokładny wzór (więc zakładam, że to Adobe Reader powoduje problem + mój kod). Mimo to, jeśli podniosę ustawienia drukowania, mogę wydrukować siatkę (tak jak poprzednio). Tworzenie grubszych linii również nie działa ... niektóre linie są drukowane trochę ciemniej/grubsze niż inne (nie wiem, dlaczego tak się dzieje). Jakieś inne sugestie? –
Czy możesz udostępnić przykładowy plik PDF, który stworzyłeś, abyśmy mogli go obejrzeć? Ponadto, gdy powiesz, że wydrukowano "grubsze", czy możesz powiedzieć, jak zwiększyłeś szerokość linii? –