{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreiahszuyoi4yyq2iqeeoino6tilte42ndqg6i5bvgh3mhvb5bi6vre",
    "uri": "at://did:plc:6dmfe46c76jjenq3kaxc5eds/app.bsky.feed.post/3mnipkw2oxpp2"
  },
  "path": "/b/2026/community-bonding-week-1-status-update-gsoc-26",
  "publishedAt": "2026-06-04T17:39:41.000Z",
  "site": "https://ojasmaheshwari.github.io",
  "tags": [
    "Google Summer of Code",
    "Poppler",
    "Draft MR",
    "@the_epicman"
  ],
  "textContent": "Hello Reader!\n\nIn case you don't know me (quite likely 😆), I am Ojas Maheshwari (@the_epicman:matrix.org) and I am currently working in the Google Summer of Code program for the KDE community on a project about Font Subsetting in Poppler under my mentor Albert Astals Cid.\n\n## Community Bonding\n\nIf I am being honest, I had already bonded with the Poppler community before GSoC started 😅\n\nI had a lot of conversations with Albert, Sune, lbaudin and ats, and they already helped me a lot with my technical problems with my contributions prior to GSoC :D\n\nHowever, I also managed to bond with other fellow GSoC contributors this summer so it's a win in my book :D\n\n## Week 1\n\nI learnt a lot about how PDF files work this week.\n\nTechnical terms like Indirect Objects, Default Appearance, Appearance Streams which used to sound confusing to me before finally clicked.\n\nI got more comfortable with traversing and using PDF data structures such as Objects, Arrays, Dicts, Streams etc.\n\nThe Happy News is that I got the Font Subsetting to work for FreeText Annotations.\n\nI have raised a Draft MR which should be ready-to-review by end of this week and my plan is to get it fully correct and merged first and then move on to doing the same thing for forms.\n\n\n_Code screenshot to make the blog look cooler_\n\n## How it works\n\nIf you are interested to know what my current approach is:\n\n  * The whole subsetting runs only when the user saves the document.\n\n  * We go over all resources (for now, just FreeText annotations) that were modified, and call a `subsetFonts` method on them.\n\n  * This is a method implemented by every class that needs subsetting, and inside this method we pass the data on what \"font\" renders what part of the \"text\" to our `FontSubsetter::getSubsetFonts`.\n\n\n\n\n\n    std::map<Ref, Ref> FontSubsetter::getSubsetFonts(const std::map<std::shared_ptr<const GfxFont>, std::string> &fontMappings) const\n\n\n  * The function generates the subset font objects and adds them to the PDF and returns mappings of old font refs and newer font refs. The subsetting happens using a library called \"Harfbuzz\".\n\n  * Then the `subsetFonts` function simply replaces the older refs with the newer ones inside the font subdictionary of the appearance stream of the annotation.\n\n\n\n\n## Thanks for reading\n\nAlthough this blog might look small, it took me more than 1.5 hours to write this because I kept writing and deleting things. I am hoping I get better at writing blogs in the future.\n\nBut anyways, thanks for reading!\nAnd have a great day !\nByee 😃!",
  "title": "Community Bonding + Week 1 Status Update | GSoC '26"
}