Poradnik do tworzenia PDF

Wątek przeniesiony 2024-10-30 13:51 z Oceny i recenzje przez ŁF.

2

Aplikacja serwerowa Windows do wyświetlania PDF i strona poradnikowa:**

  1. Aplikacja serwerowa Windows do wyświetlania plików PDF:
    Aplikacja serwerowa działa na Windowsie, umożliwiając wgrywanie plików PDF przez użytkowników i wyświetlanie ich na stronie internetowej. Użytkownicy mogą przeglądać załadowany dokument PDF bezpośrednio z poziomu przeglądarki, co jest wygodne do udostępniania dokumentów, poradników czy instrukcji. Aplikacja wspiera interfejs, który jest prosty w obsłudze, zapewniając wygodny i szybki dostęp do wgrywanych dokumentów.

  2. Strona internetowa z poradnikiem do tworzenia plików PDF:
    Druga część zestawu to strona internetowa, która pełni funkcję poradnika dla osób chcących tworzyć własne dokumenty PDF. Na stronie znajdują się informacje na temat narzędzi, technik i najlepszych praktyk dotyczących generowania dokumentów PDF. Poradnik obejmuje instrukcje krok po kroku, wskazówki dotyczące formatowania, kompresji oraz optymalizacji PDF, co pomaga użytkownikom w tworzeniu profesjonalnych dokumentów.

Całość stanowi kompletny zestaw do zarządzania i udostępniania dokumentów PDF w ramach aplikacji serwerowej oraz edukacji użytkowników w zakresie tworzenia własnych plików PDF.

Projekt rozpoczęty dopiero.

screenshot-20241029094932.png

screenshot-20241029100529.png

PDFWojtekSobiesiak.7z

PDFWojtekSobiesiak_2.7z

2

Co tu jest do zrecenzowania? Html i js w załączonym pliku to jeden wielki śmietnik, statyczna treść wrzucana przez js, masz tam nawet style od sklepu spożywczego, pierdyliard źle sformatowanych funkcji, których nawet nie używasz plus odwołania do funkcji, których nie definiujesz, każda zmienna umieszczona w window albo window.top (sic! - bo nie używasz ramek). A wszystko wrzucone w 7z, zamiast w repo na gihub czy jakimś innym dostawcy git.

0
ŁF napisał(a):

Co tu jest do zrecenzowania? Html i js w załączonym pliku to jeden wielki śmietnik, statyczna treść wrzucana przez js, masz tam nawet style od sklepu spożywczego, pierdyliard źle sformatowanych funkcji, których nawet nie używasz plus odwołania do funkcji, których nie definiujesz, każda zmienna umieszczona w window albo window.top (sic! - bo nie używasz ramek). A wszystko wrzucone w 7z, zamiast w repo na gihub czy jakimś innym dostawcy git.

Tylko Dorotko , klasa nie oznacza od razu stylu. document.getElementsByClassName("x") - to nie jest użycie stylu tylko fragment JS. To do czego możesz dotykać to jest pdf.js. i tam masz zrodla = [{zrodlo:""}, ] tablice takich obiektów - każdy to jest źrodło ramki. W skrócie bo przechowywanie pozycji aktualnej to już inne zmienne.

1

Tylko Dorotko , klasa nie oznacza od razu stylu.

Piszę Ci Józiu, że spieprzyłeś, a Ty mnie poprawiasz, że tylko schrzaniłeś. Nie umiesz przyjąć krytyki nawet w dziale "Oceny i recenzje". LOL.

[edit]
Ale czekaj, spróbuję być bardziej konkretny:

  • "document.getElementsByClassName("x") - to nie jest użycie stylu tylko fragment JS" - wytłumaczyłeś mi coś, o co nie pytałem. JS używam prawdopodobnie od czasów, kiedy Ciebie jeszcze na świecie nie było, a CSS od czasów jego powstania, więc trochę odóżniam jedno od drugiego.
  • "To do czego możesz dotykać to jest pdf.js" - mogę dotykać co mi się podoba. BTW w tym kontekście "to, czego możesz dotykać" albo "to, do czego możesz się dotykać".
  • "i tam masz zrodla = [{zrodlo:""}, ] tablice takich obiektów - każdy to jest źrodło ramki" - 1) Od definiowana treści jest html, a nie js. 2) W języku o angielskiej składni elementy kodu nazywa się również po angielsku. 3) Zmienne się deklaruje (let/const/var). 4) Należy unikać umieszczania zmiennych w scope window (czyli globalnych).
  • <style id="mkolory"></style> i window.top.mkolory=*{background-color:+color1+;color:+color2+;}button{color:+color3+;background-color:+color4+;cursor:pointer;}; - co to za potworek? 1) Nazwy zmiennych var1, var2 itp - tak się nie nazywa elementów języka, bo po nazwie nie widać, za co zmienna odpowiada. 2) Style generowane/modyfikowane w js. Sam pomysł na dynamiczne generowanie niektórych fragmentów stylu jest cokolwiek nietypowy, ale to kwestia gustu i późniejszych problemów z debugowaniem. 2) Ramki (iframe) do wszystkiego to marnowanie zasobów i bohaterskie pokonywanie problemów nieistniejących przy użyciu właściwej struktury strony.
  • screenshot-20241029130304.png - ciekawe wcięcie, nie masz wrażenia, że powoduje kompletną nieczytelność kodu? Nie lepiej by było tak? screenshot-20241029130913.png
  • Brak dbałości o porządek w kodzie: screenshot-20241029131033.png - kilkadziesiąt spacji na końcu linijki
  • replace("xz1z12",window.top.pozycje[window.top.strona])) - co to za potworek "xz1z12"?
  • window.top.ekolory=textarea{background-color:+color1+;color:+color2+;font:+font+px italic arial,serif;}; - czy wiesz, co to jest interpolacja stringów? Nawet użyłeś właściwego apostrofu, tylko zabrakło wiedzy: window.top.ekolory=textarea{background-color:${color1};color:${color2};font:${font}px italic arial,serif;};
  • jakieś zakomentowane śmieci - screenshot-20241029131541.png
if(window.top.h=='12'){opcje.contentWindow.document.getElementById('f').selectedIndex=0;}
if(window.top.h=='14'){opcje.contentWindow.document.getElementById('f').selectedIndex=1;}
if(window.top.h=='16'){opcje.contentWindow.document.getElementById('f').selectedIndex=2;}
if(window.top.h=='18'){opcje.contentWindow.document.getElementById('f').selectedIndex=3;}
if(window.top.h=='20'){opcje.contentWindow.document.getElementById('f').selectedIndex=4;}
if(window.top.h=='22'){opcje.contentWindow.document.getElementById('f').selectedIndex=5;}
if(window.top.h=='24'){opcje.contentWindow.document.getElementById('f').selectedIndex=6;}

tu już mi chyba pękły oczy. Drzewko if (bez else, bo skoro zmienna miała wartość 12, to może linijkę niżej będzie mieć wartość 14) zamiast switch'a, duplikacja
kodu, beznadziejne nazwy (h, f). Nie lepiej tak?

const index = Math.floor(window.top.h / 2 - 6);
opcje.contentWindow.document.getElementById('f').selectedIndex = index
  • losowe wcięcia, świadczące o braku dbałości o szczegóły:
    screenshot-20241029132446.png. Cztery bloki kodu obok siebie i każdy ma inne wcięcie.
  • Parsowanie wygenerowanego stylu: let fontSizeMatch = fontSizeRegex.exec(window.top.ekolory); (BTW powinien być const). Potem robisz let fontSize = fontSizeMatch ? fontSizeMatch[1] + 'px' : 'Rozmiar czcionki nie znaleziony'; i window.top.h = fontSize.replace('px','');, zapominając przy tym ostatnim, że być może przypiszesz do window.top.h wartość "Rozmiar czcionki nie znaleziony" 😅

Takich niedoróbek i błędów masz setki.

pdf.js nie chce mi się brać teraz na warsztat, html wystarczająco obnaża Twoje braki techniczne i w projektowaniu struktury/architektury.

[edit]
A jednak zerknąłem. W js definiujesz html, zupełnie nie tędy droga. Zawartość tego pliku powinna siedzieć w ukrytych li w htmlu. A z kolei to, co masz w html, powinno siedzieć w tym js. Pomieszanie z poplątaniem.

0
ŁF napisał(a):

Tylko Dorotko , klasa nie oznacza od razu stylu.

A jednak zerknąłem. W js definiujesz html, zupełnie nie tędy droga. Zawartość tego pliku powinna siedzieć w ukrytych li w htmlu. A z kolei to, co masz w html, powinno siedzieć w tym js. Pomieszanie z poplątaniem.

- mogę dotykać co mi się podoba. " " 1) Od definiowana treści jest html, a nie js. 2) W języku o angielskiej składni elementy kodu nazywa się również po angielsku. 3) Zmienne się deklaruje (let/const/var)."

A ja mogę definiować co chcę gdzie chcę, przy moim poziomie kontroli to gdzie co wstawiam nie ma znaczenia bo i tak będzie działać dokładnie tak jak chcę.

"- ciekawe wcięcie,"

To jest wcięcie idealne. Tutaj trochę duże wyszło ale normalnie wzrok skacze błyskawicznie po kodzie.

"interpolacja stringów? Nawet użyłeś właściwego apostrofu, tylko zabrakło wiedzy:"

Chodzi o to ? ` ${zmienna}` - nie wszędzie działa, tak mi było szybciej.

"tu już mi chyba pękły oczy. "

  • użycie pętli wymaga użycia mózgu (albo przełączenie zakładake GPT) - czyli cenne sekundy a skopiowanie to parę kliknięć i zmiana jednej wartości wszędzie, było lżej to tak zrobiłem.

" "xz1z12"?"

jak byś nie zauważył, strona zapamiętuje pozycję na każdej otworzonej stronie poradnika i tam od razu skacze, jak dobrze pamiętam to to jest wskazanie gdzie przewinąć stronę.

"\<style id="mkolory">\</style> i window.top.mkolory=*{background-color:+color1+;color:+color2+;}button{color:+color3+;background-color:+color4+;cursor:pointer;}; -"

ustawienia kolorów przechowuję w localstorage jak użytkownik zechce i taki łańcuch jest standardowym zapisem jaki tam jest przechowywany.

"Parsowanie wygenerowanego stylu: let fontSizeMatch = fontSizeRegex.exec(window.top.ekolory); (BTW powinien być const). Potem robisz let fontSize = fontSizeMatch ? fontSizeMatch[1] + 'px' : 'Rozmiar czcionki nie znaleziony'; i window.top.h = fontSize.replace('px','');, zapominając przy tym ostatnim, że być może przypiszesz do window.top.h wartość "Rozmiar czcionki nie znaleziony"

-- to jest wyszukiwanie liczby w localstorage (tam jest w px) a potem jest ustawianie pól kolorów takie jakie są wskazane w local storage. Takie bzdery które zajmują czas , i w sumie są zbędne ale jak się tego nie zrobi to strona wygląda nienormalnie, machnąłem to tak szybko jak mogłem. Działa.

" 2) Ramki (iframe) do wszystkiego to marnowanie zasobów"

Scrapowanie okien jest wygodniejsze bez iframe'ow ale jeśli tak zrobię AI zrobi za Ciebię taki kawał roboty jaki tu zrobiłeś. Jakiś koleś Z SII mi cały czas gada, że teraz pamięć jest prawie darmowa...

Tak wygląda projekt jednodniowy, policz ile znaków zostało wpisane.

0

Jak się wybierze zakładkę tutorial, a potem notatnik, to ten notatnik zasłania turorial.

0

@tBane

Wrzuć sobie to do tego edytora % komentuje

%PDF-1.1                                % Nagłówek PDF, wersja 1.1
1 0 obj                                % Obiekt 1, katalog dokumentu
<< /Type /Catalog /Pages 2 0 R >>      % Typ obiektu: katalog, odniesienie do obiektu 2
endobj                                 % Koniec obiektu 1
2 0 obj                                % Obiekt 2, zbiór stron
<< /Type /Pages /Kids [3 0 R] /Count 1 >> % Typ obiektu: strony, odniesienie do obiektu 3, liczba stron
endobj                                 % Koniec obiektu 2
3 0 obj                                % Obiekt 3, pojedyncza strona
<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Contents 4 0 R >> % Typ obiektu: strona, odniesienie do obiektu 2, rozmiar strony, odniesienie do obiektu 4
endobj                                 % Koniec obiektu 3
4 0 obj                                % Obiekt 4, treść strony
<< /Length 44 >>                        % Długość strumienia treści
stream                                 % Rozpoczęcie strumienia treści
BT                                      % Rozpoczęcie bloku tekstowego
/F1 24 Tf                               % Ustawienie czcionki F1, rozmiar 24
100 700 Td                             % Ustawienie pozycji tekstu (x=100, y=700)
(Hello) Tj                             % Wyświetlenie tekstu "Hello"
ET                                      % Zakończenie bloku tekstowego
endstream                               % Zakończenie strumienia treści
endobj                                  % Koniec obiektu 4
5 0 obj                                % Obiekt 5, definicja czcionki
<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >> % Typ obiektu: czcionka, typ: Type1, nazwa czcionki: Helvetica
endobj                                 % Koniec obiektu 5
xref                                    % Sekcja cross-reference
0 6                                     % 6 obiektów, zaczynając od 0
0000000000 65535 f                      % Obiekt 0, odniesienie do miejsca w pliku
0000000010 00000 n                      % Obiekt 1, odniesienie do miejsca w pliku
0000000067 00000 n                      % Obiekt 2, odniesienie do miejsca w pliku
0000000178 00000 n                      % Obiekt 3, odniesienie do miejsca w pliku
0000000271 00000 n                      % Obiekt 4, odniesienie do miejsca w pliku
0000000389 00000 n                      % Obiekt 5, odniesienie do miejsca w pliku
trailer                                 % Trailer, informacje końcowe o dokumencie
<< /Root 1 0 R /Size 6 >>               % Odniesienie do obiektu katalogu (1), liczba obiektów
startxref                               % Wskazanie, gdzie zaczyna się sekcja cross-reference
474                                     % Pozycja startxref w pliku
%%EOF                                   % Koniec pliku PDF
1

A jak to działa? W divie "rybny" jest ramka która pokazuje nieistniejący plik "ladowanie.html". Nie widzę żadnego kodu który cokolwiek robi z pdfem poza uploadem na istniejący serwer localhost.
Myślałem że to renderuje pdf a jedyne co dałeś do oceny do ostylowany textarea...

0
obscurity napisał(a):

A jak to działa? W divie "rybny" jest ramka która pokazuje nieistniejący plik "ladowanie.html". Nie widzę żadnego kodu który cokolwiek robi z pdfem poza uploadem na istniejący serwer localhost.
Myślałem że to renderuje pdf a jedyne co dałeś do oceny do ostylowany textarea...

https://infinityhost.ct8.pl/nagrania/Pdf_1.mp4

0

W razie problemów - zrestartować serwer i usunąć pdf.pdf !!

0

Że wam sie chciało odpowiadać 😂, jak zobaczyłem autora to już zrezygnowałem XD

0
johnny_Be_good napisał(a):

W razie problemów - zrestartować serwer i usunąć pdf.pdf !!

aaaa to ten .exe to serwer do uruchomienia. Myślałem że ci się przypadkowo jakiś program do pdfów zawieruszył w archiwum. Nie no execa szemranego pochodzenia odpalać sobie nie będę, tyle to nie

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.