[{"data":1,"prerenderedAt":374},["ShallowReactive",2],{"project-43000303":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":33,"aspects":34,"strip":41,"post_text":42,"what":43,"said":80,"maker_in_thread":168,"shape":179,"grid":182,"attempts":337,"same_week":338,"maker_shows":170,"maker_hidden":366,"reader_version":367,"card":368},"43000303","pdfsyntax","HTML visualization of a PDF file's internal structure","title","Show HN: HTML visualization of a PDF file's internal structure","https:\u002F\u002Fgithub.com\u002Fdesgeeko\u002Fpdfsyntax\u002Fblob\u002Fmain\u002Fdocs\u002Fbrowse.md","github.com","desgeeko",1739195573,2025,451,57,91,3837,3,"legend","dev_tools","pdf debugging visualizer","library",[24,25,26,27],"pdf internals","pdf inspector","pdf debugging","pdf file format","loved",0.604,{"positive":31,"neutral":18,"mixed":32,"critical":32},10,1,15,{"idea":35,"execution":38,"design":39,"privacy":40},{"positive":36,"critical":37},5,0,{"positive":37,"critical":32},{"positive":32,"critical":37},{"positive":32,"critical":37},[37,37,37,37,37,37,37,37,36,36,37,37,37,36,18,18,32,36,37,37,36,36,37,37,37,37,37,37,37,37,37,37,37,36,37,36,37,36,36,37],"Hi, I've just finished a rebuild of this function and added a lot of new features: info, page index, minimap, inverted index,...  I think it may be useful for inspection, debugging or just as a learning resource showcasing the PDF file format. This is a pet project and I would be happy to receive some feedback! Regards",{"problem":44,"audience":50,"pricing":54,"motivation":55,"time_to_build":54,"stack":62,"openness":77,"stage":78,"team_size":79},{"value":45,"source":46,"evidence":47},"Hard to inspect and debug the internal structure of PDF files","maker",[48],{"id":49},"post",{"value":51,"source":46,"evidence":52},"Developers debugging PDFs and people learning the PDF format",[53],{"id":49},null,{"value":56,"source":46,"evidence":57},"Pet project; got hooked reading the PDF specification and it became a general PDF library for Python",[58,59],{"id":49},{"id":60,"by":11,"text":61},"43004724","Correct, PDFSyntax implements everything at the lowest level. You can ignore the HTML visualization and use it as an API to access PDF objects. Why? Because I started a very…",[63,71],{"value":64,"source":65,"evidence":66},"Python","commenter",[67],{"id":68,"by":69,"text":70},"43007293","brailsafe","Since it's a python library, my guess is that they meant a JavaScript or WebAssembly package would be useful.",{"value":72,"source":46,"evidence":73},"HTML and CSS",[74],{"id":75,"by":11,"text":76},"43001537","Yes, I value simplicity and the interactivity offered by basic HTML and CSS is sufficient for my use case :)","unknown","beta","solo",{"praise":81,"objections":104,"requests":115,"questions":130,"alternatives":138},[82,97],{"value":83,"source":65,"evidence":84},"Useful for debugging and security previewing of PDFs",[85,89,93],{"id":86,"by":87,"text":88},"43000602","nonrandomstring","Well done. This is a very useful security previewing tool. PDFs are a menace.",{"id":90,"by":91,"text":92},"43010846","nathan_f77","This is really cool! I've spent the last few years debugging lots of PDFs while working on DocSpring, so I'm always looking for new tools to make this easier. Thanks for working…",{"id":94,"by":95,"text":96},"43000565","xeon06","Wow, I've been doing some PDF parsing at work and this is going to come in SO handy.",{"value":98,"source":65,"evidence":99},"Self-hosted and local processing appreciated",[100],{"id":101,"by":102,"text":103},"43003456","acabajoe","Kudos to making this self-hosted. So very much appreciated!",[105],{"value":106,"source":65,"evidence":107},"Missing endobj, xref, startxref and %%EOF in the byte view",[108,112],{"id":109,"by":110,"text":111},"43000812","tyilo","Looks nice. Would be better if all of the PDF's bytes where shown. Seems like `endobj` and `xref` are not shown.",{"id":113,"by":110,"text":114},"43000989","When opening the following hello world PDF, the trailer isn't shown correctly and both `startxref` and `%%EOF` are missing: https:\u002F\u002Fghostbin.site\u002Fbb7jb",[116,126],{"value":117,"source":65,"evidence":118},"Browser or JavaScript\u002FWASM version with drag and drop",[119,123],{"id":120,"by":121,"text":122},"43001171","tekkk","This would be really nice as browser library. Could just dragn drop a file and see its insides. But impressive nonetheless.",{"id":124,"by":121,"text":125},"43012159","I meant JS or WASM",{"value":127,"source":65,"evidence":128},"Show all bytes of the PDF",[129],{"id":109,"by":110,"text":111},[131],{"value":132,"source":65,"evidence":133},"Why parse PDFs from scratch instead of using an existing library",[134],{"id":135,"by":136,"text":137},"43004386","adelpozo","it does not have any dependency to a pdf parsing library, correct? That's a cool way to learn to file format and be able to work around weird pdf file. But what was the…",[139,146,157],{"value":140,"source":65,"evidence":141},"iText RUPS",[142],{"id":143,"by":144,"text":145},"43000618","swsieber","I've used the iText RUPS (free) for a while for debugging PDFs (as I have the \"privilege\" to work on code that extracts data from PDFs...). It looks like your introspection stuff…",{"value":147,"source":65,"evidence":148},"qpdf",[149,153],{"id":150,"by":151,"text":152},"43001461","LegionMammal978","If you're interested in manipulating PDFs, I've found QPDF [0] to be a useful tool. Its \"QDF mode\" lays out the objects in a form where you can directly edit them, and it can…",{"id":154,"by":155,"text":156},"43001772","vendiddy","Was mentioned in this thread, but I can also endorse qpdf as being a great library. It gives you a JSON representation of the PDF data structure. What's nice is that doesn't hide…",{"value":158,"source":65,"evidence":159},"Kaitai Struct",[160,164],{"id":161,"by":162,"text":163},"43000769","ddulaney","https:\u002F\u002Fkaitai.io\u002F maybe? It looks perfectly nice for its role, but I didn’t use it for my last project because I need serialization as well.",{"id":165,"by":166,"text":167},"43001414","moritonal","Really impressed this site is still running. They'll have what you want https:\u002F\u002Fformats.kaitai.io\u002F",{"comments":169,"answered":170,"key":171},4,2,[172,175,176],{"id":173,"text":174},"43000868","Thanks for noticing! You're right, I will fix that very soon.",{"id":75,"text":76},{"id":177,"text":178},"43017878","Thank you very much!",{"commenters":180,"max_depth":169,"maker_replies":169,"first_comment_mins":33,"lifespan_hours":181},49,249,[183,187,190,194,197,200,203,206,209,212,215,217,221,223,226,227,230,233,236,239,243,247,249,251,253,255,258,259,260,262,267,269,273,276,278,281,284,287,290,293,296,299,302,305,307,308,311,315,317,319,322,324,326,327,328,332,334],[184,37,37,185,186,37],"43003211","other\u002Fneutral\u002Fnone","codetrotter",[188,37,37,185,189,37],"43003703","GaggiX",[191,37,37,192,193,37],"43004004","commenter\u002Fneutral\u002Fnone","jimjimjim",[195,37,37,185,196,37],"43004511","macklinkachorn",[198,37,37,185,199,37],"43004621","bob1029",[201,37,37,185,202,37],"43006736","themanmaran",[204,37,37,185,205,37],"43010482","aboardRat4",[207,37,37,185,208,37],"43012061","rad_gruchalski",[210,37,37,185,211,37],"43012077","spacecadet",[213,37,37,192,214,37],"43057627","gsempe",[216,37,37,192,211,37],"43121194",[218,32,36,219,220,37],"43000463","project\u002Fpositive\u002Fidea","Muromec",[143,170,36,222,144,37],"project\u002Fpositive\u002Fnone",[224,18,37,185,225,37],"43000571","est",[161,18,37,185,162,37],[228,18,37,185,229,37],"43006414","elliottcarlson",[231,18,37,185,232,37],"43001037","MontagFTB",[234,18,37,185,235,37],"43001567","mdaniel",[237,169,36,219,238,37],"43000512","SSLy",[240,169,18,241,242,37],"43000919","project\u002Fneutral\u002Fidea","pr353n747-0n83",[244,169,18,245,246,37],"43002919","project\u002Fneutral\u002Fnone","edoceo",[109,36,18,248,110,37],"project\u002Fmixed\u002Fexecution",[173,36,37,250,11,32],"maker\u002Fneutral\u002Fexecution",[113,36,32,252,110,37],"project\u002Fcritical\u002Fexecution",[120,254,36,219,121,37],6,[256,254,37,192,257,37],"43003852","kohbo",[68,254,37,192,69,37],[124,254,37,192,121,37],[86,261,36,219,87,37],7,[263,264,36,265,266,37],"43001242",8,"project\u002Fpositive\u002Fdesign","kevmo314",[75,264,37,268,11,32],"maker\u002Fneutral\u002Fdesign",[270,271,37,185,272,37],"43004796",9,"nabaraz",[274,271,37,185,275,37],"43004809","wetpaws",[277,271,37,185,193,37],"43005137",[279,271,37,185,280,37],"43005320","stronglikedan",[282,271,37,185,283,37],"43006818","xp84",[285,271,37,185,286,37],"43007839","idislikelatex",[288,271,37,192,289,37],"43012630","sundarurfriend",[291,271,37,185,292,37],"43009778","staplung",[294,271,37,185,295,37],"43010910","pwdisswordfishz",[297,271,37,185,298,37],"43022362","dd_xplore",[300,31,37,185,301,37],"43001031","escapecharacter",[303,31,37,192,304,37],"43001090","freeone3000",[306,31,37,192,301,37],"43003497",[165,31,37,185,166,37],[309,31,37,185,310,37],"43001845","nayuki",[312,313,37,185,314,37],"43004158",11,"flsw",[90,316,36,219,91,37],12,[177,316,37,318,11,32],"maker\u002Fpositive\u002Fnone",[101,320,36,321,102,37],13,"project\u002Fpositive\u002Fprivacy",[135,323,18,241,136,37],14,[60,323,37,325,11,32],"maker\u002Fneutral\u002Fidea",[94,33,36,222,95,37],[154,33,37,185,155,37],[329,330,36,222,331,37],"43008749",16,"disqard",[150,333,37,185,151,37],17,[335,333,37,185,336,37],"43003329","zackmorris",[],[339,344,348,353,357,361],{"id":340,"name":341,"points":342,"category":343},"42975803","theretowhere",321,"consumer_social",{"id":345,"name":346,"points":347,"category":20},"42965198","sqlite-page-explorer",288,{"id":349,"name":350,"points":351,"category":352},"43027335","Game Bub",274,"hardware",{"id":354,"name":355,"points":356,"category":20},"42974378","trre",263,{"id":358,"name":359,"points":360,"category":20},"42984420","FlashSpace",255,{"id":362,"name":363,"points":364,"category":365},"42977388","ExpenseOwl",227,"productivity",false,"v2",{"id":369,"name":5,"line":6,"ai":366,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":370,"top":18,"kw":371,"maker":11,"domain":10,"tier":19,"attempts":37,"strip":372,"url":9,"mix":373,"praise":83,"objection":106,"sub":21},43000303,0.6,[24,25,26,27],"0000000055000533150055000000000005050550",[31,18,32,32],1793991112748]