BewerbungMaster is a Blazor application designed to efficiently create and manage job applications.
- Job application files generation (CVs, cover letters) from JSON data:
- Adding, editing and deleting entries
- Selecting the type of position and, depending on that, generating the appropriate cover letter
- Moving entries to the top and the end of the list
- Copying a job application folder path to the clipboard
- Copying a message to an employer to the clipboard
- Copying a cover letter to the clipboard
- adding entries manually
- unit tests
- integration tests eg. with Selenium
- isolate dependency injection logic
- check if I/O operations are asynchronous
- check for error handling
- check for performance
- check for security
- add XML documentation comments
- add toast notification
JobAppDocs/
: Stores generated job application documentsUsers/
: Contains user-specific document templatesdata.json
: Stores job application data in JSON format
The Services
directory contains the core business logic of the application:
FileManagementService.cs
andFileManagementServiceStatic.cs
: File operations for job application documentsJsonService.cs
: Operations on the data.json and user.json filesPdfGenerationService.cs
: Generates PDF documents for job applicationsApplicationInitializationService.cs
: Methods running at startup, such as generating job application documents from json files
This service is responsible for generating PDF documents for job applications. It utilizes the iText7 library to create professional-looking PDFs with advanced features:
-
iText7 Integration: The service leverages iText7, a powerful PDF manipulation library, to create and modify PDF documents programmatically.
-
Hyperlink Detection: The service includes functionality to automatically detect URLs within the text content. When a URL is identified, it's converted into an active hyperlink in the generated PDF, enhancing the interactivity of the document.
-
Syllable Hyphenation: To improve the readability and layout of the generated PDFs, the service implements syllable hyphenation. This feature intelligently breaks words at appropriate syllable boundaries when necessary, ensuring a clean and professional appearance of the text, especially in narrow columns or justified text alignments.
-
Dynamic Content Placement: The service can dynamically position text, images, and other elements within the PDF, allowing for flexible and customizable document layouts.
-
Font Management: It handles various font styles and sizes, enabling rich text formatting in the generated PDFs.
These advanced features of the PdfGenerationService.cs contribute to creating polished, professional-looking job application documents that stand out to potential employers.
Currently, only the source code is available. To set up the project:
- Clone the repository
- Open the solution in Visual Studio or your preferred IDE
- Restore NuGet packages
- Build the project
- Provide job data in the
data.json
file located in thewwwroot/default
directory. Include the following information for each job application:- Id
- URL
- Position
- Company
The Crawlers
directory contains sample crawlers for extracting this data written in Python/Selenium. You need to have a chrome webdriver version, which is compatible with your Chrome-Browser: https://googlechromelabs.github.io/chrome-for-testing/
-
You can create your own documents in the
Users
directory withinwwwroot
. Make sure to indicate this directory in theappsetings.Development.json
file. -
Run the application and use the interface to manage your job applications and generate documents.
This project uses the following main dependencies:
- .NET 8.0, C# 12
- itext7 (v8.0.5)
- itext7.bouncy-castle-adapter (v8.0.5) - doesn't work without it
- itext7.commons (v8.0.5)
- itext7.hyph (v8.0.5)
For a complete list of dependencies, please refer to the BewerbungMasterApp.csproj
file.
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
If you encounter any problems or have any questions, please open an issue in the GitHub repository.